์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- stream
- StringBuilder
- ์ฟ ํกDB
- ์คํ์์ด
- ๋ฌธ์์ด
- StringBuffer
- ๋ฐฐ์ด
- ์
- java
- ํ๋ฐฉ์ฟผ๋ฆฌ
- ๋ฐฑ์ค9093
- ๋
- ์๋ฐ
- ๋ฐฑ์ค9012
- ์ฐ
- ์คํธ๋ฆผ
- ๋ฐฑ์ค1874
- ๋ฐ์ดํฐํ์
- ์ฐ์ฐ์
- ๋ฐฑ์ค11053 #ํ์ด์ฌ #python
- ์ฟ ํกERD
- ์คํ
- Today
- Total
Tech Log ๐ ๏ธ
Gradle ์ด๋? ๋ณธ๋ฌธ
Gradle ์ด๋?
์๋ฐ๋ฅผ ์ด์ฉํด์ ์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด Gradle ์ ์ฌ์ฉํด์ ๋น๋ํ๋ ๊ฒฝํ์ ๋ง์ด ํ๋ค.
๊ทผ๋ฐ ์ด Gradle ์ ์ ํํ ์ด๋ค ์ญํ ์ ํ ๊น?
๊ณต์๋ฌธ์๋ฅผ ๋จผ์ ์ฐพ์๋ณด๋ฉด,
Gradle is an open-source build automation tool flexible enough to build almost any type of software.
Gradle ์ ์ค์ค๋ก ๋น๋ ์๋ํ(build automation) ํด์ด๋ผ๊ณ ์๊ฐํ๊ณ ์๋ค.
๐ง ๋น๋๋ ๋ฌด์์ผ๊น?
์๋ฐ์ฝ๋๋ฅผ ์ปดํ์ผ ๊ณผ์ ์ ๊ฑฐ์ณ์ ์ปดํจํฐ๊ฐ ์คํํ ์ ์๋ ํ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ณผ์ ์ ๋งํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ผ๋จ Gradle์ด ์ด๋ฌํ ๊ณผ์ ์ ๊ด๋ฆฌํด์ค์ผ๋ก์จ ๊ฐ๋ฐ์์ ์ถ์ ์ข ๋ ์คํํ๊ฒ ํด์ค๋ค๋ ๊ฒ์ ์๊ฑฐ๊ฐ๋ค.
๊ตฌ์ฒด์ ์ผ๋ก Gradle์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ํ๋ค. (์คํ๋ง ๊ธฐ์ค)
Compile
- ์๋ฐ ํ์ผ์ ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํด์ค๋ค.
Test
- ํ๋ก๊ทธ๋จ์ด ์ ๋๋ก ๋์๊ฐ ์ ์๋ ์ง์ ๋ํ ํ ์คํธ๋ฅผ ์ง์ํด์ค๋ค.
Pakaging
- ์ปดํ์ผ ๋ ์ฝ๋๋ก ์คํ ํ์ผ์ ๋ง๋ ๋ค.
Deploy & Run
- ์ค์ ๋ก ํ๋ก๊ทธ๋จ์ ์คํ์ํจ๋ค. ์๋ฅผ ๋ค๋ฉด ์คํ๋ง ์๋ฒ๋ฅผ ๋๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
ํ์ง๋ง Gradle์ด ๋ค๋ฅธ ํด๊ณผ ๋น๊ตํ์ ๋ ์ด๋ค ์ฅ์ ์ด ์์ด์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๋ ๊ฑธ๊น?
Gradle, ์ ์ฐ๋ ๊ฑธ๊น?
๋ค๋ฅธ ํด๋ค๊ณผ ๋น๊ตํด๋ดค์ ๋ Gradle์ด ๊ฐ์ง๋ ์ฅ์ ์ด ๋ช๊ฐ์ง ์๋ค.
๊ทธ ์ฅ์ ๋ค์ ๋ํด์ ํ๋์ฉ ์์๋ณด์
๊ฐ๊ฒฐํ ์คํฌ๋ฆฝํธ
Gradle์ ์ฅ์ ์ ๋จผ์ ์คํฌ๋ฆฝํธ๋ง ๋ด๋ ์ ์ ์๋ค.
๋จผ์ ๊ฒฝ์์์ธ Maven์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด์ !
Maven์ ๊ฒฝ์ฐ์๋ XML ํ์์ ์คํฌ๋ฆฝํธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์ ๊ฐ๋ ์ฑ๋ ๋จ์ด์ง๊ณ ์์ฑํ๊ธฐ๋ ์ด๋ ต๋ค.
ํ์ง๋ง Gradle ๊ฐ์ ๊ฒฝ์ฐ ์ค์ ์ฃผ์ ๋ฐฉ์์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ค์ผ๋ก์จ ๊ฐ๋ ์ฑ๋ ์ข์์ง๊ณ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
๋ฉํฐ ํ๋ก์ ํธ ๋น๋
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ํ์ง๋ง ์ด ๋ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋์ ๋ฐ๋ก ๋น๋ํ๊ฒ ๋๋ฉด ๋ฒ๊ฑฐ๋กญ๊ธฐ๋ ํ๊ณ ์ค์ํ ๊ฐ๋ฅ์ฑ๋ ์๊ธด๋ค.
Gradle์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ค์ ๋์์ ๋น๋ํ ์ ์๋ค.
๋ํ ๋ชจ๋๋ง๋ค ๊ณตํต๋ ์ฝ๋ , ๋ณ๋์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํด ์ค์ผ๋ก์จ ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
๋น ๋ฅธ ๋น๋ ์๋
์์์ ๋งํ ๊ฒ๋ค๋ง ๋ชจ๋ ํด์ค๋ค๊ณ ํด๋ ์ถฉ๋ถํ ์ธ๋งํ ํด์ด๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ ์๋๊น์ง ๋น ๋ฅด๋ค๋ฉด ? ๊ทธ ์ด๋ ค์ด ๊ฑธ Gradle ์ด ๋ค์ ํด๋ด๋ฒ๋ ธ๋ค.
ํ๋ฅผ ๋ณด๋ฉด Gradle ์ ๊ฒฝ์์ฌ ๋๋น ์๋ฑํ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
ํธ๋ฆฌํ๊ณ ๋น ๋ฅธ Gradle .. ์ ์ธ ์ด์ ๊ฐ ์์ง ์์๊น?
์ ๊น Gradle ์ ๋์ฒด ์ด๋ป๊ฒ ๋ง๋ค์๊ธธ๋ ๋น ๋ฅธ๊ฑธ๊น?
Gradle, ์ ๋น ๋ฅธ ๊ฑธ๊น?
๋ค์ Gradle์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด์
Gradle avoids unnecessary work by only running tasks that need to do work because inputs or outputs have changed. Gradle uses various caches to reuse outputs from previous builds. With a shared build cache, you can even reuse outputs from other machines.
์ด ๋ฌธ์ฅ์ ์์ฝํ๋ฉด Gradle์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถํ์ํ ์์ ์ ๋ฐฉ์งํ๊ณ ์บ์๋ฅผ ํตํด ์ฌ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๊ฒ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ ์ผ๋ก 3๊ฐ์ง๊ฐ ์๋ค.
์ ์ง์ ๋น๋
๋น๋๋ฅผ ํ ๋ ๋ชจ๋ ํ์ผ๋ค์ ๋ค์ ๋น๋ํ๋ ๊ฒ ์๋ , ๋ฐ๋ ํ์ผ๋ค๋ง ์ถ์ ํด์ ํด๋น ํ์ผ๋ง ๋น๋ํ๋ ๊ฒ์ ๋งํ๋ค.
์๋ฅผ ๋ค์ด 20๊ฐ์ ํ์ผ์ ๋น๋ํ ๋ 15๊ฐ์ ํ์ผ์ด ๊ทธ๋๋ก๋ฉด ๋๋จธ์ง 5๊ฐ์ ํ์ผ๋ง ๋น๋ํ๋ ํ์์ด๋ค.
๋น๋ ์บ์
์ฌ๋ฌ ๋ฒ์ ๋น๋๋ฅผ ์คํํ ๋ Gradle์ ์ด๋ฏธ ๋น๋๊ฐ ๋ ๊ฒฐ๊ณผ๋ฌผ๋ค์ ๋น๋ ์บ์์ ๋ด์๋๋๋ค.
์ถํ์ ํด๋น ํ์ผ์ ๋ํด ๋ค์ ๋น๋๋ฅผ ํ๊ฒ ๋๋ฉด, ๋ค์ ๋น๋ํ ํ์์ฑ์ ์ค์ฌ์ค์ผ๋ก์จ ๋น๋๋ฅผ ๋์ฑ ๋นจ๋ฆฌํ ์ ์๋ค.
ํน์ ๋น๋ ์บ์๋ฅผ ๋ก์ปฌ์์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ , ํ์๋ค๋ผ๋ฆฌ ๋น๋ ์บ์๋ฅผ ๊ณต์ ํด์ ๋น๋ ๊ฒฐ๊ณผ๋ค์ ์บ์์ ๋ด์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ชฌ ํ๋ก์ธ์ค
๋ฐ๋ชฌ ํ๋ก์ธ์ค๋ฅผ ์์๋ณด๊ธฐ ์ ์ ๋ฐ๋ชฌ์ ๋ฌด์์ผ๊น?
Gradle์์ ๋ ์น์ ํ๊ฒ ๋ฐ๋ชฌ์ ์ ์๋ฅผ ๋งํด์ฃผ๊ณ ์๋ค.
A daemon is a computer program that runs as a background process, rather than being under the direct control of an interactive user.
ํด์ํ์๋ฉด , ๋ฐ๋ชฌ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ดํ์ง ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ก ๋์๊ฐ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์ด๊ฒ์ ๋น๋์ ์ด๋ป๊ฒ ๋์ ํ์๊น?
Gradle์ JVM์ด๋ผ๋ ๊ฐ์ ์ฅ์น ์์์ ์คํ๋๋ฉฐ ์ด JVM์ ์ฌ๋ฌ ์ด๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉํ๋ฉฐ, ์ด ๊ณผ์ ์ ๊ฝค ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค.
๋๋ฌธ์ ๋งค๋ฒ ์๋ก ๋น๋ํ๋ ๊ฒ์ด ์๋ ๋์ผํ ๋น๋๋ ์ด๋ฏธ ์คํ์ค์ธ ๋ฐ๋ชฌ์ ์ด์ฉํ์ฌ์ ๋น๋ ์๊ฐ์ ์ค์ฌ์ค๋ค.
์๋ฅผ ๋ค์ด์ ๋ ธํธ๋ถ์ ์ฌ์ฉํ์ง ์์ ๋ ์์ ๋๋ ๊ฒ์ด ์๋๋ผ ๋ค์ ์ฌ์ฉ์ ์ํด ์ฌ๋ฆฝ ๋ชจ๋๋ก ๋๋ ๊ฒ๊ณผ ๊ฐ๋ค.
Gradle, ์ด๋ป๊ฒ ์ฐ๋ ๊ฑธ๊น?
์ด๋ ๊ฒ ์ข์ Gradle , ์ด๋ป๊ฒ ์ฐ๋ ์ง ์ ๋๋ ์์๋ณด์ !
์ค๋์ ๋น๋ ์คํฌ๋ฆฝํธ์์ ์์กด์ฑ์ ์ค์ ํ๋ ๋ถ๋ถ์ ์์๋ณผ ๊ฒ์ด๋ค.
์์กด์ฑ ์ค์ ์ ์ํด์ build.gradle์ dependencies ๋ถ๋ถ์ ๋ด์ผํ๋ค.
Gradle์์ ์์ ์ฝ๋์ฒ๋ผ ๊ฐํธํ๊ฒ ์์กด์ฑ์ ์ค์ ํ ์ ์๋ค.
๊ทผ๋ฐ ์์ ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ชจ๋ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
์ด ์ฝ๋๋ค์ ์ ์๊ณ ์ด๋ค ๊ธฐ๋ฅ๋ค์ ์ํํ๋ ์ง ์์๋ณด์!
compileOnly
์ปดํ์ผ ์์๋ง ์์กด์ฑ์ ์ ์ํ๋ค.
์๋ฅผ ๋ค์ด ๋กฌ๋ณต๊ฐ์ ๊ฒฝ์ฐ , ์ด๋ ธํ ์ด์ ์ ๋ณด๊ณ getter , setter๋ฅผ ์ปดํ์ผ ํด์ฃผ๊ณ ๋ฐํ์์๋ ๋ฃ์ง ์๋๋ค.
runtimeOnly
๋ฐํ์ ์์๋ง ์์กด์ฑ์ ์ ์ํ๋ค.
์๋ฅผ ๋ค์ด DB๊ด๋ จ ํน์ ๋ก๊ทธ ์์กด์ฑ ์ฃผ์ ์์ ์ฌ์ฉํ๋ค.
test
์์ test๊ฐ ๋ถ์ด์์ผ๋ฉด ํด๋น ์์กด์ฑ์ ํ ์คํธ ์์๋ง ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค.
์์กด์ฑ์ด๋?
๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ์๋ก ๋ค๋ฉด, A ๋ชจ๋์ด B ๋ชจ๋์ ์ฌ์ฉํ๊ณ ์๋ค.
์ด๊ฒ์ A ๋ชจ๋์ด B ๋ชจ๋์ ์์กดํ๊ณ ์๋ค๊ณ ๋งํ๋ค.
์ฆ ์์กด์ฑ์ด๋ ๋ชจ๋ ๊ฐ ์๋ก ์ฌ์ฉํ๋ ๊ด๊ณ์ด๋ค.
Api vs Implementation
dependencies๋ฅผ ๋ณด๋ฉด api ๋ ์๊ณ implementation๋ ์๋ค.
๋์ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น?
๋จผ์ ์ ์ด ์์กด์ฑ์ด๋ ๊ฐ๋ ์ ์ง๊ณ ๋์ด๊ฐ ํ์๊ฐ ์๋ค.
๋ง์ฝ ์๋ก ์์กดํ๊ณ ์๋ ๋ชจ๋ 3๊ฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์
์ฌ๊ธฐ์ A ๋ชจ๋์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ๋๋จธ์ง ๋ชจ๋๋ค์ ์ด๋ป๊ฒ ๋ ๊น?
๋ง์ฝ ์ฌ๊ธฐ์ ์์กดํ๊ณ ์๋ ๋ชจ๋๋ค์ด ๋ชจ๋ ์ํฅ์ ๋ฐ๋๋ค๋ฉด ์ ์ด ์์กด์ฑ์ด ํ์ฉ๋ ๊ฒฝ์ฐ์ด๋ค.
์ฌ๊ธฐ์ ๋งํ ์ ์ด ์์กด์ฑ์ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ ์ง๊ฐ ์ฐจ์ด๋ฅผ ๊ฒฐ์ ํ๋ค.
๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด๋ณด์
api ๋๋ compile(์ง์ ์ค๋จ๋จ) ๋์ ์ด ์ข ์ ํญ๋ชฉ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ฉด ๋น๋ ์์คํ ์์ ๋ค์ ์ปดํ์ผํด์ผ ํ๋ ๋ชจ๋ ์๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ๋น๋ ์๊ฐ์ด ํฌ๊ฒ ๊ฐ์ ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด implementation ์ข ์ ํญ๋ชฉ์ด API๋ฅผ ๋ณ๊ฒฝํ๋ฉด Gradle์ ์ด ์ข ์ ํญ๋ชฉ๊ณผ ์ด์ ์ง์ ์ ์ผ๋ก ์ข ์๋ ๋ชจ๋๋ง ๋ค์ ์ปดํ์ผํฉ๋๋ค. ๋๋ถ๋ถ์ ์ฑ๊ณผ ํ ์คํธ ๋ชจ๋์ ์ด ๊ตฌ์ฑ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
implementation์ ์ฌ์ฉํ๋ฉด, ์ข ์ ํญ๋ชฉ๊ณผ ์ง์ ์ ์ผ๋ก ์ข ์๋ ๋ชจ๋๋ง ๋ค์ ์ปดํ์ผํ๋ค๊ณ ๋์์๋ค.
๊ทธ๋์ ๋ชจ๋ ํ๋๊ฐ ๋ณ๊ฒฝ ๋๋ค๊ณ ํด์ ๋ค๋ฅธ ๋ชจ๋๋ค๊น์ง ๋ชจ๋ ์ํฅ์ ์ฃผ์ง ์๋ ๊ฒ์ด๋ค.
์ฆ ์ ์ด ์์กด์ฑ์ ๊ฐ์ง์ง ์๋๋ค๊ณ ํ ์ ์๋ค.
๋ฐ๋๋ก api๋ ์ ์ด ์์กด์ฑ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์์กดํ๊ณ ์๋ ๋ชจ๋ ๋ชจ๋๋ค์ด ์ํฅ์ ๋ฐ๊ณ ์ด๊ฒ์ ๊ณง ์ปดํ์ผ ์๊ฐ์ ์ํฅ์ ์ค๋ค.
์ api๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๋ชจ๋๋ค๊น์ง ์ํฅ์ ๋ฐ์๊น?
API๋ ์ปดํ์ผ class-path ์๋ ๋ ธ์ถ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์์ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ์ํฅ์ ๋ฐ๊ฒ ๋๋ค.
ํ์ง๋ง implementation์ ๋ฐํ์ class-path ์๋ง ๋ ธ์ถ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ค์ ์ปดํ์ผ ํ ํ์๊ฐ ์๋ค.
๐ง ๋ ๊ฐ์ง class-path ์ ์ฐจ์ด๋ฅผ ์์๋ณด์
์ปดํ์ผ class-path : Java ์ฝ๋๋ฅผ class ํ์ผ๋ก ์ปดํ์ผ ํ ๋ ํ์ํ๋ ๊ฒฝ๋ก
๋ฐํ์ class-path : ์ปดํ์ผ ๋ ์๋ฐ ์ฝ๋๋ฅผ JVM์ด ์คํํ ๋ ํ์ํ๋ ๊ฒฝ๋ก
์ ๋ฆฌํ์๋ฉด,
api ๋ ์ปดํ์ผ class-path , ๋ฐํ์ class-path ์ ๋ ธ์ถ๋๋ค.
implementation์ ๋ฐํ์ class-path์๋ง ๋ ธ์ถ๋๋ค.
implementation์ ์ฌ์ฉํ๋ฉด ๊ฝค ๋ง์ ์ฅ์ ๋ค์ด ์๋ค.
- ์ปดํ์ผ , ๋ฐํ์ class-path๋ฅผ ๋ถ๋ฅํจ์ผ๋ก์จ ๋ ๋น ๋ฅธ ์ปดํ์ผ์ด ๊ฐ๋ฅํ๋ค.
- ์ปดํ์ผ ์์ ๋ค๋ฅธ ๋ชจ๋์์ ์์น์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ์์กดํ ํ์๊ฐ ์๋ค.
'ํ๋ก๊ทธ๋๋จธ์ค ๋ฐฑ์๋ ๋ฐ๋ธ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM ๋ด๋ถ๋ก (0) | 2023.09.03 |
---|---|
equals & hash code ์ ์ด๋ฅผ ๊ฐ์ด ์ฌ์ ์ ํ๋ ์ด์ (0) | 2023.07.29 |