STUDY

CI/CD Jenkins Docker Kubernetes

Lim임 2025. 12. 17. 17:10

CI / CD란 무엇인가 (출발점)

CI와 CD는 도구가 아니라 개발 문화와 흐름이다.

 

CI(Continuous Integration)는
여러 개발자가 작성한 코드를 자주 병합하고
자동으로 빌드와 테스트를 수행해
문제를 초기에 발견하는 것을 목표로 한다.

 

CD(Continuous Delivery / Deployment)는
검증된 코드를
언제든지 서비스 환경에 배포할 수 있도록 자동화하는 것을 의미한다.

 


CI는 “잘 합쳐졌는가”
CD는 “안전하게 나갈 수 있는가”에 대한 이야기다.


왜 CI / CD가 필요해졌는가

수동 배포의 문제는 명확하다.

 

사람이 직접 빌드
환경마다 결과가 다름
배포 중 실수 발생
서비스 중단 가능성

 

CI / CD는
이 모든 과정을 기계가, 동일한 방식으로, 반복 가능하게 만든다.


Docker의 목적과 필요성

Docker는 실행 환경 문제를 해결하기 위해 등장했다.

CI에서 빌드를 해도
서버 환경이 다르면 결과가 달라질 수 있다.

 

Docker는
애플리케이션과 실행 환경을 하나의 이미지로 묶어
어디서 실행하든 동일한 결과를 보장한다.

 

Docker의 역할은 명확하다.

“이 코드는 이런 환경에서 이렇게 실행된다”를
하나의 산출물로 만드는 것

 

CI / CD 관점에서 Docker는
빌드 결과물의 표준 포맷이다.


Kubernetes의 목적과 필요성

Docker만으로는
컨테이너 하나를 실행하는 데는 충분하다.

하지만 실제 서비스는 다르다.

 

컨테이너 여러 개
트래픽 증가
서버 장애
무중단 배포
자동 확장

 

Kubernetes는
이런 운영 문제를 해결하기 위해 등장했다.

 

Kubernetes의 역할은
컨테이너를 “실행”하는 것이 아니라
운영하는 것이다.

 


몇 개를 띄울지
어디서 띄울지
죽으면 어떻게 할지
업데이트는 어떻게 할지

 

이 모든 결정을 자동으로 처리한다.


Jenkins의 목적과 필요성

Jenkins는
CI / CD 흐름을 실제로 실행하는 자동화 엔진이다.

CI / CD는 개념이기 때문에
그 자체로는 아무 일도 하지 않는다.

 

Jenkins는
“언제 무엇을 어떤 순서로 실행할지”를 정의하고
그걸 실제로 수행한다.

 

Jenkins의 핵심 역할은
파이프라인 오케스트레이션이다.


각각의 역할을 한 문장으로 정리하면

CI / CD
개발부터 배포까지를 자동화하자는 철학과 흐름

 

Docker
실행 환경을 포함한 배포 단위를 표준화

 

Kubernetes
컨테이너를 대규모로 안정적으로 운영

 

Jenkins
이 모든 과정을 자동으로 연결하고 실행


이 네 가지가 만나서 동작하는 실제 흐름

  1. 개발자가 코드를 push
  2. Jenkins가 CI 파이프라인 실행
  3. 코드 빌드 및 테스트 수행
  4. Docker 이미지 생성
  5. 이미지 레지스트리에 업로드
  6. Jenkins가 CD 단계 실행
  7. Kubernetes에 새 이미지 배포
  8. Kubernetes가 무중단으로 서비스 교체

이 흐름이 바로
현대 웹 서비스의 기본 배포 구조다.


관계성을 구조로 보면

CI / CD
→ “이렇게 흘러가야 한다”는 설계

Jenkins
→ 그 설계를 실제로 실행

Docker
→ 실행 가능한 결과물 제공

Kubernetes
→ 그 결과물을 안정적으로 운영

서로 대체 관계가 아니라
각자의 빈자리를 정확히 채우는 관계다.


프론트엔드 개발자 관점에서의 이해 포인트

React 코드를 작성하는 건 시작일 뿐이다.

CI
코드 품질을 자동으로 검증

 

Docker
내 앱이 서버에서 돌아갈 형태를 정의

 

Jenkins
이 모든 과정을 자동으로 연결

 

Kubernetes
실제 서비스로 끊김 없이 제공

 

이걸 이해하면
“프론트엔드도 배포를 이해하는 개발자”가 된다.


면접에서 통합해서 말하면 이렇게 된다

CI/CD는 개발부터 배포까지의 과정을 자동화하는 흐름이고,
Jenkins는 그 흐름을 실행하는 자동화 서버입니다.
Docker는 실행 환경을 포함한 배포 단위를 만들고,
Kubernetes는 그 컨테이너들을 안정적으로 운영합니다.