CI의 환경은 구축이 되어 있지만 배포시 중단이 된다는 문제가 있다.
프로젝트의 크기에 따라 배포시간이 다르겠지만 서비스가 클수록 배포시간이 길어지기 때문에 문제가 발생될 소지가 크다.
서비스를 중지하지앙ㄶ고 배포할 수있는 방법을 무중단 배포라고 합니다.
1. aws에서 블루 그린 무중단 배포
2. 도커를 이용한 웹서비스 무중단 배포
이외에도 많지만 여기서 소개되는 방식은 엔진엑스(nginx)를 사용할 것이다.
엔진엑스 : 웹서버, 프록시, 캐싱, 로드밸런싱, 미디어스트리밍등을 위한 오픈소스
리버스프록시 : 외부이 요청을 받아 백앤드 서버로 요청을 전달
이번에 구축할 내용은 엔진엑스 리버스프록시 구축이다.
엔진엑스를 이용하는이유는 사용하기 쉽고 가장 저렴하기 때문이다.
구조 : 리눅스 서버에 엔진액스 1대와 스프링 jar를 2대 사용
1) 엑진엑스는 80(http), 443(https) 포트를 할당합니다.
2) 스프링부트1은 8081포트로 실행합니다.
3) 스프링부트2은 8082포트로 실행 합니다.
운영과정
1) 사용자는 서비스 주소로 접속합니다.
2) 엔진엑스는 사용자의 요청을받아 현재 연결된 스프링 부트 요청을 전달
3) 스프링부트2는 엔진엑스와 연결된 상태가 아니니 요청받지 못한다.
4) 배포하는동안에 서비스는 중단되지않는다.
서비스1이 운영중일때 배포는 서비스2에 배포가 됨으로 중단되지않는다.
5) 배포가 끝나고 서비스(부트2)에 구동이 정상인지 확인하다.
6) 구도잉 정상이면 서비스1 -> 서비스2를 바라보게 한다.
7) 배포시 이런식으로 순환구조가 되어 무중단 배포가 일어난다.
작동원리는 현재 실행중인 active profile을 가져오고 배포에 사용될 profile이 하나라도 있으면 그값을 반환하게 한다.
2.applicaiton-real1(real2).properties 작성
해당 파일들을 작성하는데 real1은 port가 8081, real2는 8082로 작성하여 만든다.
3. 엔진엑스 설정 수정
인텔리제이 설정부터 무중단배포까지 완성이 되었다.
git주소 : https://github.com/pih6585/aws-webservice
이책을 통해서 토이프로젝트로 무중단 배포까지 시연을 해봤는데 너무 잼있었다.
이다음에 면접 준비하기전까지 스프링부트 JPA 프로젝트 책을 통해서 배포까지 다시한번 해봐야겠다.