[์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 1. github action ์„ ํ†ตํ•œ ๋นŒ๋“œ ์„ค์ •

2024. 3. 5. 23:19ยท๐Ÿ“‚ education & lecture/์ธํ”„๋ผ ๊ณต๋ฐฉ

 

๋ถ€์ˆ˜์ ์ธ ์ž‘์—…์„ ์ค„์ด๊ธฐ ์œ„ํ•ด S3 bucket ์œผ๋กœ build file ์„ ์ผ๊ด„ ๊ด€๋ฆฌํ•˜์ž.

 ์ด์ „ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 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

  • ์ฐธ๊ณ  ๊ฐ•์˜ (์ธํ”„๋Ÿฐ : ์ธํ”„๋ผ ๊ณต๋ฐฉ)
    • https://www.inflearn.com/course/%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B3%B5%EB%B0%A9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0/dashboard
  • multi-module 
    • https://hudi.blog/why-use-multi-module/
    • https://docs.gradle.org/current/userguide/intro_multi_project_builds.htmld
  • github action
    • https://docs.github.com/ko/actions/using-workflows/workflow-syntax-for-github-actionsใ…‡
  • aws cli  : S3
    • https://docs.aws.amazon.com/cli/latest/reference/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
'๐Ÿ“‚ education & lecture/์ธํ”„๋ผ ๊ณต๋ฐฉ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ธํ”„๋ผ ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 3. ์„œ๋ฒ„ ์ง„๋‹จํ•˜๊ธฐ
  • [์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 2. ํ™˜๊ฒฝ ๊ตฌ์„ฑ
  • [์ธํ”„๋ผ๊ณต๋ฐฉ] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ - 4. ํ™”๋ฉด ์‘๋‹ต ๊ฐœ์„ ํ•˜๊ธฐ
  • [์ธํ”„๋ผ๊ณต๋ฐฉ] HTTP Cache
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    nGrinder
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    AWS
    mysql
    spring
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    Redisson
    ๋™์‹œ์„ฑ
    ํšŒ๊ณ 
    kafka
    spring-batch
    JPA
    UUID
    react
    spring AOP
    gof
    spring camp 2025
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
[์ธํ”„๋ผ๊ณต๋ฐฉ] ์ปจํผ๋Ÿฐ์Šค ์‹ ์ฒญ - 1. github action ์„ ํ†ตํ•œ ๋นŒ๋“œ ์„ค์ •
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”