배포 자동화 개선 과정

john·2022년 2월 24일
1
post-thumbnail

JAM Stack

프론트를 배포하기 위해 사용
매우 간편한 배포 프로세스를 보유함.

(저장소(git, ...) push → 빌드 → 배포)

  • Netlify
    • 대역폭 및 성능 문제로 운영 환경에서 사용하기에는 부적합
  • Vercel
    • 대역폭 및 성능 문제로 운영 환경에서 사용하기에는 부적합
  • Amplify
    • 지역 선택이 가능해서 빠를거라고 예상했지만, SSR 배포가 안됨.

⇒ 개발용으로 사용하기에는 좋음. 하지만 페이지가 많아지고 기능이 많아짐에 따라 속도 문제로 테스트시 시간을 많이 잡아먹음.

gitlab + docker + ec2(lightsail)

gitlab ci/cd 스크립트를 이용하여 test → build → deploy 배포 파이프라인 구축

작동 방식

1. gitlab에 code push
2. ci 스크립트가 실행되어 구성한 순서에 따라 stage 실행
3. test stage를 실행 → 실패시 merge 불가
4. build stage 실행 → 도커 이미지를 빌드하고 빌드된 이미지를 registry에 저장
5. deploy stage 실행 → 저장소에서 도커 이미지를 받아와서 지정한 인스턴스에 이미지 실행
  • 도커 이미지를 build, push, pull 하는 과정에서 시간이 오래 걸림.
  • 특정 인스턴스에 배포가 되는 구조로 확장이 어려움.
  • 환경변수가 많아짐에 따라 관리하기가 쉽지 않음.
  • 무중단 배포가 아니여서 운영 환경에서 사용하기에는 부적합.

⇒ dev, staging 환경에선 사용할순 있으나 빌드(이미지를 빌드, 푸쉬)하는데 시간이 많이 소요 됨.

gitlab + codedeploy

gitlab ci/cd 스크립트를 이용하여 build → deploy 배포 파이프라인 구축

작동 방식

1. gitlab에 code push
2. ci 스크립트가 실행되어 구성한 순서에 따라 stage 실행
3. build stage 실행 → 프로젝트를 압축 파일(.zip)로 생성해서 s3에 저장
4. deploy stage 실행 → codedeploy 명령어를 실행.
  4.1. code deploy agent 설치
	4.2. code deploy 역할 부여
  4.3. 콘솔에서 code deploy 에플리케이션 생성
  4.4. 콘솔에서 code deploy 생성
	4.5. s3 + code deploy 권한을 가진 iam 사용자 생성
  • ci/cd 파이프라인 실행 속도가 빠름.
  • code deploy에 필요한 AMI를 생성하여 확장이 쉬움.
  • 그룹을 생성할 수 있어서 staging, production 관리가 용이함.
  • 환경변수를 파일로 저장이 가능함. (docker-compose)

개발 → staging 배포 → production 배포

각 소스코드는 staging, main(production + tag(release v(n)) branch별로 관리

gitlab + code pipeline

gitlab ci/cd 스크립트를 이용하여 code pipeline 실행

작동 방식

1. gitlab에 code push
2. ci 스크립트가 실행되어 구성한 순서에 따라 stage 실행
3. deploy stage에서 프로젝트를 압축 파일(.zip)로 생성하여 s3에 저장
4. s3에 저장 되면 code pipeline hook을 발생시켜 프로세스 실행
5. code pipeline 처리 과정
	5.1. code commit 실행 (s3)
	5.2. code build 실행 (ecr)
	5.3. code deploy 실행 (ec2)
  • build와 deploy를 분리하여 인스턴스의 부하를 줄일 수 있음.
    • 빌드는 ECR + CodeBuild 책임
    • 배포는 도커를 pull해서 실행
  • code pipeline을 구성하기 위해서 역할 및 설정 해야되는게 다소 복잡함.

TODO) gitlab + code pipeline + ecs

무중단 배포

  • nginx
  • nginx + docker
  • blue/green
profile
developer

0개의 댓글