무중단 배포 nginx

호밀빵 굽는 쿼카·2022년 5월 24일
0

NHN Cloud 인턴

목록 보기
47/48

무중단 배포가 무엇이고 왜 중요한가?

무중단 배포

프로젝트를 개발하고 나면 마지막 단계에서 빌드,테스트,배포를 진행한다.

빌드 : 프로젝트가 출시될 때 이것들은 다른 형태로 변형되거나 압축되어 보내지는데 이러한 과정
테스트 : 코드를 테스트하는 것
배포 : 코딩해서 빌드한 결과물을 사용자에게 전달하는 과정
컴파일러 : 기계어로 번역하는 작업을 미리 해놓는 것
인터프리터 : 반대로 한줄씩 그때마다 번역하는 것
CI/CD : 개발-빌드-테스트-배포까지의 전 과정을 자동화

하지만, 여기서 문제는 배포하는 시간동안 애플리케이션이 중단된다. 인턴과정에서 배웠던 가상화,이중화,로드밸런싱 등등은 모두 애플리케이션 및 서버가 중단되지 않아야하는 것에 중점을 두었다.

사용자가 서비스를 사용할 수 없는 시간을 최대한 줄이는것이 중요하기 때문에, 나온 개념이 무중단 배포!

무중단 배포 = 서비스를 중단하지 않고 배포하는 것

무중단 배포 아키텍처

  1. 롤링 배포
  • 무중단 배포의 가장 기본적인 방식
  • 사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체하는 방식
  • 서비스 중인 인스턴스 하나를 로드밸런서에서 제거한 뒤, 새 버전을 배포 후 다시 라우팅하도록 하는 과정을 반복하여 모든 인스턴스에 새 버전의 애플리케이션을 배포
  • 인스턴스마다 차례로 배포를 진행하기 때문에 상황에 따라 손쉽게 롤백이 가능한 장점
  • 새 버전을 배포할 때 로드 밸런싱에 연결된 인스턴스 수가 감소하기 때문에 서비스 처리 용량을 고려해야 함
  • 또한 서버가 여러대일 경우 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있음
  1. 블루-그린 배포
  • 블루를 구버전, 그린을 신버전으로 지칭
  • 신규 서버가 배포 완료 상태가 되기 까지 기존 서버다 동작하다, 신규 서버가 준비되면 로드 밸런서의 방향을 변경
  • 배포 속도가 빠르며, 장애가 발생했을 때 로드 밸런서가 기존 서버를 가리키면 되기 때문에 롤백이 쉬움
  • 추가적인 서버로 인한 비용이 단점
  1. Nginx 사용 배포
  • 가장 저렴하고 가장 많이 사용됨

무중단 배포를 검색하면 가장 많이 나오는 웹 서버 소프트웨어는 바로, 세번째인 Nginx 이다.

NGINX 동작 방식

이 블로그에 이해가 쉽게 작성되어있어서 글을 가져와봤다.

NGINX 동작 구조


1. 사용자는 서비스 주소로 접속 (http의 경우 80 포트, https의 경우 443 포트)
2. Nginx는 사용자 요청을 받아 현재 연결된 Spring boot로 요청 전달
3. 두 번째 Spring boot는 연결되어 있지 않아 요청받지 못한다.

신규 배포가 필요한 경우

  1. 연결되지 않은, 두 번째 Spring boot에 배포를 한다. (Nginx는 첫 번째 Spring boot와 연결된 상태라 서비스가 중단되지 않는다.)
  2. 배포 후에 정상적으로 두 번째 Spring boot가 구동 중인지 확인
  3. 2가 정상적이라면, nignx reload 명령어를 통해 Nginx 연결을 2와 연결


기존 프로젝트+Nginx 의 구조

이러한 배포 작업을 포함한 개발-빌드-테스트-배포의 자동화(CI/CD)로 보다 편리하게 개발 가능




참고링크

profile
열심히 굽고 있어요🍞

0개의 댓글