본문 바로가기
Cloud/Docker | K8s + CI, CD

[CI/CD][#0] Docker, K8s, CI/CD 활용해 무중단 배포하기 - Intro

by HelloJudy 2022. 5. 14.

0. 개요

칵테일 소개 웹 서비스 프로젝트

👉 GitHub Repo 확인하기

 

 

지난 3주간 2차 웹서비스 프로젝트를 진행했다.

이때, 1차 프로젝트 이후 학습한 Docker를 사용하여 배포를 진행했다.

 

확실히 1차 때 배포보다 좀 더 편리해졌다. 하지만 여기서 멈추면 안돼!

여전히 불편한 점이 있다. 자동화!

 

Docker를 사용하여 좀 더 배포 과정이 쉬워지기는 했지만 프로젝트 중간중간 

소스코드가 업데이트 되면 내가 다시 수동으로 image를 새로 빌드하고 docker hub에 push하고 

업데이트된 버전으로 다시 docker-compose를 띄웠다.

 

새로운 컨테이너를 올리기 위해 배포 과정을 중단해야했고 이 과정에서 

나는 중단하지 않고 자동으로 release할 방법이 필요했다.

 

또한, 여러 명의 개발자가 작업을 집중해서 하다보면 많은 수정이 일어난 후에 Merge가 이뤄지기도 했고

그렇게 Merge할 때는 각각의 개발자마다 가지고 있는 버전이 최신이 아닐 수 있어 충돌의 가능성도 높아졌다.

이런 불필요한 에너지 소모를 줄이고자 CI를 통해 테스트, 빌드의 자동화를 한다면

 

 

그래서 2차 프로젝트가 끝난 현재 시점에서

CI/CD를 공부하고자 한다.

 


1. Intro

 

📌 CI / CD

애플리케이션 개발 단계를 자동화하여 애플리케이션 개발을 보다 짧은 주기로 고객에게 제공하는 방법이며, 새로운 코드 통합으로 인해 개발 및 운영팀에서 발생하는 문제(일명 통합지옥(Integration hell))를 해결하는 솔루션이다.

 

1) CI

Continuous Integration (지속적인 통합)

 

  1. 코드 변경사항을 주기적으로 빈번하게 merge해야 한다.
  2. 통합을 위한 단계 (빌드, 테스트, 머지)의 자동화

이를 통해 여러명의 개발자가 동시에 프로그램을 개발할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

 

즉, CI는 빌드/테스트 자동화

 

 

2) CD

Continuous Delivery (지속적인 제공), Continuous Deployment (지속적인 배포)

 

CI를 통해 release 준비를 하고 그 다음 최종 배포를 거치게 된다.

 

애플리케이션 수동 배포 프로세스로 인한 프로세스 과부하 문제를 해결해준다.

 

즉, CD는 배포 자동화

 

 

✔️ tool 종류

  1. Jenkins : Buildkite
  2. GitHub Actions
  3. GitLab CI/CD
  4. CircleCI
  5. Argo CD

 

2. 지금부터

 

다양한 tool이 있다. 이 중에서 나는 Jenkins + kubernetes 를 활용해서 자동화 환경을 구축해보고자 한다.

반응형

댓글