์๊ฐ
์ด ๊ฐ์ด๋์์๋ 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 ์ํฌํ๋ก ํ ํ๋ฆฟ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฐ์ด๋์ ํ์ ์น์ ์์๋ ์ด ์ํฌํ๋ก ํ ํ๋ฆฟ์ ์ฌ์ฉ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
GitHub์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์๋์์ ์์ ์ ํด๋ฆญํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ์ ์ํฌํ๋ก๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์ ์ํฌํ๋ก๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
"์ํฌํ๋ก ์ ํ" ํ์ด์ง์๋ ๊ถ์ฅ๋๋ ์ํฌํ๋ก ํ ํ๋ฆฟ์ ์ ํ ํญ๋ชฉ์ด ํ์๋ฉ๋๋ค. "Maven์ ์ฌ์ฉํ Java"๋ฅผ ๊ฒ์ํฉ๋๋ค.
-
"Java with Maven" ์ํฌํ๋ก์์ ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
-
ํ์์ ๋ฐ๋ผ ์ํฌํ๋ก๋ฅผ ํธ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด Java ๋ฒ์ ์ ๋ณ๊ฒฝํฉ๋๋ค.
-
๋ณ๊ฒฝ ๋ด์ฉ ์ปค๋ฐ์ ํด๋ฆญํฉ๋๋ค.
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
๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
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
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
๋์์ ์คํํ ์ ์์ต๋๋ค.
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
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
์์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
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
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
์์
์ ์ฌ์ฉํ์ฌ ํด๋น ๋๋ ํฐ๋ฆฌ์ ์ฝํ
์ธ ๋ฅผ ์
๋ก๋ํ ์ ์์ต๋๋ค.
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
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