무중단 배포
CD(Continuous Deployment - 지속적인 배포)
Continuous Deployment(지속적인 배포)은 소프트웨어 개발 및 배포 과정에서 자동화와 지속적인 통합을 통해 소프트웨어의 변경 사항을 빠르게, 자주, 안정적으로 실제 운영 환경에 배포하는 방법입니다. 이것은 Agile 및 DevOps 개발 방법론의 일환으로 사용되며, 릴리즈 주기를 단축하고 사용자 요구 사항을 신속하게 반영하기 위해 도입됩니다.
Continuous Deployment에서는 소스 코드 변경이 이루어지면, 자동화된 빌드, 테스트, 배포 프로세스를 통해 변경 사항을 실시간으로 릴리즈에 반영합니다. 개발자들은 작은 단위의 변경 사항을 빠르게 배포하여 실제 사용자들의 피드백을 받고, 지속적인 개선과 배우기를 추구할 수 있습니다.
배포 방식
AWS에서 블루 그린(Blue-Green) 무중단 배포
도커를 이용한 웹서비스 무중단 배포
엔진엑스를 이용한 무중단 배포
엔진엑스를 이용한 무중단 배포 예시
코드 자동 배포구조
엔진엑스는 80(http),443(https)포트를 할당합니다.
스프링 부트1은 8081포트로 실행합니다.
스프링 부트2는 8082포트로 실행합니다.
운영 과정
사용자는 서비스 주소로 접속합니다.(80 혹은 443 포트)
엔직엑스는 사용자의 요청을 받아 현재 연결된 스프링 부트로 요청을 전달합니다.
스프링 부트1 즉, 8081 포트로 요청을 전달한다고 가정합니다.
스프링 부트2는 엔진엑스와 연결된 상태가 아니니 요청받지 못합니다.
엔진엑스 설치
엔진엑스 설정 파일 수정
추가 내용
수정 내용
배포 스크립트들 작성 예시
appspec.yml
AWS CodeDeploy의 배포 구성 파일
profile.sh
공용으로 사용할 'profile'과 포트 체크 로직
find_idle_profile(): 현재 사용되지 않는 프로파일을 찾는 함수입니다. 해당 함수는http://localhost/profile로 요청을 보내 응답 코드를 확인하여 현재 사용 중인 프로파일을 판단합니다. 응답 코드가 400 이상인 경우real2를, 그렇지 않은 경우http://localhost/profile로부터 반환된 값을 사용합니다. 현재 사용 중인 프로파일이real1인 경우real2를, 그렇지 않은 경우real1을 쉬고 있는 프로파일로 결정하고 반환합니다.find_idle_port(): 쉬고 있는 프로파일의 포트를 찾는 함수입니다.find_idle_profile()함수를 호출하여 쉬고 있는 프로파일을 확인한 후,real1인 경우 "8081"을, 그렇지 않은 경우 "8082"를 반환합니다.
stop.sh
기존 엔진엑스에 연결되여 있진 않지만, 실행 중이던 스프링 부트 종료한다.
start.sh
배포할 신규 버전 스프링 부트 프로젝트를 stop.sh로 종료한 'profile'로 실행
-Dspring.config.location은 스프링 부트 애플리케이션에서 사용되는 시스템 프로퍼티(System Property)입니다. 이 프로퍼티를 사용하여 스프링 부트 애플리케이션의 구성 파일 위치를 지정할 수 있습니다.
-Dspring.config.location을 사용하면 기본적으로 클래스패스(classpath) 상에서 application.properties 파일을 찾지만, 추가적인 설정 파일의 위치를 지정할 수 있습니다. 즉, -Dspring.config.location 옵션을 사용하여 스프링 부트 애플리케이션에 대한 구성 파일의 경로를 직접 지정할 수 있습니다.
예를 들어, -Dspring.config.location=/home/ec2-user/app/application.properties라는 옵션을 사용하면 해당 경로에 위치한 application.properties 파일을 스프링 부트 애플리케이션의 구성 파일로 사용하게 됩니다. 이를 통해 외부에 위치한 구성 파일을 애플리케이션에 로드할 수 있습니다.
-Dspring.profiles.active는 스프링 부트 애플리케이션에서 사용되는 시스템 프로퍼티(System Property)입니다. 이 프로퍼티를 사용하여 활성화할 프로파일(profile)을 지정할 수 있습니다.
-Dspring.profiles.active 옵션을 사용하여 애플리케이션 실행 시 활성화할 프로파일을 지정할 수 있습니다. 예를 들어, -Dspring.profiles.active=dev라는 옵션을 사용하면 dev 프로파일이 활성화되고, 해당 프로파일에 연결된 프로퍼티 파일의 구성이 적용됩니다.
health.sh
switch.sh
tee 명령어는 파이프로 전달된 입력 데이터를 받아서 동시에 지정된 파일 및 표준 출력으로 출력합니다. 즉, 입력 데이터를 파일에 저장하면서 동시에 화면에 출력할 수 있습니다. 이는 로그 파일 작성이나 출력 내용의 확인 등에 유용하게 사용됩니다.
Refrence
Last updated