[Spring] Nginx와 Spring Server를 활용한 무중단 배포

이번 포스팅에서는 앞서 진행한 Nginx와 Spring Server 1대간 연동을 응용한 무중단 배포에 대해서 포스팅하겠다.

실습에 앞서 이전에 사용하였던 Nginx이 설치된 가상 머신과 Spring Server가 설치된 가상머신에 더해 2개의 가상머신을 추가적으로 준비해서 실습을 진행하겠다.

-이전 포스팅 :  https://dokhakbaksa.tistory.com/45

 

[Spring] Nginx에 Spring Server 연동하기

이번 포스팅에서는 앞서 설명한 nginx를 활용하여 가상 서버를 연결하는 작업을 해보도록 하겠다. 본 글쓴이는 빠른 실습을 위해 1대의 nginx와 1대의 가상머신만 준비해서 실습을 진행해보도록 하

dokhakbaksa.tistory.com

 

실습에 앞서 무중단 배포에 대하여

 

무중단 배포를 사용하지 않을 경우

실제 서비스를 서버 한대만을 사용해 운영한다고 가정해보자.

현재 서비스 중인 서비스는 버전 V1 을 배포한 서비스이다.

그런데 기능이 업데이트되어 버전 V2를 새로 개발해 새로운 버전을 배포하려한다.

 

이 새로운 버전 V2를 배포하기 위해서는 V2 버전의 빌드 파일을 서버에 배포를 해야한다.

V1과 V2는 서로 같은 포트를 사용하기 때문에 V2를 배포하기 위해서는 V1버전을 통해 실행하고 있는 서비스를 종료해야만한다.

 

이 경우 V1이 종료되고 V2 버전이 실행되는 사이 유저가 서비스를 이용할 수 없는 시간이 생기는데, 이를 "다운타임"이라고 한다.

 

무중단 배포란?

무중단 말 그대로 서비스가 중단되지 않은 상태로 새로운 버전을 배포하는 것이다.

서비스가 계속 운영되는 상태에서 새로운 버전의 어플리케이션을 배포하는 과정에서 시스템 가동시간을 최소화하여 사용자에게 생기는 불편함(다운타임)이 없는 방식이다.

이를 위해서는 서버를 2대 이상 확보해야한다.

 

가상 머신 세팅

Nginx : 123.123.123.77

Spring Server1 : 123.123.123.78

Spring Server2 : 123.123.123.79

Spring Server3 : 123.123.123.80

 

- Spring Server를 2대 더 준비했다

 

Nginx 설정 변경

 

기존에 Nginx에는 Spring Server1만 등록이 되어 있었는데, 추가적으로 2대를 더 등록 해 주었다.

 

1) nginx 설정 파일 열기

vi /etc/nginx/nginx.conf

 

2) server 위에 아래 내용 추가

upstream mybackends { 
     server 123.123.123.78:8080;  // 1번 스프링 서버 IP 
     server 123.123.123.79:8080;  // 2번 스프링 서버 IP 
     server 123.123.123.80:8080;  // 3번 스프링 서버 IP
 }

 

3)proxy_pass 내용 수정

수정 전 : proxy_pass http://123.123.123.77;

수정 후 : proxy_pass http://mybackends;

 

3) 4) 사진

 

4) nginx 서버 재시작 

 systemctl restart nginx

 

 

버전이 다른 Spring Server를 등록한 가상머신에 배포

 

1) 123.123.123.78 Spring Server에는 버전1 배포

2) 123.123.123.79 Spring Server에는 버전2 배포

3) 123.123.123.80 Spring Server에는 버전3 배포

 

4) 배포 이후 http://123.123.123.77/customer/1에 접속할때마다 Nginx에 연결된 서로 다른 버전의 서버에서 HTTP 응답을 수신받는것을 확인 할 수 있다.

버전 1
버전 2
버전 3

 

5) 이후 서버의 증설이 필요하다면 위의 Stream backends에 등록해주면 된다.

 

6) 이때 Stream backends 등록하는 과정을 통해 서버를 증설하고 이후 Nginx를 재시작하면 Nginx가 종료됬다가 재시작된것이므로, 무중단 배포가 아닌, 실제 서버를 재시작하는것이기에 실제 서비스 제공시에는 큰 문제가 발생하게 된다.(다운타임)

 

7) 이러한 서버 재시작이 아닌, 변동 사항만 반영하는 방식이 무중단 배포이며, 다음과 같은 명령어를 통해 진행한다.

systemctl reload nginx

 

7-1) 무중단 배포 실습을 위해 3번 스프링 서버를 제거 후 Nginx를 재시작해주었다. 제거 후 버전 3번이 조회되지 않는것을 확인 할 수 있었다.

 

7-2) 이후 다시 등록한 뒤

 

7-3) 무중단 배포를 위해 밑의 메소드 사용

systemctl reload nginx

 

7-4) 이후 서버를 재시작하지 않고 무중단 배포를 통해 서비스 장애없이 정상적으로 서버가 등록된것을 확인 할 수 있다.

 

'Spring' 카테고리의 다른 글

[Spring] RowMapper란 ?  (0) 2024.05.12
[Spring] Entity 에 쓰이는 Annotation  (0) 2024.03.10
[Spring] Nginx에 http 대신 https 적용하기  (0) 2024.01.29
[Spring] Nginx에 Spring Server 연동하기  (0) 2024.01.29
[Spring] Nginx란?  (0) 2024.01.29