Skip to main content

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

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

์†Œ๊ฐœ

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

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

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

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

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

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

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

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

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

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

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

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

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

  5. "Java with Maven" ์›Œํฌํ”Œ๋กœ์—์„œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

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

  7. ๋ณ€๊ฒฝ ๋‚ด์šฉ ์ปค๋ฐ‹์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

maven.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 ์ž‘์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

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

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

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

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Run the Maven verify phase
    run: mvn --batch-mode --update-snapshots verify

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

์ข…์†์„ฑ์„ ์บ์‹œํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ๋กœ์ปฌ Maven ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์บ์‹œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์—์„œ๋Š” ์บ์‹œ๊ฐ€ ๋ณต์›๋˜์–ด ์›๊ฒฉ Maven ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. setup-java ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์บ์‹œํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ ๊ณ ๊ธ‰ ๊ตฌ์„ฑ์„ ์œ„ํ•ด cache ์ž‘์—…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML
steps:
  - uses: actions/checkout@v4
  - name: Set up JDK 17
    uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
      cache: maven
  - name: Build with Maven
    run: mvn --batch-mode --update-snapshots verify

์ด ์›Œํฌํ”Œ๋กœ๋Š” ์‹คํ–‰๊ธฐ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ .m2 ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋กœ์ปฌ Maven ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ ํ‚ค๋Š” pom.xml์˜ ํ•ด์‹œ๋œ ์ฝ˜ํ…์ธ ์ด๋ฏ€๋กœ pom.xml์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์บ์‹œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

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

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

YAML
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
  - run: mvn --batch-mode --update-snapshots verify
  - run: mkdir staging && cp target/*.jar staging
  - uses: actions/upload-artifact@v4
    with:
      name: Package
      path: staging