๐ Gradle์ด ๋ญ์ผ?
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ๋น๋ ํด์ Maven๊ณผ Gradle ์ค์ ์ ํํ ์ ์์ต๋๋ค.
์ ๋ ์คํ๋ง ๊ณต๋ถ๋ฅผ ์์ํ์ ๋ ๋ถ์คํธ์ฝ์ค ์น ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ข๋ฅผ ์๊ฐํ๋ฉด์ ์ปค๋ฆฌํ๋ผ์ ๋ฐ๋ผ Maven ๋น๋ ํด์ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ์ฌ๋ฌ ๊ธฐ์ ์ ๊ฒฝํํด๋ณด๊ณ ์ถ์ ๋ง์์ ์๋กญ๊ฒ Gradle ๋น๋ ํด๋ ์ฌ์ฉํด๋ณด์์ต๋๋ค.
ํ์ง๋ง ๋ ์ฌ์ด์ ํฐ ์ฐจ์ด๋ ๋๋ผ์ง ๋ชปํ์ต๋๋ค. Gradle์ ์ฌ์ฉํ๋ ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ Maven์์ ์ฌ์ฉํ๋ XML์ ๋นํด ๊ฐ๋จํ๋ค๋ ์ฐจ์ด ์ ๋๋ง ๋๋ ์ ์์์ต๋๋ค.
์ด ๋ ๋น๋ ํด ์ค์ ์ ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๊ฒ ๋ Gradle์ ๋ํด์ ์ข ๋ ์์ธํ ์๊ณ ์ถ์์ต๋๋ค. ๊ทธ๋์ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ์ต๋๋ค. โ๏ธ๐
Gradle์ด๋?
Gradle์ ์คํ์์ค ๋น๋ ์๋ํ ํด์ด๋ค. Gradle์ ๊ฑฐ์ ๋ชจ๋ ํ์ ์ ์ํํธ์จ์ด๋ฅผ ๋น๋ํ ์ ์๋ ์ ์ฐํจ์ ๊ฐ์ง๋ค.
Gradle์ ํน์ง
1. High performance
Gradle์ ์คํ์์ผ์ผ ํ๋ task๋ง ์คํ์ํค๊ณ ๋ค๋ฅธ ๋ถํ์ํ ๋์์ ํ์ง ์๋๋ค. ๋, build cache๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ด์ ์คํ์ task output์ ์ฌ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ง์ด ์๋ก ๋ค๋ฅธ ๊ธฐ๊ณ์์๋ build cache๋ฅผ ๊ณต์ ํ์ฌ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
2. JVM foundation
Gradle์ JVM์์ ์คํ๋๊ณ , JVM์ ์ฌ์ฉํ๋ ค๋ฉด JDK๋ฅผ ์ค์นํด์ผ ํ๋ค. ๋ฐ๋ผ์ Java Standard API๋ฅผ ๋น๋ ๋ก์ง์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ Gradle์ ๋ค์ํ ํ๋ซํผ์์ ์คํผํ ์ ์๋ค.
3. Conventions
Gradle์ Maven์ผ๋ก๋ถํฐ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฐจ์ฉํ๋ค. ๋ฐ๋ผ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ผ Java ํ๋ก์ ํธ์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ ํ์ ํ๋ก์ ํธ๋ฅผ ์ฝ๊ฒ ๋น๋ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ํ๋ค๋ฉด ์ปจ๋ฒค์ ์ ์ค๋ฒ๋ผ์ด๋ฉํ๊ฑฐ๋ task๋ฅผ ์ถ๊ฐํ๋ฉด์ ์ปจ๋ฒค์ ๊ธฐ๋ฐ์ ๋น๋๋ฅผ ์ปค์คํฐ๋ง์ด์ง ํ ์ ์๋ค.
4. Extensibility
Gradle์ ํ์ฅํ๋ฉด ๊ณ ์ ์ task ํ์ ์ ์ ๊ณตํ๊ฑฐ๋ ๋ชจ๋ธ์ ๋น๋ํ ์ ์๋ค.
5. IDE, Build Scan support
Android Studio, IntelliJ IDEA, Eclipse ๋ฑ์ IDE์์ Gradle์ ์ํฌํธํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๋๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋ Build Scan์ ์ง์ํ๋ค.
Spring Boot ํ๋ก์ ํธ์์ Gradle
Gradle ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์๋ค.
์ด ์ค์ Gradle ๊ด๋ จ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ก ๊ฐ์ถ๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
โโ gradle
โ โโ wrapper
โ โโ gradle-wrapper.jar
โ โโ gradle-wrapper.properties
โโ gradlew
โโ gradlew.bat
โโ build.gradle
โโ settings.gradle
- gradlew
๋ฆฌ๋ ์ค ๋๋ ๋งฅOS์ฉ ์คํ ์ ์คํฌ๋ฆฝํธ ํ์ผ์ด๋ค. - gradlew.bat
์๋์ฐ์ฉ ์คํ ๋ฐฐ์น ์คํฌ๋ฆฝํธ ํ์ผ์ด๋ค. - gradle-wrapper.jar
JAR ํ์์ผ๋ก ์์ถ๋ Wrapper ํ์ผ์ด๋ค. gradlew๋ gradlew.bat ํ์ผ์ด ํ๋ก์ ํธ ์์ ์ค์น๋๋ ์ด ํ์ผ์ ์ฌ์ฉํ์ฌ Gradle task๋ฅผ ์คํํ๋ค. - gradle-wrapper.properties
Gradle Wrapper ์ค์ ์ ๋ณด ํ์ผ์ด๋ค. Wrapper์ ๋ฒ์ ๋ฑ์ ์ค์ ํ ์ ์๋ค. - build.gradle
ํ๋ก์ ํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ, ํ๋ฌ๊ทธ์ธ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์ ๋ฑ์ ์ค์ ํ ์ ์๋ ๋น๋ ์คํฌ๋ฆฝํธ ํ์ผ์ด๋ค. - settings.gradle
ํ๋ก์ ํธ์ ๊ตฌ์ฑ ์ ๋ณด ํ์ผ์ด๋ค. ๋ฉํฐ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ํํ ๊ฒฝ์ฐ, ํ์ ํ๋ก์ ํธ์ ๊ตฌ์ฑ์ ์ค์ ํ ์ ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ๊ด๋ฆฌ
์์กด์ฑ์ ์ข ์ข ๋ชจ๋๋ก ์ ๊ณต๋๋๋ฐ, ์ด ๋ชจ๋๋ค์ ์ ์ฅํ๊ณ ์๋ ๊ณณ์ repository๋ผ๊ณ ํ๋ค. repository๋ ๋ก์ปฌ ์ ์ฅ์๊ฐ ๋ ์๋ ์๊ณ ์๊ฒฉ ์ ์ฅ์๊ฐ ๋ ์๋ ์๋ค. Gradle์๊ฒ ์ด๋์ ์์กด์ฑ ๋ชจ๋์ ๊ฐ์ ธ์ฌ๊ฑด์ง ์๋ ค์ค์ผ ํ๋๋ฐ, repository ์ ์ธ์ ํตํด ํ ์ ์๋ค.
Gradle์ ํน์ task๋ฅผ ์คํ์ํค๊ธฐ ์ํด ํ์ํ ์์กด์ฑ๋ค์ ๋ฐํ์์์ ์๊ฒฉ ์ ์ฅ์์์ ๋ค์ด๋ก๋๋ฐ๊ฑฐ๋ ๋ก์ปฌ ์ ์ฅ์์์ ๊ฐ์ ธ์จ๋ค. ๋ฉํฐ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ์ ๊ฒฝ์ฐ์๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ด ๊ณผ์ ์ dependency resolution์ด๋ผ๊ณ ํ๋ค.
Gradle์ ํฅํ์ ๋ถํ์ํ ๋คํธ์ํฌ ํธ์ถ์ ํ์ง ์๊ธฐ ์ํด ์์กด์ฑ ํ์ผ๋ค์ dependency cache๋ผ๊ณ ํ๋ ๋ก์ปฌ ์บ์์ ์ ์ฅํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ค์ ์ build.gradle ์คํฌ๋ฆฝํธ ํ์ผ์์ ํ ์ ์๋ค. build.gradle ํ์ผ ๋ด๋ถ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฌ๊ทธ์ธ, ์ ์ฅ์, ์์กด์ฑ์ ์ค์ ํ๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์คํฌ๋ฆฝํธ๋ Groovy์ Kotlin ์ธ์ด๋ก ์์ฑ๋ ์ ์๋๋ฐ, ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ณธ์ผ๋ก Groovy๋ก ์์ฑ๋๋ค.
plugins {
id 'org.springframework.boot' version '2.3.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'com.lim'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.webjars:bootstrap:4.5.0'
implementation 'org.webjars:jquery:3.5.1'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
1. Declaring repositories
repository์๋ ๋ค์ํ ์ข ๋ฅ๊ฐ ์๋ค. repository๋ฅผ ํ์๊ณผ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ๋ถ์ง์ ์ ์๋ค.
- Format์ ๋ฐ๋ฅธ ๊ตฌ๋ถ
- Maven ๊ธฐ๋ฐ ์ ์ฅ์(๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ Maven Central, JCenter, Google Android ๋ฑ์ด ์๋ค.)
- Ivy ๊ธฐ๋ฐ ์ ์ฅ์
- ๋ก์ปฌ ๋๋ ํ ๋ฆฌ ํ์ ์ ์ฅ์
- Connectivity์ ๋ฐ๋ฅธ๊ตฌ๋ถ
- ์ธ์ฆ ์ฒด๊ณ๊ฐ ๊ตฌ์ฑ๋ ์ ์ฅ์(BasicAuthentication, DigestAuthentication, HttpHeaderAuthentication๋ฑ์ ์ธ์ฆ ์ฒด๊ณ๊ฐ ์๋ค.)
- HTTPS, SFTP, AWS S3, Google Cloud Storage ๋ฑ๊ณผ ๊ฐ์ด ๋ค์ํ ์ข ๋ฅ์ ์๊ฒฉ ํ๋กํ ์ฝ๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅํ ์ ์ฅ์
repositories {
mavenCentral()
}
์์ ์ฝ๋์์ Gradle์ด ์์กด์ฑ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ์ ์ฅ์๋ฅผ ์ ์ธํ๋ ๋ถ๋ถ์ด๋ค.
Maven Central ์ ์ฅ์์์ ์์กด์ฑ์ ๊ฐ์ ธ์ค๋๋ก ์ค์ ๋์ด์๋ค.
๋ง์ฝ Bintray JCenter, Google Android ์ ์ฅ์์์ ๊ฐ์ ธ์ค๋๋ก ์ค์ ํ๊ณ ์ถ๋ค๋ฉด jcenter(), google() ๋ ธํ ์ด์ ์ ํ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํ๋ฉด ๋๋ค.
2. Dependency Configuration
Gradle ํ๋ก์ ํธ์์ ์ ์ธ๋ ๋ชจ๋ ์์กด์ฑ์ ์ฌ์ฉ๋๋ ํน์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค. ์๋ฅผ ๋ค์ด ์ด๋ค ์์กด์ฑ์ ์ปดํ์ผ ํ ๋์๋ง ์ฌ์ฉ๋ ์ ์๊ณ , ๋ค๋ฅธ ์์กด์ฑ์ ๋ฐํ์ํ ๋์ ์ฌ์ฉ๋ ์ ์๋ค. ์ด๋ ๊ฒ ์์กด์ฑ์ ๋ฒ์๋ฅผ ํํํ ๊ฒ์ dependency configuration์ด๋ผ๊ณ ํ๋ค.
- Implementation: ๊ตฌํํ ๋์๋ง ์ฌ์ฉ๋๋ค.
- compileOnly: ์ปดํ์ผํ ๋์๋ง ์ฌ์ฉ๋๊ณ ๋ฐํ์ ๋์๋ ์ฌ์ฉ๋์ง ์๋๋ค.
- runtimeOnly: ๋ฐํ์ ๋์๋ง ์ฌ์ฉ๋๋ค.
- testImplementation: ํ ์คํธํ ๋์๋ง ์ฌ์ฉ๋๋ค.
3. Declaring Dependencies
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.webjars:bootstrap:4.5.0'
implementation 'org.webjars:jquery:3.5.1'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
์ด ๋ถ๋ถ์์ ์ฌ์ฉํ ์์กด์ฑ์ configuration๊ณผ ํจ๊ป ์ ์ธํด์ค๋ค. Spring Boot์์๋ starter์ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ค๋ค. ๋ฐ๋ผ์ starter๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ฒ์ ์ ๋ฐ๋ก ๋ช ์ํ์ง ์์๋ ๋๋ค.
reference
- Gradle Docs.
What is Gradle? - ใ์ฒ์ ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ 2, ๊น์์ฌ ์ . ใ
- https://medium.com/@goinhacker/์ด์-์๋ํ-1-๋น๋-์๋ํ-by-gradle-7630c0993d09
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Security] ์คํ๋ง ์ํ๋ฆฌํฐ ์ธ์ฆ ์ํคํ ์ฒ ์ปดํฌ๋ํธ (0) | 2020.12.27 |
---|---|
[Spring Security] ์คํ๋ง ์ํ๋ฆฌํฐ ์ํคํ ์ฒ (0) | 2020.12.27 |
[Spring Boot] JPA์ ORM (0) | 2020.11.05 |
[Spring Boot] Spring Boot๋? Spring Boot์ ํน์ง๊ณผ ์ฅ์ (0) | 2020.10.05 |