
스프링 프로젝트를 생성할 때 스프링 이니셜라이저를 통해서 진행하였고 build.gradle은 대충 넘어갔습니다. 그러다 보니 추가로 의존성을 추가하는 상황에서 헤매는 경우가 있어 공부하고자 합니다.
Gradle이란?
Gradle을 알기에 앞서 빌드를 먼저 알아야 합니다.
빌드(build)란 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 의미합니다.
빌드 도구는 이러한 빌드 과정을 도와주는 도구를 말합니다. 빌드 도구로는 Ant, Maven, Gradle이 있습니다.
이 중에서 Gradle은 Ant, Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 결합한 오픈소스 빌드 자동화 도구입니다.
build.gradle 알아보기
build.gradle 파일은 빌드 스크립트라고도 합니다. build.gradle 파일에는 의존성이나 플러그인 설정 등과 같은 빌드에 필요한 설정을 작성합니다. 아래 예시는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책의 build.gradle 파일입니다.
현재는 코드가 많이 변경되었습니다. 바뀐 코드는 맨 아래 사이트를 참고하시면 됩니다.
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management' //스프링 부트의 의존성들을 관리해 주는 플러그인. 꼭 추가해야함
group 'com.jojoldu.book'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies { //의존성 코드에 버전을 명시하지 않으면 위의 spring-boot-gradle-plugin 버전을 따라감.
//버전 충돌 문제를 해결한다는 장점이 있음
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
- buildscript: 프로젝트의 플러그인 의존성 관리를 위한 설정
- ext: build.gradle에서 사용하는 전역변수를 설정
- repositories: 각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지 설정. 대표적으로 mavenCentral, jcenter이 있음. (jcenter은 22년 2월 이후로 서비스 종료)
- dependencies: 프로젝트 개발에 필요한 의존성들을 선언
org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}: spring-boot-gradle-plugin라는 스프링 부트 그레들 플러그인의 2.1.7.RELEASE를 의존성으로 받겠다는 의미
- plugin: 프로그램이나 소프트웨어에 추가적인 기능이나 특징을 제공하는 소프트웨어 컴포넌트
- sourceCompatibility: Java 버전과 일치하는 값으로 컴파일에서 사용하는 JDK 버전. 컴파일 단계에서 에러를 감지하여, 실수로 더 높은 버전의 Java 기능을 사용하는 것을 방지
- compile: 컴파일 시점에 필요한 의존성 주입 ( 더 이상 사용 X, implementation 사용)
- testCompile: 프로젝트의 테스트를 위한 의존성 주입 (더 이상 사용 X, testImplementation 사용)
아래 예시는 김영한 님의 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술'의 스프링 이니셜라이저를 사용하여 만든 build.gradle 파일입니다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.7'
id 'io.spring.dependency-management' version '1.1.2'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '11'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
위의 코드를 보면 buildscript가 사라진 것을 볼 수 있습니다.
Gradle 4.3 이후부터는 buildscript + apply plugin을 plugins에서 플러그인 id와 version을 한 줄에 표기하는 방식으로 관리할 수 있습니다.
- implementation: 컴파일, 런타임 모두 쓰이는 의존성 주입
- compileOnly: 컴파일 시에 만 의존성 주입, 런타임 때에는 사용되지 않음
- annotationProcessor: 컴파일 시 사용되는 의존성 주입(lombok 사용할 때 필수로 추가)
- testImplementation: 테스트 시에만 의존성 주입
- runtimeOnly: 런타임 시에 만 의존성 주입
그동안 스프링 이니셜라이저로 build.gradle을 생성하고 따로 공부한 적이 없었는데, 이번 기회에 공부하면서 각 코드가 무슨 역할을 하는지 알 수 있었습니다. 다만 이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'의 경우 2019년에 출판되었기에 현재 사용하는 build.gradle 파일과는 다른 부분이 많았습니다. 이 부분을 주의하면서 책을 읽어야 할 것 같습니다. (변경된 세팅은 https://github.com/jojoldu/freelec-springboot2-webservice 와 https://jojoldu.tistory.com/539에 나와있습니다!)
'Spring' 카테고리의 다른 글
| [Spring] Spring Security와 OAuth 2.0으로 구글 소셜 로그인 구현(1) (0) | 2023.08.11 |
|---|---|
| JPA, Hibernate, Spring Data JPA? (0) | 2023.08.06 |
| [Spring] Swagger 사용하기 (0) | 2023.06.14 |
| [Spring] 엔티티에 생성일자 및 수정일자 칼럼 간편히 추가하기 (0) | 2023.06.12 |
| [Spring] 쿼리 메서드 기능 이해 및 응용1 (0) | 2023.06.07 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!