어제 오늘 내일

[Spring Boot] SpringBoot Starter가 도대체 뭔가요? 의존성 지옥 탈출! 본문

IT/SpringBoot

[Spring Boot] SpringBoot Starter가 도대체 뭔가요? 의존성 지옥 탈출!

hi.anna 2026. 3. 1. 00:19

스프링 부트 프로젝트를 시작하면 build.gradle에서 항상 이런 녀석들을 마주칩니다.

implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

도대체 저 starter라는 게 뭘까요?
그냥 "라이브러리"라고 부르면 되는데 왜 굳이 "Starter"라는 이름을 붙였을까요?

오늘은 스프링 부트의 핵심 철학이 담긴 Starter에 대해 알아보겠습니다.


1. 옛날 이야기: 스프링의 "의존성 지옥" 😈

스프링 부트가 없던 시절, 웹 애플리케이션 하나를 만들려면 우리는 마트에서 재료를 하나하나 장을 봐야 했습니다.

개발자: "웹 개발 해야지! 재료 좀 담아볼까?"

  1. Spring MVC (v5.2.3) 담고...
  2. JSON 변환해야 하니까 Jackson (v2.10.1) 담고...
  3. 로깅해야 하니까 Log4j (v1.2) 담고...
  4. 서버 띄워야 하니까 Tomcat (v9.0) 담고...

문제점:

  1. 귀찮음: 필요한 라이브러리가 수십 개입니다.
  2. 버전 충돌 (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 덕분에 우리는:

  1. build.gradle 코드가 획기적으로 짧아졌고,
  2. 라이브러리 버전 호환성을 고민할 필요가 없어졌으며,
  3. "비즈니스 로직" 구현에만 집중할 수 있게 되었습니다.

이제 implementation 한 줄을 추가할 때마다, "아, 누군가 나를 위해 밀키트를 포장해 뒀구나" 하고 감사함을 느껴보세요! 😉

 

반응형
Comments