๊ด€๋ฆฌ ๋ฉ”๋‰ด

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์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฝค ๋งŽ์€ ์žฅ์ ๋“ค์ด ์žˆ๋‹ค.

  1. ์ปดํŒŒ์ผ , ๋Ÿฐํƒ€์ž„ class-path๋ฅผ ๋ถ„๋ฅ˜ํ•จ์œผ๋กœ์จ ๋” ๋น ๋ฅธ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ์ปดํŒŒ์ผ ์‹œ์— ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์›์น˜์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.