Post

[Spring] 무중단 배포 기술 스택 도입 결정하기(1)

무중단 배포 기술 스택 도입 결정하기(1)- AWS Blue-Green, Docker

무중단 배포란

  • 무중단 배포 도입이 필요한 이유

    지금까지는 프로젝트를 생성 후 서비스를 Https로 배포 및 운영 중일 때 수정사항이 반영된 새로운 버전을 배포하기 위해서 항상 작동 중인 기존 서비스를 종료하고 새로운 서비스를 시작해야 했다 이 과정에서 다운타임(서버 중단)이 필연적으로 발생해서 개발자로서도 협업하며 테스트할 때 불편함이 발생했다
    추후 사용자가 있을 경우에도 마찬가지로 피드백을 반영할 때마다 사용자들도 서비스가 자주 중단되는 경험을 하게 될 것이다 이 다운타임(서버 중단)을 해결해주는 방법이 바로 무중단 배포이다. 서버를 중단하지 않고 운영하는 경험이 중요하다고 생각했기 때문에 프로젝트에 도입하기로 결정했다.

무중단 배포 구현 방식에는 어떤 것이 있을까?

1. AWS에서 Blue-Green 무중단 배포

[블루 그린 배포 작동 방식]
image

블루 그룹에 두대의 서버로 요청을 나눠서 처리
image 그린 그룹에도 동일하게 인스턴스를 만듦
image 잠시 두 그룹 모두의 트래픽을 처리
image 블루 그룹 모든 인스턴스 종료 및 제외 > 그린 그룹에서 모든 요청을 처리

  • 위의 그림과 같이 AWS의 Elastic Load Balancer를 이용하여 트래픽을 쉽게 스위칭할 수 있다
  • 언제든지 롤백이 가능하며, 배포 중 문제가 발생해도 기존 환경을 유지할 수 있다는 장점이 있다.
  • 별도의 인프라를 준비하여 배포할 수 있어 안정적

BUT

  • 별도의 인프라를 유지하기 위해 비용이 더 많이 발생할 수 있음.
  • 초기 설정이 복잡

2. 도커를 이용한 무중단 배포

image

  • 도커라는 이름은 정말 많이 들어보고 찾아봤지만 와닿지 않았던 이유는 컨테이너…무한 반복인 글들..
  • 테코블의 글을 읽어보는데 선박을 이용한 해상 운송업 비유가 찰떡인 것이다(역시 테코블!!)
  • 컨테이너라는 단위로 패키징 처리가 되니 그 안에 있는 라이브러리와 코드를 직접 뜯어보고 알 필요가 전혀없이 환경에 구애 받지 않고 서비스가 실행될 수 있도록 돕는다
  • 이로써 컨테이너는 서비스를 운영할 컴퓨팅 환경(= 독립된 환경)에서 실행되며 여러 환경에서도 일관된 배포를 보장한다
  • 즉, 개발언어(java, python, node.js), 서버환경과 개발환경이 바뀔 때마다 셋업할 필요가 없다.
  • 도커는 이미지를 기반으로 컨테이너를 생성하고 실행한다는 것을 기억하자!

BUT 모든 애플리케이션을 DOKERIZING해야 하며, 이를 위한 작업이 필요하다
컨테이너를 삭제하면서 데이터를 모두 초기화 시키지 않도록 외부 저장장치, S3 등 별도 클라우드 스토리지를 사용해야한다

[도커 Structure 그려보기]
image

[자주 쓰는 명령어]

옵션설명
-d컨테이너를 백그라운드에서 실행 (Detached Mode)
-p호스트 포트와 컨테이너 내부의 포트를 바인드
-v컨테이너 내부의 디렉토리를 호스트로 마운트 (연결)
-e컨테이너에서 사용되는 환경변수를 설정
--name컨테이너의 이름을 설정
--rm컨테이너가 종료될 경우 컨테이너 자체를 삭제
-it터미널 입력을 위한 옵션. -i 옵션과 -t 옵션은 주로 함께 사용
-wWORKDIR 를 설정
This post is licensed under CC BY 4.0 by the author.