Spring Boot Starters
。프로젝트에 필요한 여러라이브러리·프레임워크를 하나의 그룹(Starter)으로 묶어서의존성 선언을단순화해 주는Spring Boot의 편의 기능
▶빌드시Starter관련라이브러리들을 일괄적으로 내려받아프로젝트에 포함
。bulid.gradle의dependencies {}에Starter에 대한의존성을 정의하여Applitcation을 Build 시 필요한Starter를 불러올 수 있음
▶ctrl + click으로 해당 starter의 내부 dependency 구현을 확인 가능.
build.gradle
。gradle을 사용하는Java 프로젝트의빌드 스크립트 파일
구성요소
프로젝트의메타데이터
。그룹,버전group = 'com.KTCloud' version = '0.0.1-SNAPSHOT' description = 'Excercise'
plugins: 플러그인
。빌드에 필요한플러그인을 정의plugins { id 'java' id 'org.springframework.boot' version '3.5.6' id 'io.spring.dependency-management' version '1.1.7' }
repositories: 원격저장소
。의존성 라이브러리를 가져올원격저장소지정 (Maven Central등 )repositories { mavenCentral() }
dependencies: 외부 라이브러리 의존성
。프로젝트에서 사용할스타터,라이브러리에 대한의존성을 정의
。 MVNRepository
▶ 필요한Starter또는라이브러리에 대한의존성정보를 가져올 수 있음
。dependency정의 시버전을 제외하고 정의하는 경우plugins에 정의된버전을 기반으로 통일하여버저닝
ex )id 'io.spring.dependency-management' version '1.1.7'
의존성 라이브러리선언 키워드dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' }
implementation
。src/main/java의소스코드에의존성 라이브러리가컴파일에서 활용 및런타임에도 활용하여빌드파일(JAR)에도 포함
compileOnly:컴파일만 수행
。의존성 라이브러리가컴파일에서만 활용하고런타임에는 포함 X
▶빌드파일에는 미포함
runtimeOnly:런타임만 수행
。의존성 라이브러리가컴파일시에는 사용되지않고,런타임에서만 사용
▶빌드파일에패키징되어 포함
testImplementation
。src/test/java의테스트코드에서의존성 라이브러리를컴파일및런타임시 활용
▶JUnit,Mockito등의테스트전용라이브러리에서 활용
。 해당의존성 라이브러리는메인 소스코드의런타임,컴파일에서 영향을 주지않음
dependencyManagement: 의존성 버전관리
。라이브러리 의존성의버전을 통일해서 관리dependencyManagement { imports { mavenBom 'org.springframework.cloud:spring-cloud-dependencies:2024.0.0' } }▶
Spring Cloud의의존성의버전을2024.0.0으로 통일해서 관리
task
。기본 제공task(compileJava,test,bootRun등 )의 동작을재정의하거나 새테스크를 정의tasks.named('test') { useJUnitPlatform() }
Spring Boot Starter
。한책임을 위한 여러라이브러리들의의존성들을 하나의 단위로 통합하여 묶어놓은Artifact
▶프로젝트 빌드시Starter관련라이브러리들을 일괄적으로 내려받아프로젝트에 자동으로 포함
ex )spring-boot-starter-web에 대한의존성을 추가 시
▶Spring,Spring MVC,Jackson,Tomcat등의Transitive Dependency들이 일괄적으로 포함
Spring Boot스타터 관련
id 'io.spring.dependency-management' version '1.1.7를plugin에 정의하는 경우Spring Boot Starter의의존성이 자동으로 관리
Spring Web:spring-boot-starter-web:
。Web Application 개발에 필요한실행환경을 제공하는Starter
▶Spring MVC 구조를 기반으로한RESTful Application의빌드용도로 사용
。REST API를 구축하기위해 필요한Starter
。Spring MVC,Jackson,Tomcat에 대한Transitive Dependency들을 포함
▶ 기본내장서버로Apache Tomcat사용
▶Error Page/Dispatcher Servlet/Spring Bean -> JSON Conversion/Tomcat Server등이 자동으로Auto Configurationimplementation "org.springframework.boot:spring-boot-starter-web"
Spring Web MVC:
。Spring Web Starter에 포함되어Servlet API를 기반으로클라이언트의요청을 처리하는모듈
▶Spring MVC 디자인 패턴을 사용하기위한 여러구현체들을 포함
spring-boot-starter-validation
。@Valid등Validation에 필요한 기능 사용 시 정의하는 starter
spring-boot-starter-test
。Unit Test를 실행 시 정의하는 starter
spring-boot-starter-hateoas:
。REST API정의 시 필요한HATEOAS사용 시 정의하는starter
spring-boot-starter-data-jpa:
。JPA를 활용한DB Access시 정의하는Starter
spring-boot-starter-jdbc:
。JDBC를 이용한DB Access시 정의하는Starter
spring-boot-starter-security:
。Web Application또는REST API의보안설정시 정의하는Starter
spring-boot-starter-actuator:
。Endpoint를 통해Production 단계의Application을모니터링하고관리시 정의하는Starter
spring-boot-starter-validation
。Client로부터POST Request로 전송된<form>객체 또는DTO의 데이터에 대한유효성 검증을 수행.
spring-boot-devtools
。Spring Boot의DevTools 모듈의 기능 제공
▶ 반영 시 java파일에서 코드 수정 시 자동으로 서버가 재실행
Spring Cloud관련스타터
。의존성전체에 대한버전을 명시하기위해 따로dependencyManagement를 설정dependencyManagement { imports { mavenBom 'org.springframework.cloud:spring-cloud-dependencies:2024.0.0' } }▶
spring cloud의의존성 버전을2024.0.0으로 설정
spring-cloud-starter-gatewayimplementation 'org.springframework.cloud:spring-cloud-starter-gateway'。
API Gateway 서버역할의스프링 프로젝트에의존성정의
spring-cloud-starter-netflix-eureka-serverimplementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'。
Eureka 서버역할의스프링 프로젝트에의존성정의
spring-cloud-starter-netflix-eureka-clientimplementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'。
Eureka 서버에마이크로서비스의위치정보를 요구할스프링 프로젝트( ex.API Gateway,마이크로서비스모듈, ... )에의존성정의