티스토리 뷰

TIL

[CI/CD] 배포 자동화

sayho 2021. 12. 23. 18:02

모집 공고를 보면 우대조건에 CI/CD 구축 및 운영 경험이 있는걸 자주 볼 수 있다.
클라우드에 배포까지 했고 CI/CD 환경을 구축하여 배포 자동화를 해보려고 한다. 그 전에 CI/CD에 대해서 알아보자.

CI(Continuous Integration) : 지속적 통합

  GIT과 SVN 같은 코드 버전 관리 시스템에 PUSH가 되면 자동으로 테스트, 빌드를 수행하여 안정적인 배포 파일을
  만든 과정을 CI라고 한다.

CD(Continuous Deployment) : 지속적 배포

  빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정을 CD라고 한다.

  1. 스프링 부트와 CI 적용 전

  스프링 부트를 도입하기 전 EC2에 웹 어플리케이션을 실행하기 위해 톰캣, mysql, java 를 설치했다.
  어떤 방식으로 배포했냐면 이클립스에서 스프링 MVC 프레임워크로 만든 웹 프로젝트를 war 파일로 export 한 뒤
  해당 파일을 배포할 서버로 보내주고 실행시킨다. 만약 기능이 추가되면 다시 war파일을 만든 뒤 다시 서버로 보내서 실행시켰다.
  기능은 자주 수정되는게 이런식으로 옮기는 건 귀찮은 작업이다.

  1. 스프링 부트, CI(지속적 통합) 적용 후

  스프링 부트로 전환했는데 톰캣이 내장되어 있어서 정말편했다! 서버에 톰캣 설치안해도 되서 편해졌고 EC2 서버에 Mysql 서버를
  설치하지 않고 RDS DB 서버를 따로 만들어서 웹 서버와 DB 서버를 분리했다. EC2에서는 Mysql client를 설치해 DB 자원을
  사용하면 된다. 그리고 배포는 Travis CI 서비스를 이용한다. Master 브랜치에 커밋 내역이 push 되면 travis ci는 깃허브에 올려진
  코드를 빌드하고 빌드된 파일을 S3에 업로드를 한다. codedeploy는 빌드된 파일을 가져와서 배포를 한다.
  개인 프로젝트를 배포 할 때는 사용자가 사용하는 것이 아니라 웹 어플리케이션이 멈춰도 문제가 없지만 실제 서비스를 할 때에는
  배포할 때 중단되서는 안된다. 무중단 배포를 위해 nginx 라는 서비스를 이용한다.

  1. Nginx 를 이용한 무중단 배포(CD)

  배포될 때 웹 어플리케이션이 중단되서 사용자가 서비스를 사용하지 못하는 상황에 대처해야한다. Nginx를 이용하면 무중단 배포를 할
  수 있다. 엔진엑스는 외부의 요청을 받아 백앤드 서버로 요청을 전달하는 리버스 프록시 기능을 가지고 있다.
  사용자가 서비스 주소로 접속하면 80 포트로 접속하게 된다. Nginx 는 리버스 프록시 기능으로 8082번 포트로 요청을 전달한다.
  ver1.1의 웹 어플리케이션은 Nginx와 연결되어있지 않기 때문에 요청받지 못하고 있는다. 만약 ver1.1가 배포를 진행하고 있을 때
  Nginx 는 ver1.0를 실행시키고 있으므로 서비스가 중단되지 않는다. ver1.1 배포를 끝내고 잘 실행이되면 nginx reload 명령어를 통해
  8082를 가리키던 것을 8083을 가리킨다. nginx reload는 0.1초면 완료되기때문에 서비스의 중단없이 배포할 수 있게된다!

📌 제가 이해한 내용을 바탕으로 작성된 글입니다. 틀린 내용이 있다면 댓글남겨주세요.

  

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함