본문 바로가기

아카이브/dev-camp

dev-camp Day 5: CD 구축과 고민

728x90

CD : 자동 배포 (Github Actions, CodeDeploy)

  1. master 브랜치에 push.

  2. github Actions를 통해 자동으로 빌드.

  3. 빌드된 파일을 압축하여 S3 버킷에 올림.

  4. CodeDeploy를 이용하여 사용하는 EC2에서 S3버킷에 올라온 파일을 가져옴.

  5. 압축을 해제 하여 배포.

  6. PM2 통해 올라온 파일을 자동으로 다시 띄움.

 

CodeDeploy Event LifeCycle Hook

  1. ApplicationStop : 이전 프로그램(구 버전)을 중지하는 스크립트를 실행하는 단계.
  2. DownloadBundle : CodeDeploy에이전트가 새 버전을 인스턴스로 가져옴.
  3. BeforeInstall :구버전의 설치 구성을 저장, 파일 복호화 현재 버전의 백업을 생성.
  4. Install : 압축을 해제, appspec.yml에 정의된대로 파일을 지정한 경로로 복사.
  5. AfterInstall : 프로그램이 시작되기 전에 프로그램의 구성을 변경할 수 있다.
  6. ApplicationStart : 새 버전으로 설정 변경
  7. ValidateService : 배포 성공 여부 판단.

 

고민

현재 EC2인스턴스는 많은 비용을 지불할 수 없어 2개 프로젝트를 함께 구동한다.

그런데 dev-camp는 구동이 되나 gthen 프로젝트가 구동되지 않는다.

배포할 때부터 Afterinstall 단계에서 시간이 많이 소요되었다. 

dev-camp서버도 배포 초기에는 보이지 않고 시간이 5분 정도 지나면 프론트엔드가 나온다. 

 

현재 예상 문제 : EC2의 메모리 부족.

 

로그를 살펴보고 문제 원인을 조금 더 파악해서 비용을 들이지 않고 해결하고 싶다. 

예전에 비슷하게 서버가 올라갔을 때 보이지 않았을 때는

swap 파일을 사용하고 30Gib까지 메모리 용량을 늘려 해결하였다. 

비슷하게 내가 도전할 수 있는 방법이 있다면 좋겠다. 

 

문제 해결 시도

새 어플리케이션과 배포 그룹 생성

codedeploy lifecycle hook을 보면서 생각이 들었는데 구버전의 설정을 저장했다가 새버전으로 갈아끼운다.

동일한 배포그룹을 사용하는 경우 이전 버전이 삭제되는 것 같다. 

그래서 새 어플리케이션과 배포그룹을 생성하여 재배포를 진행하였다.

AfterInstall 단계가 상당히 오래걸려 결과를 지켜봐야겠다.