[Infra] 배포한 서버에 CI/CD 적용하기(feat. Jenkins)

https://jihyun-devstory.tistory.com/47

 

[Infra] AWS EC2를 이용한 WAS 서버 배포

1. EC2 인스턴스 생성(1) AWS Region 서울로 설정IAM 사용자로 회원가입 후 로그인하면 아래와 같이 지역을 설정할 수 있다. 작성자는 Seoul로 설정했다. (2) 인스턴스 시작 버튼 누르기 EC2 서비스에 들

jihyun-devstory.tistory.com

 

 배포했던 서버에 CI/CD를 적용해보려 한다. 그 전에 CI/CD가 무엇인지, 왜 해야하는지, 어떤 방법이 있는지 알아보자.

 

1. CI/CD란?

그림1.png

 

(1) CI(Continuous Integration)

그림2.png

 

 CI란 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경을 말한다. 대표적인 예시로는 Github가 있다. 수 많은 Commit이 쌓이면 기능별로 빌드/테스트/통합하는 것은 번거롭기 마련이다. 이러한 상황에 자동화 된 빌드 및 테스트는 새로운 코드의 변경사항에 대한 충돌 등을 방어할 수 있다.

 

(2) CD(Continuous Delivery / Continuous Deployment)

그림1.png

 

 Continuous Delivery란 개발자들이 애플리케이션에 적용한 변경사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드 되는 것을 말한다. 운영팀이 이 리포지토리에서 애플리케이션을 실시간 운영환경으로 배포할 수 있다. 개발팀과 비즈니스팀 간의 가시성과 커뮤니케이션 부족 문제를 해결할 수 있다는 대표적 장점이 있다.

 Continous Deployment란 개발자의 변경사항을 리포지토리에서 고객이 사용 가능한 운영환경까지 자동으로 Release 하는 것을 말한다. 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결할 수 있다.

 

2. CI/CD가 필요한 이유

(1) 개발자 생산성 향상

 CI/CD를 통해 개발자가 수동 작업에 대한 부담을 덜 수 있다. 또한 고객에게 제공되는 오류 및 버그 수를 줄일 수 있다.

 

(2) 더 빠르게 버그를 발견 및 해결

 테스트를 조금 더 빈번하게 수행함으로써 팀에서는 이후에 더 큰 문제를 발견하기 전에 버그를 조기에 발견 및 해결할 수 있다.

 

(3) 더 빠르게 업데이트 제공

 조금 더 빠르고, 조금 더 빈번하게 고객에게 업데이트를 제공할 수 있다.

 

3. CI/CD 툴

스크린샷 2024-12-28 오후 3.38.09.png

 

 CI/CD 툴의 대표적인 예로는 Jenkins와 GitLab 등이 있다. 각각의 장단점들이 존재하지만 작성자는 가장 많이 사용하는 Jenkins를 직접 사용해볼 예정이다.

 

호스팅 방식으로는 대표적으로 On-Promis와 Cloud가 존재하는데 각각의 장단점은 다음과 같다.

 

(1) On-premise

 On-premise는 직접 설치해서 관리하는 방식이다. On-premise 방식에서 사용되는 대표적인 플랫폼은 Jenkins이다. 오픈소스이고 무료라는 장점이 있다.

 

장점

  • 직접적인 추가 비용이 많이 들지 않음
  • 필요한 프로그램이나 스크립트를 마음대로 실행할 수 있음

단점

  • 직접 설치해서 사용해야해서 디바이스 관리가 필요함
  • 캐시 용량이 가득차면 한 번씩 초기화 해야 함
  • 보통 물리 서버 1대를 사용하는데, CPU, RAM 리소스의 한계가 있기 때문에 여러 Job을 실행시키기 어려움

 

(2) Cloud

 마찬가지로 많은 곳에서 클라우드 방식도 사용하고 있다.

장점

  • 개발 환경을 관리하기 쉬움(기본 제공되는 도커 이미지들에서 선택해서 사용할 수 있음)
  • 여러 Job을 병렬로 실행시킬 수 있(빌드를 위해 가상 서버를 띄워서 사용하기 때문에 여러 Job을 동시에 실행해도 충돌이 나지 않음)
  • 물리 서버를 관리하지 않아도 됨

단점

  • CI를 열심히 사용할 수록 비용이 증가함
  • 하나의 플랫폼에 의존되면 다른 플랫폼으로 넘어가기 어려움(CI 실행을 위한 설정 파일이 플랫폼 마다 다름)

 

4. Jenkins를 이용한 CI/CD 적용

 

 

참고 자료

https://medium.com/@hongseongho/ci-cd-%ED%94%8C%EB%9E%AB%ED%8F%BC%EA%B3%BC-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-8ca07a16933c

 

CI/CD 플랫폼과 기본 개념 알아보기

이번 글에서는 CI/CD가 무엇인지, 어떤 CI 플랫폼이 있는지, 동작을 이해할 때 도움되는 용어들을 알아보겠습니다.

medium.com

 

https://gong-story.tistory.com/40

 

AWS EC2 + Jenkins + Github 활용한 Spring Boot CI/CD 구축

이번 포스팅에서는 AWS EC2서버에 젠킨스와 Github를 연동하여 Spring Boot 프로젝트가 자동 배포되도록 CI/CD를 구축해 보려고 합니다. 전 회사에서는 gitlab에 push후에 젠킨스에 들어가서 배포 버튼을

gong-story.tistory.com