Hyemi Lee

Hyemi Lee

주니어 개발자의 삽질과 기록

Nginx를 이용해서 무중단 서비스 만들기

CD란?

  • Continuous Deployment
  • 지속적인 배포

무중단 서비스가 필요한 이유

  • Travis CI를 이용하여 배포 자동화 환경을 구축했다.
  • 하지만 배포하는 동안 애플리케이션이 종료된다는 문제가 발생한다.
  • 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단 된다.

무중단 배포 방식

  1. AWS에서 블루 그린 무중단 배포 (비용 발생)
  2. 도커를 이용한 웹서비스 무중단 배포
  3. L4스위치 이용 (고가의 장비)
  4. Nginx를 이용

    우리는 Nginx를 이용한다. 왜냐하면 가장 저렴하고 쉽기 때문이다.

Nginx 리버스 프록시

  • Nginx가 외부의 요청을 받아 백앤드 서버로 요청을 전달 하는 행위
  • 리버스 프록시 서버(Nginx)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션 서버들이 처리한다.

구조

리버스 프록시

1개의 EC2 혹은 리눅스 서버 + Nginx 1대 + spring boot Jar 2대

  1. 사용자는 서비스 주소로 접속한다(80 혹은 443포트)
  2. 엔진엑스는 사용자의 요청을 받아 현재 연결된 스프링 부트로 요청을 전달한다.
    • 스프링 부트1 즉, 8081 포트로 요청을 전달
  3. 스프링부트2는 엔진엑스와 연결된 상태가 아니므로 요청받지 못한다.

신규 배포가 필요하다면,

  1. Nginx와 연결되지 않은 스프링 부트2에 배포한다.
    • 배포 중에도 서비스는 중단되지 않는다. Nginx가 스프링 부트1과 연결되어있기 때문.
  2. 배포가 끝나고 스프링 부트2가 구동 중인지 확인한다.
  3. 스프링 부트2가 정상 구동 중이면 nginx reload명령을 통해 8081대신 8082를 보도록한다 (0.1초 이내로 완료된다.)

무중단 배포2

무중단 배포 전체 구조

무중단 배포 전체

Tags: ,

Categories:

Updated:

Share on

Twitter Facebook LinkedIn

You may also enjoy

Redis Stream

2021年04月28日

Stream Stream은 로그 데이터를 처리하게위해 5.0에서 새로 도입된 데이터 타입입니다. 대량의 데이터가 연속적으로 발생할때 처리하기 위해 등장했습니다. 기존 데이터를 수정하지 않고 오직 추가로 발생합니다. 이런 종류의 데이터를 stream or log데이터...

Study, Object, chapter2&3 presentation

2021年04月20日

chapter03. 역할, 책임, 협력 객체지향 설계란, 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.

Spring, chatting 프로그램 만들기, Reactive란?

2020年06月16日

Reactive 막힘없이 흘러다니는 data(event)를 통해 사용자에게 자연스러운 응답을 주고 규모 탄력적으로 리소스를 사용하며 실패에 있어서 유연하게 대처한다 모든 지점에서 블럭 되지 않게 하자 oop와 같은 패러다임 모든 것을 비동기적인 data의 strea...