출처 : https://moonsbeen.tistory.com/102
스프링부트와 AWS로 혼자 구현하는 웹 서비스 - CI/CD
스프링부트와 AWS로 혼자 구현하는 웹 서비스 - CI/CD CI (Continuous Integration) CI란? 코드 버전 관리를 하는 VCS시스템(Git, SVN등)에 PUSH가 되면 자동으로 테스트와 빌드가 실행되어 안정적인 배포 파일을
moonsbeen.tistory.com
스프링부트와 AWS로 혼자 구현하는 웹 서비스 - CI/CD
CI (Continuous Integration)
CI란?
- 코드 버전 관리를 하는 VCS시스템(Git, SVN등)에 PUSH가 되면 자동으로 테스트와 빌드가 실행되어 안정적인 배포 파일을 만드는 과정을 말한다.
- CI 도구의 종류
- Travis CI: 깃허브에서 제공하는 무료 CI 도구이다.
- Jenkins: 설치형 무료 CI 도구이다. 설치형이기 때문에 이를 위한 AWS EC2인스턴스가 하나 더 필요하다.
- CodeBuild: AWS에서 제공하는 CI 도구이다. 빌드 시간 만큼 요금이 부과된다.
Travis CI란?
- 깃허브 계정으로 로그인 한 후 레포지토리를 연결시켜 사용한다.
- 프로젝트를 수정한 후 커밋과 푸시를 진행하고 Travis CI 저장소 페이지를 보면 결과를 확인할 수 있다.
Travis CI와 AWS S3연동
- S3는 AWS에서 제공하는 일종의 파일 서버이다. 정적 파일들이나 배포 파일들을 관리하는 기능을 지원한다.
- Travis CI가 빌드한 결과를 연동한 S3가 받아서 보관한다.
- 실제 배포는 AWS의 CodeDeploy라는 서비스를 이용한다.
- 이때 일반적인 AWS서비스에 외부 서비스가 접근할 수 없으므로 AWS의 IAM서비스를 사용하여 접근 권한을 가진 Key를 생성하고 이를 통해 Travis CI가 AWS의 S3, CodeDeploy에 접근할 수 있도록 해야한다.
- CodeDeploy의 오류 확인 방법은 EC2에 접속 후 /var/log/aws/codedeploy-agent에서 로그를 확인할 수 있다.
CD (Continuous Deployment)
CD란?
- 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정을 말한다.
- 새로운 Jar가 실행되기 전까지 기존 Jar를 종료시켜 놓기 때문에 배포하는 동안 어플리케이션이 종료되는 문제점을 해결할 수 있다.
엔진엑스
- 무료이면서 훌륭한 성능을 보여준다.
- 리버스 프록시: 엔직엑스가 외부의 요청을 받아 백엔드 서버로 요청을 전달한다. 이 기능을 사용해 무중단 배포 환경을 구축한다.
- 하나의 EC2서버에 엔진엑스 1대와 스프링 부트 Jar 2대를 사용한다.
- EC2서버에 엔진엑스를 설치하고 스프링 부트 프로젝트와 연동해 주면 된다.
CI/CD가 필요한 이유
- 하나의 프로젝트를 여러 개발자가 함께 개발을 진행하며 각자가 개발한 코드를 합치는 일이 필요한데, 생산성을 높이기 위해 지속적으로 코드가 통합되는 환경이 필요하다.
- 개발자들이 개발에만 집중할 수 있도록 한다.
- 서버 또한 수십 수백대의 서버에 배포를 해야하거나 긴박하게 배포가 이뤄져야 하는 상황에서는 자동화를 통해 생산성을 높여야 한다.
모든 연동이 끝난 후 전체 구조의 모습