Nginx를 이용해서 무중단 서비스 만들기
CD란?
- Continuous Deployment
- 지속적인 배포
무중단 서비스가 필요한 이유
- Travis CI를 이용하여 배포 자동화 환경을 구축했다.
- 하지만 배포하는 동안 애플리케이션이 종료된다는 문제가 발생한다.
- 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단 된다.
무중단 배포 방식
- AWS에서 블루 그린 무중단 배포 (비용 발생)
- 도커를 이용한 웹서비스 무중단 배포
- L4스위치 이용 (고가의 장비)
- Nginx를 이용
우리는 Nginx를 이용한다. 왜냐하면 가장 저렴하고 쉽기 때문이다.
Nginx 리버스 프록시
- Nginx가 외부의 요청을 받아 백앤드 서버로 요청을 전달 하는 행위
- 리버스 프록시 서버(Nginx)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션 서버들이 처리한다.
구조
1개의 EC2 혹은 리눅스 서버 + Nginx 1대 + spring boot Jar 2대
- 사용자는 서비스 주소로 접속한다(80 혹은 443포트)
- 엔진엑스는 사용자의 요청을 받아 현재 연결된 스프링 부트로 요청을 전달한다.
- 스프링 부트1 즉, 8081 포트로 요청을 전달
- 스프링부트2는 엔진엑스와 연결된 상태가 아니므로 요청받지 못한다.
신규 배포가 필요하다면,
- Nginx와 연결되지 않은 스프링 부트2에 배포한다.
- 배포 중에도 서비스는 중단되지 않는다. Nginx가 스프링 부트1과 연결되어있기 때문.
- 배포가 끝나고 스프링 부트2가 구동 중인지 확인한다.
- 스프링 부트2가 정상 구동 중이면 nginx reload명령을 통해 8081대신 8082를 보도록한다 (0.1초 이내로 완료된다.)