이번 6주간 프로젝트를 진행하면서 2주 가량 기본적인 설계작업과 4주 가량의 개발 작업을 진행해 campus라는 결과물이 나왔다. 아직 끝난 것은 아니다. 2차 구현이 남아있기 때문인데, 그 전에 현재까지 백엔드에서 설계한 아키텍처를 정리하고 되돌아보는 시간이 필요할 것 같아서 이 글을 포스팅한다. Campus 링크
이번 포스팅에서는 위 그림에서 로컬에서 작성한 코드가 git actions를 거쳐 EC2까지 가는 과정을 설명합니다.
먼저 인텔리제이에서 작성한 자바 코드는 Git을 통해 GitHub로 Push한다
여기서 여러 브랜치 중에 master 브랜치로 푸시하게 되면 Git Actions는 EC2로 배포하기 위한 작업을 실행한다. 여기에 대한 설정은 main.yml 파일을 통해 관리되는데, 코드 예시는 다음과 같다. 각각의 step들이 Git Actions에서 실행될 Action을 나타낸다. ((ex) 자바 JDK 11 설치 = JDK 11 설치 여부))
name: CI
on:
push:
branches:
- master
jobs:
backend:
name: CI with Gradle
runs-on: ubuntu-18.04
steps:
- name: 체크아웃 Github-Action
uses: actions/checkout@v2
- name: 자바 JDK 11 설치
uses: actions/setup-java@v1
with:
java-version: 11
- name: gradlew 권한 부여
run: chmod +x ./gradlew
- name: Gradle 빌드
run: ./gradlew build
shell: bash
- name: Make zip file
run: zip -r ./$GITHUB_SHA.zip .
shell: bash
- name: AWS 설정
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: Upload to S3
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://camp-us/$GITHUB_SHA.zip
- name: Code Deploy
run: aws deploy create-deployment --application-name camp-deploy-app-new --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name dev --s3-location bucket=camp-us,bundleType=zip,key=$GITHUB_SHA.zip
Github Action으로 빌드된 결과물을 S3에 올려놓을 것이다. 그러면 EC2 인스턴스에 있는 CodeDeploy가 S3에 저장된 빌드 결과물을 가져와 인스턴스에 배포를 한다. 그러므로 우리는 빌드된 결과물을 저장하는 공간으로 S3 서비스를 사용했다.
위 yaml파일을 보면 알 수 있듯이, 전체 코드를 zip파일로 압축 후에 S3로 업로드 하는 것을 확인할 수 있다.
여기서 사용되는 IAM은 사용자가 S3와 CodeDeploy에 대한 권한을 얻기 위해 접근한다. IAM 개인키 정보는 IAM 설정 이후 부여받은 키 파일을 GitHub Setting에 들어가 Secret에 들어가면 설정할 수 있다.
결론적으로 생성된 zip파일을 EC2까지 S3와 CodeDeploy를 통해 옮길 수 있다.