[스프링] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 24시간 365일 중단 없는 서비스를 만들자

June·2021년 10월 25일
0

기존 방식은 긴 기간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단된다.

무중단 배포 소개

서비스를 중단하지 않고 배포할 수 있는 방법을 무중ㄷ안 배포라고 한다.

  • AWS에서 블루 그린 무중단 배포
  • 도커를 이용한 웹서비스 무중단 배포

이외에도 L4 스위치를 이용한 무중단 배포 방법도 있지만, L4가 워낙 고가 장비이다 보니 대형 인터넷 기업 외에는 쓸일이 거의 없다.

이번 장에서는 엔진엑스를 이용한 무중단 배포를 할 것이다. 엔진엑스는 웹 서버, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈소스 소프트웨어이다.

엔진엑스가 가지고 있는 여러 기능 중 리벅스 프록시가 있다. 리버스 프록시란 엔진엑스가 외부의 요청을 받아 백엔드 서버로 요청을 전달하는 행위를 이야기 한다.리버스 프록시 서버(엔진엑스)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹 애플리케이션 서버들이 처리한다.

엔진엑스를 이용하는 이유는 간단하다. 가장 저렴하고 쉽기 때문이다.

구조는 간단하다. 하나의 EC2 혹은 리눅스 서버에 엔진엑스 1대와 스프링 부트 Jar 2대를 사용하는 것이다.

  • 엔진엑스는 80(http), 442(https) 포트를 할당한다.
  • 스프링 부트1은 8081 포트로 설정한다.
  • 스프링 부트2는 8082 포트로 설정한다.

엔진엑스 무중단 배포1은 다음과 같은 구조가 된다.

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

1.1 버전으로 신규 배포가 필요하면, 엔진엑스와 연결되지 않은 스프링 부트2(80802 포트)로 배포한다.

  1. 배포하는 동안에도 서비스는 중단되지 않는다.
    • 엔진엑스는 스프링 부트1을 바라보기 때문이다.
  2. 배포가 끝나고 정상적으로 스프링 부트2가 구동 중인지 확인한다.
  3. 스프링 부트2가 정상 구동 중이면 nginx reload 명령어를 통해 8081 대신에 8082를 바라보도록 한다.
  4. nginx reload는 0.1초 이내에 완료된다.

0개의 댓글