카테고리 | 도구/기술 |
프로그래밍 언어 | Java 17 |
프레임워크 | Spring Boot 3.4.2 |
빌드 도구 | gradle |
데이터베이스 | MySQL |
ORM 도구 | Spring Data JPA |
IDE | InteliJ |
버전 관리 | Git, GitHub, GitLab |
패키지 관리 | Maven Central |
API 문서화 | Swagger |
로깅 | SLF4J |
배포 도구 | 미정 |
운영 환경 | 미정 |
CI/CD 도구 | Jenkins or GitHub Actions |
1. 플러그인
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.2'
id 'io.spring.dependency-management' version '1.1.7'
}
1. id 'java'
gradle이 Java 프로젝트로 동작할 수 있도록 필요한 태스크와 설정을 추가
주요 기능
- 컴파일 : compileJava 태스크를 통해 Java 소스 코드를 컴파일
- 테스트 : test 태스크를 통해 단위 테스트 실행
- JAR 생성 : jar 태스크를 통해 JAR 파일을 생성
- 의존성 관리 : dependencies 블록을 사용해 외부 라이브러리 관리
2. id 'org.springframework.boot' version '3.4.2'
Spring Boot 애플리케이션의 빌드와 실행을 자동화
주요 기능
- 애플리케이션 실행 : bootRun 태스크를 통해 Spring Boot 애플리케이션 실행
- 애플이케이션 빌드 : bootJar 태스크를 통해 실행 가능한 JAR 파일 생성
- 자동 설정 : 애플리케이션의 환경과 빈을 자동으로 설정
자동 설정 예시
간단한 예시로 스프링 부트로 웹 애플리케이션 또는 REST API를 개발할때 필수로 사용되는 spring-boot-starter-web 의존성을 생각해 보자
해당 스타터 의존성은 웹 개발에 필요한 라이브러리를 모아둔 의존성으로 아래와 같은 라이브러리 들을 포함한다.
1. Spring Web (spring-web)
- HTTP 요청 및 응답 처리
- 컨트롤러 매핑 등을 지원
2. Spring WebMVC (spring-webmvc)
- DispatcherServlet
- MVC 관련 어노테이션 (@Controller, @RequestMapping 등)
- ViewResolver: HTML, JSP, Thymeleaf와 같은 뷰를 렌더링하는 역할
- HTTP 요청/응답 처리
3. 내장 웹 서버
- 기본적으로 Apache Tomcat 설정
4. Jackson (com.fasterxml.jackson)
- JSON 데이터 직렬화 역직렬화
5. Validation (Hibernate Validator)
- 유효성 검사 @Valid, @NotNull, @Size
main 클래스에 @SpringBootApplication 가 설정되어 있다면 @EnableAutoConfiguration 을 이용해 의존성 추가시 관련된 설정을 자동으로 활성화해 준다.
@SpringBootApplication
public class Springboot3templateApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot3templateApplication.class, args);
}
}
build.gradle 의 의존성을 확인하고
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
해당 의존성과 라이브러리를 사용하기 위해 필요한 설정들을 자동으로 해준다.
수동 설정 예시
수동 설정의 경우 모든 의존성을 직접 설정해 줘야 한다.
dependencies {
// Spring WebMVC
implementation 'org.springframework:spring-webmvc:5.3.10'
// 내장 Tomcat
implementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.54'
// Jackson (JSON 변환)
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
// Bean Validation
implementation 'org.hibernate.validator:hibernate-validator:6.2.0.Final'
}
관련 빈들(DispatcherServlet, ViewResolver, DataSource)을 수동으로 설정 해줘야 한다.
@Configuration
public class AppConfig {
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
@Bean
public ServletRegistrationBean<DispatcherServlet> dispatcherServletRegistration() {
ServletRegistrationBean<DispatcherServlet> registration =
new ServletRegistrationBean<>(dispatcherServlet(), "/");
registration.setName("dispatcherServlet");
return registration;
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public TomcatEmbeddedServletContainerFactory tomcat() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.setPort(8080); // 서버 포트 설정
return factory;
}
}
3. id 'io.spring.dependency-management' version '1.1.7'
Spring Boot BOM(Bill of Materials)을 통해 의존성 버전 관리
주요기능
- BOM(Bill of Materials) 지원 : BOM에 지정된 의존성 버전을 자동으로 적용
- 유연한 의존성 선언 : 필요시 특정 의존성에 대한 버전을 명시적으로 지정 가능
예시
버전 관리 플러그인이 없다면 아래와 같이 의존성에 버전을 명시해 줘야 하지만
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.2' // 버전 명시
플러그인을 사용한다면 버전을 생략해도 자동으로 버전을 관리해 준다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' // 버전 생략 가능
}
2. 그룹 이름 및 버전 설정
group = 'com.example'
version = '0.0.1-SNAPSHOT'
3. Java 버전 설정
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
4. 의존성 정의 및 수정
compileOnly : 애플리케이션에서 컴파일 시에만 필요한 의존성을 지정하는 구성
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
5. 의존성 저장소
Maven Central 저장소를 참고하도록 설정 (대부분의 오픈소스 라이브러리가 이곳에 호스팅)
repositories {
mavenCentral()
}
6. 의존성 정의
프로젝트에 필요한 라이브러리를 관리
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 | 컴파일 & 실행 시 모두 필요한 라이브러리 |
compileOnly | 컴파일 시에만 필요, 실행 시 필요 없음 |
annotationProcessor | 어노테이션을 처리하는 컴파일러 플러그인 추가 |
runtimeOnly | 실행 시에만 필요, 컴파일 시 필요 없음 |
testImplementation | 테스트 코드 작성 시 필요한 라이브러리 |
testRuntimeOnly | 테스트 실행할 때만 필요한 라이브러리 |
7. 테스트 설정
gradle에서 JUnit 테스트를 실행할 때 JUnit 5(JUnit Platform)를 사용하도록 설정하는 역할
tasks.named('test') {
useJUnitPlatform()
}
'Spring Boot > Sprng Boot Sample Code' 카테고리의 다른 글
Spring Boot 에서 네이버 클라우드 Object Storage 에 파일 업로드 (1) | 2025.03.03 |
---|---|
[SpringBoot 3.x] 4. @PreAuthorize 어노테이션을 이용한 API 인가 설정 (0) | 2025.03.03 |
[Spring Boot 3.x] 3. JWT 토큰 인증(filter) & API 테스트 (0) | 2025.03.01 |
[Spring Boot 3.x] 2. JWT 토큰과 쿠키를 이용한 로그인 구현 (0) | 2025.02.24 |
[Spring Boot 3.x] 1. 회원가입 구현 (1) | 2025.02.02 |