build.gradle 이해하기

2025. 1. 30. 01:15·Spring Boot/Sprng Boot Sample Code

 

카테고리 도구/기술
프로그래밍 언어 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
'Spring Boot/Sprng Boot Sample Code' 카테고리의 다른 글
  • [SpringBoot 3.x] 4. @PreAuthorize 어노테이션을 이용한 API 인가 설정
  • [Spring Boot 3.x] 3. JWT 토큰 인증(filter) & API 테스트
  • [Spring Boot 3.x] 2. JWT 토큰과 쿠키를 이용한 로그인 구현
  • [Spring Boot 3.x] 1. 회원가입 구현
Yun-seul
Yun-seul
재능이 없으면 열심히라도 하자
  • Yun-seul
    윤슬
    Yun-seul
  • 전체
    오늘
    어제
    • 분류 전체보기 (22)
      • Java (1)
        • Java 기본 (1)
      • Spring Boot (9)
        • Sprng Boot Sample Code (9)
      • Docker (1)
      • Kubernetes (7)
        • Common (3)
        • GKE(Google Kubernetes Engin.. (4)
        • EKS(Elastic Kubernetes Serv.. (0)
      • Redis (0)
      • AWS (0)
      • Git (0)
      • Reflection (1)
      • Troubleshooting (3)
      • Performance Tuning (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    kubernetes
    globalexception
    GKE
    jwt토큰 #로그인 #회원가입 #쿠키 #보안설정
    쿠버네티스
    전역예외처리
    onceperrequestfilter
    rfc6750
    재요청
    methodargumentnotvalidexception
    커스텀익셉션
    djava.io.tmpdir
    unable to create tempdir. java.io.tmpdir is set to
    어세스토큰
    에러코드관리
    SpringBoot
    docker
    @value #null #어노테이션 #springboot #springioc #컨테이너
    임시디렉토리
    필터2번
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Yun-seul
build.gradle 이해하기
상단으로

티스토리툴바