๐Ÿ˜ Gradle

์ด์ „ ๊ธ€์—์„œ ์‚ดํŽด๋ณธ ์ž๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ด์–ด, ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง java-library ํ”Œ๋Ÿฌ๊ทธ์ธ java-library ํ”Œ๋Ÿฌ๊ทธ์ธ์€ java ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™•์žฅํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ž๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™•์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, Java ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ์ œ๊ณต๋˜๋Š” ๋ชจ๋“  source set, task, configuration๋“ฑ ์—ญ์‹œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ ํ˜น์€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. plugins { id 'java-library' } ๐Ÿง api configu..
๐Ÿง java ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ ๋ฐ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งŽ์€ ๋‹ค๋ฅธ JVM ์–ธ์–ด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” build.gradle์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. plugins { id 'java' } ๐Ÿง java ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์ œ๊ณตํ•˜๋Š” Task ๋ช‡๊ฐœ๋งŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”์šฑ ์ž์„ธํžˆ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. ๐ŸŒฑ compileJava Depends on: ์ปดํŒŒ์ผ classpath์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ชจ๋“  ์ž‘์—… ํ•ด๋‹น ์ž‘์—…์€ ํ”„๋กœ๋•์…˜ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ JDK ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์•„์ง‘๋‹ˆ๋‹ค. ๐ŸŒฑ processResourc..
๐Ÿง ์„œ๋ก  ์ด์ „ ๊ธ€์—์„œ ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์˜์กด์„ฑ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— dependency configuration์ด๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง Dependency Configuration Gradle ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์„ ์–ธ๋˜๋Š” ๋ชจ๋“  ์˜์กด์„ฑ๋“ค์€ ํ•ด๋‹น ์˜์กด์„ฑ์ด ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ํŠน์ •ํ•œ scope๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ์˜์กด์„ฑ์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์–ด์ง€๊ณ , ์–ด๋–ค ์˜์กด์„ฑ์€ ๋Ÿฐํƒ€์ž„์—๋งŒ ์‚ฌ์šฉ๋˜์–ด์ง‘๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ์˜์กด์„ฑ๋“ค๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Gradle์—์„œ๋Š” ์˜์กด์„ฑ์ด ์‚ฌ์šฉ๋˜๋Š” scope๋ฅผ configuration์„ ํ†ตํ•ด ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  configuration์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ..
๐Ÿง ์„œ๋ก  ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ˜น์€ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ๋“ค์€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋Š” ๊ด€๋ จ์—†๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์˜ ๋ถ„๋ฆฌ๋œ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑํ•œ ๋’ค ํ•œ ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ชจ๋“ˆ ๋“ฑ๋“ฑ)์˜ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์˜์กด์„ฑ(dependency)์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ๊ด€๋ฆฌ(Dependency management)๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์š”๋กœํ•˜๋Š” ์˜์กด์„ฑ๋“ค์„ ์„ ์–ธํ•˜๊ณ , ์ด๋“ค์„ ๊ฐ€์ ธ์˜ค๊ณ (resolving), ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ž๋™ํ™”๋œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๐Ÿง Gradle ์—์„œ์˜ Dependency Management ๋‹ค์Œ์€ ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ๊ธฐ๋ณธ์ ์ธ ํ๋ฆ„..
๐Ÿง ์„œ๋ก  Gradle ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์™€ ๋™์ผํ•œ ๋ฒ„์ „์ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋“ค์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ•ญ์ƒ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ Gradle ๋ฒ„์ „๊ณผ ๋™์ผํ•˜๊ฒŒ Gradle์„ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๊ต‰์žฅํžˆ ๊ท€์ฐฎ๊ณ  ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Gradle Wrapper(์ดํ•˜ Wrapper)๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ๐Ÿง Gradle Wrapper ์ง€์ •๋œ ๋ฒ„์ „์˜ Gradle์„ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ Gradle ๋ฐฐํฌํŒ(distribution)์„ ๋ฐฐํฌ ์„œ๋ฒ„์—์„œ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. Wrapper๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Gradle์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์ง€์ •๋œ Gradle ๋ฒ„์ „์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Wrapper๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ..
๐Ÿง Project ๋ชจ๋“  Gradle์˜ build๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ project๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. project๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด project๋Š” library JAR ํ˜น์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‚˜ํƒ€๋‚ด๊ฑฐ๋‚˜, ๋‹ค๋ฅธ projects๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ JAR๋“ค์„ ํ•ฉ์ณ์„œ ๋ฐฐํฌ๋œ ZIP์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ staging ํ˜น์€ production ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๋“ฑ์˜ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿง Task project์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ํ•˜๋‚˜ ์ด์ƒ์˜ task์— ์˜ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. Tasks๋Š” ๋นŒ๋“œ์‹œ ์ˆ˜ํ–‰ํ•˜๋Š” ์›์ž์ (atomic)์ธ ์ž‘์—…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—…์€ ์ผ๋ถ€ ํด๋ž˜์Šค๋“ค์„ ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜, JAR์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, Javadoc์„ ..
๋ง ๋ž‘
'๐Ÿ˜ Gradle' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก