ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Maven & Gradle
    DEV ๐Ÿ’™/JAVA Spring 2019. 2. 4. 21:39
    ๋ฐ˜์‘ํ˜•

     



    ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ฒซ ์žฅ๋ถ€ํ„ฐ ๋‚œ๊ด€์— ๋ถ€๋”›ํ˜”๋‹ค


    Maven...? Gradle...? ๋ฌด์—‡...?


    gradle์€ ์•ˆ๋“œ๋กœ์ด๋“œํ•˜๋ฉด์„œ ์–ธ๋œป์–ธ๋œป ๋ณด๊ธดํ–ˆ์ง€๋งŒ ์ •์˜๋ฅผ ์•Œ๋ ค๊ณ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ตฌ๋‚˜ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋‹ค ํ—คํ—ท^^


    ์—ฌ๊ธฐ์„œ ๋ฉ”์ด๋ธ๊ณผ ๊ทธ๋ ˆ์ด๋“ค์€ '๋นŒ๋“œ ํˆด' ์ธ๋“ฏํ•˜๋‚˜ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค...!


    * ๋นŒ๋“œ(build)๋ž€?
    ์ž๋ฐ”๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ž๋ฐ”์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๊ณ  ๊ทธ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
    ์ด๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ํŒจํ‚ค์ง• ํ•˜๋Š” ๊ณผ์ •์„ ๋นŒ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋นŒ๋“œ ํˆด์—๋Š” Ant, Apache Ivy, Maven๋“ฑ์ด ์žˆ๋‹ค.




    1 ์•„ํŒŒ์น˜ ๋ฉ”์ด๋ธ (Apache Maven)

    ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด์ ์ธ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ


    ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฟ ์•„๋‹ˆ๋ผ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ๋‹ค
    Maven์€ ์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋•๋Š” ๋„๊ตฌ์ด๋‹ค


    ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š”๋ฐ์— ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๊ด€๋ฆฌํ•˜์—ฌ
    ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋‹ค์šด๋ฐ›์•„ ์ค€๋‹ค


    ๊ธฐ์กด์—๋Š” Ant๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ Maven์ด Ant๋ฅผ ๋„˜์–ด์„œ ๋” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด์šฉํ•˜๊ฒŒ ๋˜์—ˆ๊ณ ,
    ์ตœ๊ทผ์—๋Š” Gradle์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค(ex Android Studio)


    โ–ถ ๋ฉ”์ด๋ธ์˜ ์žฅ์  โ—€
    1 ํŽธ๋ฆฌํ•œ Dependency Library ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค
    ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ .jarํŒŒ์ผ ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค
    ์ด ๊ฒฝ์šฐ ๋ฉ”์ด๋ธ pom.xml์— dependency๋งŒ ์ถ”๊ฐ€์‹œํ‚จ๋‹ค๋ฉด ์•Œ์•„์„œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅด ๋‹ค์šด๋ฐ›์•„ ์ค€๋‹ค
    ์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ์ธํ•ด ์—ฌ๋Ÿฌ๋ช…์ด์„œ ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์„ git๋“ฑ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋กœ ์ฃผ๊ณ ๋ฐ›์ง€ ์•Š์•„๋„
    ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค!


    2 ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ผ๊ด€๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค
    ๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด
    src/main/java src/main/resources src/test/java src/test/resources
    ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค
    ์ด๋ ‡๊ฒŒ ๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋Š” ๊ณตํ†ต ๊ตฌ์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ 
    ํ”„๋กœ์ ํŠธ์˜ ์ „๋ฐ˜์ ์ธ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์–ด๋Š์ •๋„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค


    ๋ฉ”์ด๋ธ ํ…œํ”Œ๋ฆฟ ํ”„๋กœ์ ํŠธ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ํ”„๋กœ์ ํŠธ์˜ ๋ผˆ๋Œ€๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ,
    ์ด๊ฐ™์€ ๊ธฐ๋Šฅ์„ ArcheType์ด๋ผ๊ณ  ํ•œ๋‹ค


    3 ๋ฉ”์ด๋ธ์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
    4 ArcheType ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ ์…‹ํŒ…์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค




    2 Gradle

    Gradle์€ Groovy๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ์ž๋™ํ™” ์‹œ์Šคํ…œ์ด๋‹ค


    Groovy์™€ ์œ ์‚ฌํ•œ ๋„๋ฉ”์ธ ์–ธ์–ด๋ฅผ ์ฑ„์šฉํ•˜์˜€์œผ๋ฉฐ, ํ˜„์žฌ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ
    ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์˜ ๊ณต์‹ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด๊ธฐ๋„ ํ•˜๋‹ค. Java, C/C++, Python ๋“ฑ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์–ธ์–ด๋ฅผ ์ง€์›ํ•œ๋‹ค


    ์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ์œ„ํ‚ค๋ฐฑ๊ณผ์—์„œ ๋งํ•˜๋Š” Gradle์ด๋‹ค
    + ์ถ”๊ฐ€์ ์œผ๋กœGradle์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด Grooby ๊ธฐ๋ฐ˜์˜ DSL(Domain Specific Language)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,์˜์กด์„ฑ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ํˆด์ด๋‹ค๋นŒ๋“œ, ๋ฉ€ํ‹ฐ ๋นŒ๋“œ, ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ,Gradle Wrapper๋ฅผ ์ด์šฉํ•˜์—ฌ Gradle์ด ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ณณ์—์„œ๋„ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค



    โ–ถ Gradle์˜ ์žฅ์  โ—€
    1 ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ
    ํ•˜๋‚˜์˜ Repository ๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค (๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅ)
    ํ•˜๋‚˜์˜ ์•„ํ‹ฐํŒฉํŠธ(ex .jar)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  Repository๋ฅผ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค


    2 ์œ ์—ฐ์„ฑ + ํ™•์žฅ์„ฑ
    Groovy ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฝํŒ…์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์— ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค
    ์ง์ ‘ Task๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ ์ธ์„ ๋งŒ๋“ค์–ด ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค


    3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ
    Gradle์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒจํ‚ค์ง€๋ช…, ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋œ๋‹ค
    ๋˜ํ•œ ๋‹ค์ˆ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฒ„์ „์ถฉ๋Œ(Version Conflict)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ ๋˜ํ•œ Gradle์ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค


    4 ๋ชจ๋“ˆํ™” ๊ฐœ๋ฐœ(Modular development)
    ํ•ต์‹ฌ ๋กœ์ง์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค
    ํƒ€๋ถ€์„œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ AAR๋กœ ๋ฐ›์œผ๋ฉด ํ•˜๋‚˜์˜ APK๋กœ ํ†ตํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค
    ๋ชจ๋“ˆํ™” ๊ฐœ๋ฐœ์€ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋นŒ๋“œํ•˜์—ฌ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๊ณ  AAR๋กœ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹น์—ฐํžˆ ๊ธฐ์กด์˜ jar ํŒŒ์ผ๋„ ํฌํ•จ ๊ฐ€๋Šฅํ•˜๋‹ค




    ๋ฐ˜์‘ํ˜•
Designed by Tistory.