AWS 배포 전략

황정준·2023년 4월 12일
0

AWS 공부를 하면서 배포 전략을 간단하게 정리해보았다.

AWS 서비스 요약

EC2

  • 가상 컴퓨팅 환경을 제공해주는 서비스
  • Instance
    • 실행되고 있는 서버
    • 도커의 컨테이너와 같은 포지션
  • AMI
    • 클라우드 환경에서 실행할 서버 환경을 미리 만들어둔 템플릿
    • 도커의 이미지와 같은 포지션

CloudFront

  • html, css, js등 정적 파일들을 빠르게 배포하게 해주는 서비스
  • 전세계에 있는 CDN을 통해 빠른 배포가 가능
  • S3버킷을 이용해 쉽게 배포 가능

S3

  • 클라우드 스토리지 서비스
  • 정적파일들을 클라우드 환경에 저장하고 다양한 서비스에 활용 가능
  • 언제 어디서나 원하는 데이터를 저장하고 검색 가능
  • 단위를 버킷이라고 칭함
  • 한 버킷은 무한대의 객체를 저장할 수 있으며 확장 축소도 자동으로 해줌

VPC

  • 클라우드 가상 네트워크
  • 공유기와 같은 역할
  • 사설 IP를 만들어 내 AWS 서비스에 할당해줄 수 있음

Route53

  • AWS의 DNS 서비스

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 배포를 사용하면 적절하다.

다른 배포방식도 사용하는 곳이 있겠지만 나는 아직 두 개의 배포전략만 사용해보았다.
새로운 전략을 사용해보게되면 다시 정리해봐야겠다.

이미지출처

profile
호기심 많은 주니어 백엔드 개발자입니다.

0개의 댓글