Skip to main content

Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ Java ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ

GitHub Actions CI(์—ฐ์† ํ†ตํ•ฉ) ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“ค์–ด Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ Java ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

์†Œ๊ฐœ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Gradle ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ Java ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ CI(์—ฐ์† ํ†ตํ•ฉ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ๋งŒ๋“  ์›Œํฌํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์— ์ปค๋ฐ‹ํ•  ๋•Œ ๊ธฐ๋ณธ ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ๋นŒ๋“œ ๋˜๋Š” ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ์ •์ƒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CI ์›Œํฌํ”Œ๋กœ๋ฅผ ํ™•์žฅํ•˜์—ฌ ํŒŒ์ผ์„ ์บ์‹œํ•˜๊ณ  ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์—์„œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub ํ˜ธ์ŠคํŠธ ์‹คํ–‰๊ธฐ์—๋Š” JDK(Java Development Kit) ๋ฐ Gradle์„ ํฌํ•จํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋œ ๋„๊ตฌ ์บ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. JDK ๋ฐ Gradle์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ๋ฏธ๋ฆฌ ์„ค์น˜๋œ ๋ฒ„์ „ ๋ชฉ๋ก์€ GitHub ํ˜ธ์ŠคํŒ… ์‹คํ–‰๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์ˆ˜ ์กฐ๊ฑด

YAML ๋ฐ GitHub Actions์˜ ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Java ๋ฐ Gradle ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Unity ์‚ฌ์šฉ์ž ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Gradle ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ

๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ .github/workflows ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

GitHub์€(๋Š”) ๋Œ€๋ถ€๋ถ„์˜ Gradle ๊ธฐ๋ฐ˜ Java ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ•˜๋Š” Gradle ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์˜ ํ›„์† ์„น์…˜์—์„œ๋Š” ์ด ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์ž‘์—…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "github/docs" ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํƒญ ์Šคํฌ๋ฆฐ์ƒท. "์ž‘์—…" ํƒญ์€ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ์›Œํฌํ”Œ๋กœ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. "์›Œํฌํ”Œ๋กœ ์„ ํƒ" ํŽ˜์ด์ง€์—๋Š” ๊ถŒ์žฅ๋˜๋Š” ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์˜ ์„ ํƒ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. "Java with Gradle"์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  5. "Java with Gradle" ์›Œํฌํ”Œ๋กœ์—์„œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ด ์›Œํฌํ”Œ๋กœ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  6. ํ”„๋กœ์ ํŠธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณต์‚ฌ๋ณธ์„ ์ฒดํฌ ์•„์›ƒํ•ฉ๋‹ˆ๋‹ค.

  7. Java JDK๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  8. Gradle ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด gradle/actions/setup-gradle ์ž‘์—…์€ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ๊ฐ„์˜ ์บ์‹ฑ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋“  Gradle ์‹คํ–‰์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์š”์•ฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  9. "Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ" ๋‹จ๊ณ„๋Š” Gradle ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ build ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  10. ํ•„์š”์— ๋”ฐ๋ผ ์›Œํฌํ”Œ๋กœ๋ฅผ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Java ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    • ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์—๋Š” GitHub์—์„œ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์ž‘์—…์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ3์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ž‘์—…์€ ๋ณ„๋„์˜ ์„œ๋น„์Šค ์•ฝ๊ด€, ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ์ •์ฑ… ๋ฐ ์ง€์› ๋ฌธ์„œ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํƒ€์‚ฌ์˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ปค๋ฐ‹ SHA์—์„œ ์ง€์ •ํ•œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ˆ˜์ •ํ•˜๊ณ  ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ SHA๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ ๋˜๋Š” ๋ถ„๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ฒ„์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฝ๊ณ  ์—†์ด ์ž‘์—…์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณด์•ˆ ์‚ฌ์šฉ ์ฐธ์กฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
  11. ๋ณ€๊ฒฝ ๋‚ด์šฉ ์ปค๋ฐ‹์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gradle.yml ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ .github/workflows ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Java ๋ฒ„์ „ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ง€์ •

์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์€ x64 ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ OpenJDK 8์„ ํฌํ•จํ•˜๋„๋ก PATH์„(๋ฅผ) ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „์˜ Java๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜(x64 ๋˜๋Š” x86)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ setup-java ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ Java ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด x64 ํ”Œ๋žซํผ์šฉ Adoptium์—์„œ ์ œ๊ณตํ•˜๋Š” JDK ๋ฒ„์ „ 11์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด setup-java ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๊ณ  java-version, distribution ๋ฐ architecture ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ๊ฐ '11', 'temurin' ๋ฐ x64๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML
steps:
  - uses: actions/checkout@v4
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v4
    with:
      java-version: '11'
      distribution: 'temurin'
      architecture: x64

์ž์„ธํ•œ ๋‚ด์šฉ์€ setup-java ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ฝ”๋“œ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ

์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ build ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Gradle ๊ตฌ์„ฑ์—์„œ ์ด ๋ช…๋ น์€ ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ํด๋ž˜์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํด๋ž˜์Šค๋ฅผ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํ˜•์‹(์˜ˆ์‹œ: JAR ํŒŒ์ผ)์œผ๋กœ ํŒจํ‚ค์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ช…๋ น์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ci.gradle ํŒŒ์ผ์— ๊ตฌ์„ฑ๋œ package ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2

  - name: Build with Gradle
    run: ./gradlew -b ci.gradle package

์ข…์†์„ฑ ์บ์‹ฑ

์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ ์ข…์†์„ฑ์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์ธ ์‹คํ–‰ ํ›„ gradle/actions/setup-gradle์€ Gradle ์‚ฌ์šฉ์ž ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ž‘์—…์—์„œ๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ์›๊ฒฉ ํŒจํ‚ค์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์บ์‹œ๊ฐ€ ๋ณต์›๋ฉ๋‹ˆ๋‹ค.

์บ์‹ฑ์€ gradle/actions/setup-gradle ์ž‘์—…์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ gradle/actions/setup-gradle๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์•„ํ‹ฐํŒฉํŠธ๋กœ ํŒจํ‚ค์ง€

๋นŒ๋“œ์— ์„ฑ๊ณตํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ ํ›„์—๋Š” ๊ทธ์— ๋”ฐ๋ฅธ Java ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๋กœ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์˜ ์ผ๋ถ€๋กœ ๋นŒ๋“œ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„ํ‹ฐํŒฉํŠธ๋Š” ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „์— ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›Œํฌํ”Œ๋กœ ์•„ํ‹ฐํŒฉํŠธ์™€ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ณต์œ ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

Gradle์€ ์ผ๋ฐ˜์ ์œผ๋กœ build/libs ๋””๋ ‰ํ„ฐ๋ฆฌ์— JAR, EAR ๋˜๋Š” WAR๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. upload-artifact ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2

  - name: Build with Gradle
    run: ./gradlew build

  - name: Upload build artifacts
    uses: actions/upload-artifact@v4
    with:
      name: Package
      path: build/libs