카테고리 없음

스프링부트와 AWS로 혼자 구현하는 웹 서비스 - CI/CD

Carnival7 2021. 9. 2. 15:49

출처 : 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가 필요한 이유

  • 하나의 프로젝트를 여러 개발자가 함께 개발을 진행하며 각자가 개발한 코드를 합치는 일이 필요한데, 생산성을 높이기 위해 지속적으로 코드가 통합되는 환경이 필요하다.
  • 개발자들이 개발에만 집중할 수 있도록 한다.
  • 서버 또한 수십 수백대의 서버에 배포를 해야하거나 긴박하게 배포가 이뤄져야 하는 상황에서는 자동화를 통해 생산성을 높여야 한다.

 

모든 연동이 끝난 후 전체 구조의 모습