
์ด์ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ source code ๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์์ ๋น๋ํด์ scp ๋ช ๋ น์ด๋ฅผ ํตํด ์ ๋ก๋ํ๋ ๋ฐฉ์์ด์๋ค. ํ์ง๋ง ๋งค๋ฒ ์์ค ์ฝ๋ ์์ ์ด ์์ ๋๋ง๋ค build → file upload → build file ์คํ ์์ ์ ๋ฐ๋ณต์ผ๋ก ์ธํด ๋ถ์์ ์ธ ์์ ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ถํธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ scale out ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ์๋ ์ด ๋ถ์ ์์ ์ ๋ฌดํ ๊ตด๋ ์ ๋น ์ง๊ธฐ ๋๋ฌธ์ ์์ผ๋ก์ ์์ ์ ์ํด ๊ฐ์ ์ด ํ์ํ๋ค. ๊ฒฐ๊ตญ github action ์ ํตํด ์์ค ์ฝ๋๋ฅผ ๋น๋ํ๊ณ S3 bucket ์ ์ผ๊ด ๊ด๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
1. ๊ฐ๋ ๋ฐ ์ฉ์ด ์ ๋ฆฌ
[1] ๋ฉํฐ ๋ชจ๋(multi-module) ?
๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ๋ ์ํธ ์ฐ๊ฒฐ๋ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํธ๋ฅผ ์๋ฏธํ๋ค. ๊ฐ ๋ชจ๋์ ์ ์ฒด ์๋น์ค์ ๊ตฌ์ฑ์์๋ก ๋์ํ๋ฉฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋ํ ์ ์๋ ๊ฒ์ด ํน์ง์ด๋ค. ๋ฉํฐ ๋ชจ๋์ ํตํ ์ฅ์ ์ ์๋์ ๊ฐ๋ค.
- ๋ฉํฐ ๋ชจ๋์ ํตํ ๊ณตํต ์ฝ๋ ๋ถ๋ฆฌ
- ์ค๋ณต ์ฝ๋์ ๊ดํ ์ผ๊ด์ฑ ๊ด๋ฆฌ์ ์ฃผ์ฒด๊ฐ ์์คํ ์ด ๋๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ์ฑ์ด ๋๋ค.
- ๊ณตํต ์ฝ๋๊ฐ ์์ , ๋ณ๋์ ๋น๋/๋ฐฐํฌ ์ฌ์ดํด์ด ํ์ํ์ง ์๋ค.
[2] Gradle ๋ฉํฐ ๋ชจ๋ ๋น๋ ๋ช ๋ น์ด
/** ./gradlew [module name]:build **/
./gradlew member:build
SPRING_ACTIVE_PROFILES=test ./gradlew member:build // property ๋ณ๋๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ
[3] mysql ์ปจํ ์ด๋ ์์ฑ ์์ sql ์คํ ์ค์
๋์ปค ์ปจํ ์ด๋๋ฅผ ํตํด mysql server ๊ตฌ์ฑํ ๋ ์คํํ sql ํ์ผ๋ค์ directory๋ก ๊ฐ์ธ /docker-entrypoint-initdb.d ๋๋ ํ ๋ฆฌ๋ฅผ
volumne mount ๋ฅผ ํ๋ฉด ์ปจํ ์ด๋ ์์ฑ ์์ ์ ํด๋น sql ๋์ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
services:
member-db:
image: library/mysql:8.0
container_name: member-db
volumes:
- ./db/mysql/init:/docker-entrypoint-initdb.d # here !
[4] multirun ์ค์
intellij ์์ Multirun plugins ์ ์ค์ ํ๋ฉด ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฒ์ ์คํํ ์ ์๋ค.

2. ๊ณผ์ ์ ๋ฆฌ
1. S3 bucket access key, private key ์ค์
- IAM > ์์ธ์ค ๊ด๋ฆฌ > ์ฌ์ฉ์ > ์ฌ์ฉ์ ์์ฑ
- ์ฌ์ฉ์ ๊ณ์ ํด๋ฆญ > ๋ณด์ ์๊ฒฉ ์ฆ๋ช > ์์ธ์ค ํค ๋ง๋ค๊ธฐ > CLI ํด๋ฆญ

2. github repository ์์ธ์ค ํค ๋ฑ๋ก
- git repository > settings > Secrets and variables > Actions > New repository secret

3. github action script ๊ตฌ์ฑ ๋ฐ S3 bucket ์ ์ ์ก
- main ๋ก push / pull request ์์ github action ์ด ๋์ํ๋๋ก ์ค์
- ๊ฐ ๋ชจ๋์ build & zip ํ์ฌ S3 bucket ์ ์ ์ก
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
# Configure Gradle for optimal use in GiHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
## member
- name: build modules
run: SPRING_PROFILES_ACTIVE=local ./gradlew clean member:build conference:build front:build analysis:build
- name: make directory
run: mkdir tmp
- name: move to tmp
run: |
mv ./member/build/libs/member-0.0.1-SNAPSHOT.jar ./tmp &&
mv ./conference/build/libs/conference-0.0.1-SNAPSHOT.jar ./tmp &&
mv ./analysis/build/libs/analysis-0.0.1-SNAPSHOT.jar ./tmp &&
mv ./front/build/libs/front-0.0.1-SNAPSHOT.jar ./tmp
- name: deliver to aws s3
env:
AWS_ACCESS_KEY_ID: ${{secrets.S3_BUCKET_ACCESS_KEY}}
AWS_SECRET_ACCESS_KEY: ${{secrets.S3_BUCKET_SECRET_KEY}}
run: |
aws s3 cp \
--region ap-northeast-2 \
--acl private ./tmp \
s3://cooper-workshop-deployment-bucket/ \
--recursive
Reference
- ์ฐธ๊ณ ๊ฐ์ (์ธํ๋ฐ : ์ธํ๋ผ ๊ณต๋ฐฉ)
- multi-module
- github action
- aws cli : S3
'๐ education & lecture > ์ธํ๋ผ ๊ณต๋ฐฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์ธํ๋ผ ๊ณต๋ฐฉ] ์ปจํผ๋ฐ์ค ์ ์ฒญ - 3. ์๋ฒ ์ง๋จํ๊ธฐ (1) | 2024.03.14 |
|---|---|
| [์ธํ๋ผ๊ณต๋ฐฉ] ์ปจํผ๋ฐ์ค ์ ์ฒญ - 2. ํ๊ฒฝ ๊ตฌ์ฑ (0) | 2024.03.12 |
| [์ธํ๋ผ๊ณต๋ฐฉ] ์งํ์ฒ ๋ ธ์ ๋ - 4. ํ๋ฉด ์๋ต ๊ฐ์ ํ๊ธฐ (0) | 2024.02.29 |
| [์ธํ๋ผ๊ณต๋ฐฉ] HTTP Cache (0) | 2024.02.28 |
| [์ธํ๋ผ๊ณต๋ฐฉ] ์งํ์ฒ ๋ ธ์ ๋ - 3. 3-tier ๊ตฌ์ฑํ๊ธฐ (0) | 2024.02.27 |