๐ง ์๋ก
๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ , ํน์ ์ํํธ์จ์ด ํ๋ก์ ํธ๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ง ์์ต๋๋ค.
์ด๋ค ํ๋ก์ ํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ,
์ด๋ค ํ๋ก์ ํธ๋ ๊ด๋ จ์๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ์์คํ ์ ๋ถ๋ฆฌ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑํ ๋ค ํ ๋ชจ๋์์ ๋ค๋ฅธ ๋ชจ๋์ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
๊ฒฐ๊ตญ ๋๋ถ๋ถ์ ํ๋ก์ ํธ๋ ์ฌ๋ฌ ๋ค๋ฅธ ํ๋ก์ ํธ(๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ชจ๋ ๋ฑ๋ฑ)์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ์ฌ ์คํ๋ฉ๋๋ค.
์ฆ ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋ํ ์์กด์ฑ(dependency)์ด ๋ฐ์ํฉ๋๋ค.
์์กด์ฑ ๊ด๋ฆฌ(Dependency management)๋ ํ๋ก์ ํธ์์ ํ์๋กํ๋ ์์กด์ฑ๋ค์ ์ ์ธํ๊ณ , ์ด๋ค์ ๊ฐ์ ธ์ค๊ณ (resolving), ์ฌ์ฉํ๊ธฐ ์ํ ์๋ํ๋ ๊ธฐ์ ์ ๋๋ค.
๐ง Gradle ์์์ Dependency Management
๋ค์์ ์์กด์ฑ ๊ด๋ฆฌ์ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ์ ๋๋ค.
์๋์ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์๋ฐ ํ๋ก์ ํธ๋ฅผ ํตํด ์ฉ์ด๋ฅผ ์ ์ํ๋ ์ฃผ์ํ ๊ฐ๋ ๋ค์ ์์๋ณด๊ฒ ์ต๋๋ค.
- ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Google Guava๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- JUnit ํ ์คํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ง Repository
ํด๋น ํ๋ก์ ํธ๋ Guaba์ JUnit์ ์์กด์ฑ์ ๊ฐ์ง๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
Gradle์ ์ด๋ฌํ ์์กด์ฑ์ repository๋ก๋ถํฐ ๊ฐ์ ธ์ต๋๋ค.
์ด๋ฅผ ์ํด Gradle์๊ฒ ์์กด์ฑ์ ๊ฐ์ ธ์ฌ repository๋ฅผ ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์์ repository๋ก Maven Repository๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค.
repositories {
mavenCentral()
}
๐ง Configuration
์์กด์ฑ์ ์ปดํ์ผ ์์๋ง ํ์ํ ์๋ ์๊ณ , ์ปดํ์ผ๊ณผ ๋ฐํ์ ์์ ์ ๋ชจ๋ ํ์ํ ์๋ ์์ต๋๋ค.
๋๋ ํ ์คํธ๋ฅผ ์คํํ ๋์๋ง ํ์ํ ์๋ ์์ต๋๋ค.
์ด๋ ๊ฒ ์์กด์ฑ์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ฌ์ฉ๋๋ ๋ฒ์(scope)๊ฐ ๋ค๋ฅผ ์ ์๋๋ฐ,
์ด๋ฌํ ์์กด์ฑ์ ๋ฒ์(scope)๋ฅผ configuration์ด๋ผ ํฉ๋๋ค.
Gradle์์๋ configuration์ ํตํด ์์กด์ฑ๋ค์ ๋ฒ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ด์ ๋ํด์๋ ๋ค์ ๊ธ์์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐ง Dependency resolution
๋น๋๋ฅผ ์งํํ๋ ๋์, Gradle์ ์์ (task)๋ค์ ์ํํ๊ธฐ ์ํด ํ์ํ ์์กด์ฑ๋ค์ ์ฐพ์ต๋๋ค.
์์กด์ฑ์ ์๊ฒฉ ์ ์ฅ์(ex: Maven Repository)์์ ๋ค์ด๋ก๋๋๊ฑฐ๋, ๋ก์ปฌ ๋๋ ํ ๋ฆฌ์์ ์ฐพ์์ง ์๋ ์์ต๋๋ค.
multi-module ํ๊ฒฝ์ด๋ผ๋ฉด ๋ค๋ฅธ ๋ชจ๋์ ๋น๋ํ์ฌ ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค.
์์ ๊ฐ์ด ํ์ํ ์์กด์ฑ์ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ dependency resolution(์์กด์ฑ ํด๊ฒฐ)์ด๋ผ ๋ถ๋ฆ ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ด ๋ ๊ถ๊ธํ๋ค๋ฉด How Gradle downloads dependencies๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๐ง Dependency Cache
Gradle์ ๊ฐ์ ธ์จ ์์กด์ฑ๋ค์ dependency cache๋ผ ๋ถ๋ฆฌ๋ ๋ก์ปฌ ์บ์์ ๋ณด๊ดํฉ๋๋ค.
์ดํ ๋น๋์์๋ ํด๋น ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ๋คํธ์ํฌ ํธ์ถ์ ๋ฐฉ์งํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ด ๋ ๊ถ๊ธํ๋ค๋ฉด stores resolved dependencies in a local cache๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๐ง Metadata
Metadata๋ ์์กด์ฑ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๋๋ฐ, ๋ค์์ ๊ทธ ์์์ ๋๋ค.
- repository์์ ํด๋น ์์กด์ฑ์ ์ฐพ๊ธฐ ์ํ coordinate(์ขํ). (์์: com.h2database:h2)
- ํด๋น ์์กด์ฑ์ ์์ฑํ ํ๋ก์ ํธ์ ๋ํ ์ค๋ช
- ํด๋น ์์กด์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๊ธฐ ์ํด์ ํ์ํ ๋ค๋ฅธ ์์กด์ฑ๋ค(์ด๋ฅผ transitive dependencies๋ผ ๋ถ๋ฆ ๋๋ค.)
๐ Reference
https://docs.gradle.org/current/userguide/core_dependency_management.html
Dependency Management
Software projects rarely work in isolation. Projects often rely on reusable functionality from libraries. Some projects organize unrelated functionality into separate parts of a modular system. Dependency management is an automated technique for declaring,
docs.gradle.org
'๐ Gradle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Gradle] api์ implementation์ ์ฐจ์ด (feat. java-libraly ํ๋ฌ๊ทธ์ธ) (0) | 2023.04.16 |
---|---|
[Gradle] ์๋ฐ ํ๋ฌ๊ทธ์ธ (0) | 2023.04.15 |
[Gradle] Dependency Configuration์ด๋? (0) | 2023.04.15 |
[Gradle] Gradle Wrapper(gradlew์ gradle.bat)์ settings.gradle (0) | 2023.04.14 |
[Gradle] Gradle์ ๊ตฌ์ฑ์์(Project, Task, Plugin)์ ์์ํด๋ณด๊ธฐ (0) | 2023.04.14 |