[gradle] implementation, api ์ฐจ์ด
๊ฐ์
Gradle์์ ์์กด์ฑ์ ์ค์ ํ ๋๋ compileOnly, runtimeOnly, implementation, api ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค. ํนํ api์ implementation์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํ ๋ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก, ์ด ๋์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฐจ์ด์ ์ ์์๋๋ฉด ์ข๋ค.
dependencies {
api 'org.apache.httpcomponents:httpclient:4.5.7'
implementation 'org.apache.commons:commons-lang3:3.5'
}
์ฐธ๊ณ ๋ก ์ด์ Gradle ๋ฒ์ ์์๋ implementation ํค์๋๊ฐ ์์๊ณ , ๋์ compile์ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํ๋ค. ํ์ง๋ง Gradle 6.x ์ดํ ๋ฒ์ ์์๋ compile์ด deprecated ๋์๊ณ , ๊ทธ ์๋ฆฌ๋ฅผ api ํค์๋๊ฐ ๊ทธ ์๋ฆฌ๋ฅผ ๋์ฒดํ๊ฒ ๋์๋ค.
api vs implementation
implementation์ผ๋ก ์ค์ ๋ ์์กด์ฑ์ ์ ์ด๋์ง ์์ผ๋ฉฐ, ํด๋น ๋ชจ๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ค. ๋ฐ๋ฉด api๋ก ์ค์ ๋ ์์กด์ฑ์ ์ ์ด๋์ด ๋ค๋ฅธ ๋ชจ๋์ ์ปดํ์ผ ํด๋์ค ๊ฒฝ๋ก(compileClasspath)์๋ ์ถ๊ฐ๋๋ค.
- api ์์กด์ฑ์ ํด๋น ๋ชจ๋์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋์๋ ๋ ธ์ถ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ๋ชจ๋์ด httpclient ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ์ด ๋ชจ๋์ ์์กดํ๋ ๋ค๋ฅธ ๋ชจ๋๋ ์๋์ผ๋ก httpclient ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
- ๋ฐ๋ฉด implementation ์์กด์ฑ์ ํด๋น ๋ชจ๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ฉฐ, ๋ค๋ฅธ ๋ชจ๋์๋ ๋ ธ์ถ๋์ง ์๋๋ค. ์ด๋ฅผ ํตํด ์์กด์ฑ์ ์บก์ํํ์ฌ ๋ด๋ถ ๊ตฌํ์ ์ธ๋ถ์ ์จ๊ธฐ๊ณ , ๋ค๋ฅธ ๋ชจ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ ์ ์๋ค.
์ฆ implementation๋ก ์ค์ ๋ ์์กด์ฑ์ ๋ค๋ฅธ ๋ชจ๋์ ์ปดํ์ผ ํด๋์ค ๊ฒฝ๋ก์ ํฌํจ๋์ง ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ์ธก(Producer)์์ ์์กด์ฑ์ ๋ณ๊ฒฝํ๋๋ผ๋, ์ฌ์ฉํ๋ ์ธก(Consumer)์ ์ฌ์ปดํ์ผํ์ง ์์๋ ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ ์๊ฐ์ ๋จ์ถํ๊ณ ์ฌ๋น๋ ๋น๋๋ฅผ ์ค์ผ ์ ์๋ ์ด์ ์ ์ป์ ์ ์๋ค.
์๋์ ๋ค ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ํตํด ์กฐ๊ธ ๋ ์ฐจ์ด์ ์ ์์ธํ ์ดํด๋ณด์.
์์
1) ModuleB๊ฐ ModuleA๋ฅผ api๋ก, Module C๊ฐ Module B๋ฅผ api๋ก ์์กด
- Module B๋ Module A๋ฅผ api๋ก ์์กดํ๊ณ ์์ผ๋ฏ๋ก, Module B์์ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ํ Module C๋ Module B๋ฅผ api๋ก ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์, Module A์ ๋ํ ์์กด์ฑ์ด ์ ์ด๋์ด Module C์์๋ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
2) Module B๊ฐ Module A๋ฅผ api๋ก, Module C๊ฐ Module B๋ฅผ implementation์ผ๋ก ์์กด
- Module B๋ Module A๋ฅผ api๋ก ์์กดํ๊ณ ์์ผ๋ฏ๋ก, Module B์์ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- Module C๋ Module B๋ฅผ implementation์ผ๋ก ์์กดํ๊ณ ์์ง๋ง, Module B๊ฐ Module A๋ฅผ api๋ก ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์ Module C๋ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ฆ implementation์ผ๋ก ์์กดํ๋๋ผ๋ api๋ก ์ฐ๊ฒฐ๋ ์์กด์ฑ์ ์ ์ด๋๋ค.
3) Module B๊ฐ Module A๋ฅผ implementation์ผ๋ก, Module C๊ฐ Module B๋ฅผ api๋ก ์์กด
- Module B๋ Module A๋ฅผ implementation์ผ๋ก ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์, Module A์ ์์กด์ฑ์ Module B ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ค. ์ฆ, Module B๋ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ทธ ์์กด์ฑ์ ๋ค๋ฅธ ๋ชจ๋๋ก ์ ์ด๋์ง ์๋๋ค.
- Module C๋ Module B๋ฅผ api๋ก ์์กดํ๊ณ ์์ง๋ง, implementation ์์กด์ฑ์ ์ ์ด๋์ง ์๊ธฐ ๋๋ฌธ์ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
4) Module B๊ฐ Module A๋ฅผ implementation์ผ๋ก, Module C๊ฐ Module B๋ฅผ implementation์ผ๋ก ์์กด
- Module B๋ Module A๋ฅผ implementation์ผ๋ก ์์กดํ๋ฏ๋ก, Module B์์๋ง Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด ์์กด์ฑ์ ์ ์ด๋์ง ์๋๋ค.
- Module C๋ Module B๋ฅผ implementation์ผ๋ก ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์, Module B์ ์์กด์ฑ๋ ์ ์ด๋์ง ์์ Module C๋ Module A์ Hello ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์๋ ๋ชจ๋ Module A์ ์์ฑ๋ Hello ํด๋์ค๋ฅผ ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์์๋ก ๋ค์์ง๋ง, Module A๊ฐ ํน์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ api๋ implementation์ผ๋ก ์์กดํ๊ณ ์์ ๋, Module B์ Module C์์ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋์ง๋ ๊ณ ๋ฏผํด ๋ณด๋ฉด ์ข๋ค. ๋ง์ฝ Module A๊ฐ httpclient ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ implementation์ผ๋ก ์์กดํ๊ณ ์์ ๊ฒฝ์ฐ Module B์ Module C์์๋ Module A๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ์์กดํ๋๋ผ๋ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ ๋ฆฌ
Gradle์ ๊ฐ๋ฅํ ํ implementation์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋๋ฐ, api๋ ์์กด์ฑ์ด ๋ค๋ฅธ ๋ชจ๋์ ์ ์ด๋์ง๋ง implementation์ ํด๋น ๋ชจ๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๊ณ ๋ค๋ฅธ ๋ชจ๋์๋ ๋ ธ์ถ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌด๋ถ๋ณํ๊ฒ api๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ ์ํฉ์ ๋ง๊ฒ implementation์ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ์บก์ํํ๊ณ , ์ด๋ฅผ ํตํด ์ปดํ์ผ ์๊ฐ์ ๋จ์ถํ์ฌ ์ฌ๋น๋ ๋น๋๋ฅผ ์ค์ผ ์ ์๋ ์ด์ ์ ์ป๋ ๊ฒ์ด ์ข๋ค.
ํนํ ๋ชจ๋ํ ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ ๋๋ ์ด์ ์ด ๋์ฑ ํฐ๋ฐ, ๋ชจ๋ํ ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ์์๋ ์ฌ๋ฌ ๋ชจ๋์ด ํ๋์ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ์ง๋ง, ๊ฐ ๋ชจ๋ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค. implementation์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฐ์ ๋ถํ์ํ ์์กด์ฑ ์ ์ด๋ฅผ ๋ง์ ๊ฐ ๋ชจ๋์ด ๋ณ๊ฒฝ๋ ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ปดํ์ผํ๋ ์๊ฐ์ ์ค์ผ ์ ์๋ค.