| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- math
- input
- 스프링부트
- 단위테스트
- HashMap
- 테스트자동화
- ArrayList
- junit
- Array
- CSS
- javascript
- 인텔리제이
- Java
- string
- junit5
- SpringBoot
- 정규식
- 자바문법
- 자바
- list
- vscode
- 배열
- html
- Eclipse
- IntelliJ
- 문자열
- Visual Studio Code
- java테스트
- 자바스크립트
- js
- Today
- Total
어제 오늘 내일
[Spring Boot] SpringBoot Starter가 도대체 뭔가요? 의존성 지옥 탈출! 본문
스프링 부트 프로젝트를 시작하면 build.gradle에서 항상 이런 녀석들을 마주칩니다.
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
도대체 저 starter라는 게 뭘까요?
그냥 "라이브러리"라고 부르면 되는데 왜 굳이 "Starter"라는 이름을 붙였을까요?
오늘은 스프링 부트의 핵심 철학이 담긴 Starter에 대해 알아보겠습니다.
1. 옛날 이야기: 스프링의 "의존성 지옥" 😈
스프링 부트가 없던 시절, 웹 애플리케이션 하나를 만들려면 우리는 마트에서 재료를 하나하나 장을 봐야 했습니다.
개발자: "웹 개발 해야지! 재료 좀 담아볼까?"
- Spring MVC (
v5.2.3) 담고... - JSON 변환해야 하니까 Jackson (
v2.10.1) 담고... - 로깅해야 하니까 Log4j (
v1.2) 담고... - 서버 띄워야 하니까 Tomcat (
v9.0) 담고...
문제점:
- 귀찮음: 필요한 라이브러리가 수십 개입니다.
- 버전 충돌 (Hell): "어? Spring 5.2랑 Jackson 2.9랑은 호환이 안 되네? 에러 펑!" 💥
이것을 해결하기 위해 등장한 것이 바로 Spring Boot Starter입니다.
2. Starter는 "밀키트(Meal Kit)"다! 🍲
Starter는 복잡한 의존성들을 목적에 맞게 미리 모아둔 "패키지 세트"입니다.
우리가 파스타를 해 먹으려 할 때, 면 사고, 토마토 사고, 마늘 사고, 치즈 따로 사지 않죠?
그냥 "파스타 밀키트" 하나만 집어 오면 끝입니다.
spring-boot-starter-web(웹 개발 밀키트)- 이것만 추가하면:
Tomcat,Spring MVC,Jackson,Logback등 웹 개발에 필요한 모든 라이브러리 수십 개가 "호환되는 버전"으로 알아서 딸려옵니다.
3. 실제로 까보자 (starter-web의 내부)
build.gradle에는 딱 한 줄 적었지만, 실제로는 아래 라이브러리들이 모두 포함됩니다.
// 우리는 이거 한 줄 적었지만...
implementation 'org.springframework.boot:spring-boot-starter-web'
실제로 가져오는 것들 (Transitive Dependencies):
- 📄
spring-webmvc: 스프링 웹 MVC 프레임워크 - 🐱
tomcat-embed-core: 내장 톰캣 (따로 설치 안 해도 되는 이유!) - 📝
jackson-databind: JSON 처리 라이브러리 - ✅
hibernate-validator: 유효성 검사 (@Valid) - ... (기타 등등)
이 모든 것이 서로 충돌 나지 않는 완벽한 버전 조합으로 세팅되어 있습니다. 우리는 그냥 믿고 쓰면 됩니다.
4. 자주 쓰는 Starter 총정리 (Cheat Sheet) 📝
스프링 부트 개발자라면 이 정도는 외우고 있으면 편합니다.
| Starter 이름 | 용도 | 포함된 핵심 기술 |
spring-boot-starter-web |
웹 API 만들기 (필수) | Spring MVC, Tomcat, Jackson |
spring-boot-starter-data-jpa |
DB 다루기 (필수) | Hibernate, Spring Data JPA, HikariCP |
spring-boot-starter-security |
보안/로그인 | Spring Security |
spring-boot-starter-validation |
입력값 검증 | Hibernate Validator (@NotNull 등) |
spring-boot-starter-test |
테스트 코드 작성 | JUnit 5, Mockito, AssertJ |
spring-boot-starter-thymeleaf |
화면 만들기 (SSR) | Thymeleaf 템플릿 엔진 |
5. 이름 짓는 규칙 (Naming Convention) ⚠️
라이브러리를 추가하다 보면 이름 순서가 다른 것들을 볼 수 있습니다. 여기에도 규칙이 있다는 사실!
① 공식 Starter (spring-boot-starter-*)
스프링 팀에서 공식적으로 만들고 관리하는 녀석들입니다. 이름이 뒤에 옵니다.
- 예:
spring-boot-starter-web,spring-boot-starter-security
② 서드파티 Starter (*-spring-boot-starter)
스프링 팀이 아니라, 다른 회사나 커뮤니티에서 만든 녀석들입니다. 이름이 앞에 옵니다.
- 예:
mybatis-spring-boot-starter(마이바티스 팀에서 만듦) - 예:
firebase-spring-boot-starter
Tip: 검색할 때 이 규칙을 알면 공식 라이브러리인지 아닌지 구분하기 쉽습니다!
🎉 마무리
Starter 덕분에 우리는:
build.gradle코드가 획기적으로 짧아졌고,- 라이브러리 버전 호환성을 고민할 필요가 없어졌으며,
- "비즈니스 로직" 구현에만 집중할 수 있게 되었습니다.
이제 implementation 한 줄을 추가할 때마다, "아, 누군가 나를 위해 밀키트를 포장해 뒀구나" 하고 감사함을 느껴보세요! 😉
'IT > SpringBoot' 카테고리의 다른 글
| [Spring Boot] 서버의 건강검진 리포트, Actuator 완벽 가이드 (0) | 2026.03.03 |
|---|---|
| [Spring Boot] 마법의 비밀, Auto Configuration (자동 설정) (1) | 2026.03.01 |
| [Spring Boot] 실무편 - 예외 처리의 완성, 전역 예외 처리 (@RestControllerAdvice) (0) | 2026.02.28 |
| [Spring Boot] 필수 어노테이션 총정리 (Cheat Sheet) 📝 (0) | 2026.02.28 |
| [Spring Boot] AOP 심화 분석 - LogAspect 코드 뜯어보기 & 문법 완벽 정리 (0) | 2026.02.27 |
