AWS 공부를 하면서 배포 전략을 간단하게 정리해보았다.
AWS 서비스 요약
EC2
- 가상 컴퓨팅 환경을 제공해주는 서비스
- Instance
- 실행되고 있는 서버
- 도커의 컨테이너와 같은 포지션
- AMI
- 클라우드 환경에서 실행할 서버 환경을 미리 만들어둔 템플릿
- 도커의 이미지와 같은 포지션
CloudFront
- html, css, js등 정적 파일들을 빠르게 배포하게 해주는 서비스
- 전세계에 있는 CDN을 통해 빠른 배포가 가능
- S3버킷을 이용해 쉽게 배포 가능
S3
- 클라우드 스토리지 서비스
- 정적파일들을 클라우드 환경에 저장하고 다양한 서비스에 활용 가능
- 언제 어디서나 원하는 데이터를 저장하고 검색 가능
- 단위를 버킷이라고 칭함
- 한 버킷은 무한대의 객체를 저장할 수 있으며 확장 축소도 자동으로 해줌
VPC
- 클라우드 가상 네트워크
- 공유기와 같은 역할
- 사설 IP를 만들어 내 AWS 서비스에 할당해줄 수 있음
Route53
CodeDeploy
- AWS의 다양한 서비스의 배포를 자동화해주는 서비스
무중단 배포
- 서비스가 중단되지 않은 상태로 새로운 버전을 사용자들에게 배포하는 것
In-Place 배포
- 사용중인 환경에 새로운 변경사항이 포함된 어플리케이션만 반영하는 방법
- 순서
- 배포 그룹의 각 환경에 있는 어플리케이션을 일시정지
- 최신 상태의 어플리케이션의 변경 사항을 설치
- 새 버전의 어플리케이션 실행
Rolling 배포
- 여러 개의 가동중인 서버를 갖춘 환경에서 한 번에 정해진 수만큼의 서버에 새로운 변경 사항이 포함된 어플리케이션을 배포하는 방법
- 구 버전에서 새 버전으로 트래픽을 점진적으로 전환하며 구 버전의 인스턴스도 점차 삭제됨
- 서버 수의 제약이 있을 경우 유용함
- 배포 중 인스턴스의 수가 감소되기 때문에 서버 처리 용량을 미리 고려해야 함
Canary 배포
- 가동중인 서버들의 일부에만 새로운 앱을 배포하여 일부 트래픽을 새 버전의 환경으로 분산하는 방법
- A/B 테스트가 가능
- 오류율 및 성능 모니터링에 유용하게 사용할 수 있음
- 구 버전으로 쉽게 되돌릴 수 있음
Blue Green 배포
- 새로운 변경사항이 포함된 어플리케이션을 위한 새로운 환경을 구축하고 교체하는 방법
- 하나의 버전만 서비스되기 때문에 버전 관리 문제 방지 가능
- 운영 환경에 영향을 주지 않고 실제 서비스 환경으로 새 버전 테스트 가능
- 새 버전 전환 후 문제가 생겼을 시 구버전으로 돌리는 롤백 빠름
- 구 버전과 새 버전 두 환경 모두 갖출 필요가 있어서 시스템 자원이 두배로 필요함
적절한 배포 전략
내가 봤을 때 주변에서 많이 사용하는 배포 방식은 Blue Green 배포와 In-Place 배포이다.
그러면 어떤 상황에 어떤 전략이 선택할지 생각해보면 다음과 같은 기준으로 고려해볼 수 있다.
Blue Green 배포
- 인스턴스 안에 private한 데이터가 쌓이지 않는 경우
- 예를 들어서 Rest API 서버만 인스턴스에 띄우고 DB를 RDS같은 걸로 독립적으로 두었다고 치면 API서버만 Blue Green 배포방식으로 인스턴스를 교체해주면 편할 것이다.
In-Place 배포
- 인스턴스 안에 private한 데이터가 쌓이는 경우
- 예를 들어서 API서버와 DB가 같은 인스턴스에 혼재되어 있는 경우에는 Blue Green 배포를 할 수 없다. (DB 데이터도 초기화되기 때문)
- 따라서 이런 경우에는 운영중이던 인스턴스에서 패치해야하는 부분만 업데이트해주는 In-Place 배포를 사용하면 적절하다.
다른 배포방식도 사용하는 곳이 있겠지만 나는 아직 두 개의 배포전략만 사용해보았다.
새로운 전략을 사용해보게되면 다시 정리해봐야겠다.
이미지출처