개발자는 왜 쿠버네티스를 쓸까? | 세 번째 이유: 자동화된 롤아웃과 롤백

14 sec read

무중단 배포의 실현과 실수를 되돌리는 마법, Deployment

앞선 글들을 통해 쿠버네티스가 어떻게 컨테이너를 자동으로 배치하고, 서비스 간 안정적인 통신을 보장하는지 알아보았습니다. 이제 우리의 애플리케이션은 클러스터 위에서 훌륭하게 작동하고 있습니다.

하지만 개발은 멈추지 않습니다. 새로운 기능을 추가하고 버그를 수정한 ‘v2’ 버전을 사용자에게 선보여야 할 때가 왔습니다. 바로 이 순간, 모든 개발자와 운영자의 심장을 뛰게 하는 ‘배포’의 시간이 다가옵니다.


💬 개발자의 고민: “배포, 무섭지 않게 할 수 없을까요?”

전통적인 환경에서 배포는 매우 긴장되고 스트레스받는 작업이었습니다. 다음과 같은 고민들은 늘 개발팀을 괴롭혔습니다.

“새로운 버전의 애플리케이션을 배포해야 하는데, 서비스를 중단하지 않고 안전하게 할 수 있을까요? 새벽에 작업해야 하나요?”

“만약 새 버전에 치명적인 버그가 뒤늦게 발견되면 어떡하죠? 어떻게 그 많은 서버의 애플리케이션을 빠르게 이전 버전으로 되돌리죠?”

배포 한 번에 서비스 전체가 마비될 수 있다는 불안감은 개발 속도를 저해하고, 팀의 자신감을 떨어뜨리는 주된 원인이었습니다.


🔧 쿠버네티스의 해결책: 배포 자동화 로봇, ‘디플로이먼트(Deployment)’

쿠버네티스는 ‘디플로이먼트(Deployment)’라는 강력한 오브젝트를 통해 이 모든 배포 고민을 해결합니다. 디플로이먼트는 애플리케이션의 상태를 정의하고, 배포부터 업데이트, 롤백까지 모든 과정을 자동으로 관리하는 지휘관 역할을 합니다.

1. 무중단 롤링 업데이트 (Rolling Update)

디플로이먼트의 기본 배포 전략인 ‘롤링 업데이트’는 서비스 중단 없이 버전을 업그레이드하는 가장 우아한 방법입니다. 마치 벽돌 벽에서 낡은 벽돌을 하나씩 새것으로 교체하듯, 다음과 같은 순서로 점진적인 업데이트를 수행합니다.

  1. 새 버전(v2) 컨테이너를 하나 실행합니다.
  2. 새 컨테이너가 정상적으로 준비되면, 트래픽을 받기 시작합니다.
  3. 기존 버전(v1) 컨테이너 중 하나를 안전하게 종료합니다.
  4. 이 과정을 모든 컨테이너가 새 버전으로 교체될 때까지 반복합니다.

이 모든 과정이 자동으로 진행되므로, 사용자는 서비스 중단을 전혀 느끼지 못합니다.

2. 마법 같은 원클릭 롤백 (Rollback)

만약 배포된 v2 버전에 심각한 문제가 발견되었다면 어떻게 할까요? 쿠버네티스는 단 한 줄의 명령어로 이 모든 변경사항을 이전의 안정적인 버전으로 되돌릴 수 있는 ‘실행 취소’ 기능을 제공합니다.

# 'my-app' 디플로이먼트의 최근 변경사항을 취소하고 이전 버전으로 롤백합니다.
kubectl rollout undo deployment my-app

이 명령 하나면, 디플로이먼트는 롤링 업데이트의 역순으로 v1 컨테이너를 다시 띄우고 v2 컨테이너를 제거하여 시스템을 신속하게 복구합니다.

📘 Deployment 예시

개발자는 그저 디플로이먼트 YAML 파일에서 컨테이너 이미지 버전만 변경해주면 됩니다.

# 예시: my-app의 버전을 v2로 업데이트
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3 # 3개의 복제본을 유지
  strategy:
    type: RollingUpdate # 롤링 업데이트 전략 사용
  template: # Pod 템플릿
    spec:
      containers:
        - name: app
          image: my-app:v2 # 이미지 버전을 v2로 변경!

이 파일을 적용(kubectl apply -f)하는 순간, 쿠버네티스의 자동화된 롤아웃 프로세스가 시작됩니다.


🎁 개발자가 얻는 실질적인 혜택

쿠버네티스의 자동화된 롤아웃과 롤백 기능은 개발 문화 자체를 바꾸어 놓습니다.

무중단 배포: 더 이상 서비스 중단을 걱정하거나 새벽까지 기다릴 필요 없이, 업무 시간에도 자신 있게 배포할 수 있습니다.

신속한 장애 복구: 문제가 발생해도 단 한 줄의 명령어로 즉시 이전 상태로 복구할 수 있어, 장애 대응 시간이 획기적으로 단축됩니다.

배포 자신감 향상: 배포 실패에 대한 두려움이 줄어들어, 팀은 더 자주, 더 빠르게 새로운 기능을 사용자에게 전달할 수 있습니다. (DevOps 문화의 핵심!)

결론적으로, 쿠버네티스의 ‘디플로이먼트’는 배포를 더 이상 특별하고 위험한 이벤트가 아닌, 일상적이고 예측 가능한 작업으로 만들어주는 핵심적인 기능입니다.

쿠버네티스 시크릿 관리, 어떤 방법이 최선일까? 4가지 방식 장단점…

쿠버네티스에서 애플리케이션을 운영할 때, DB 접속 정보나 API 키 같은 민감한 정보, 즉 ‘시크릿(Secret)’을 어떻게 관리해야 할지는 모두의 공통된 고민입니다. 관리 방식은 보안, 운영...
eve
13 sec read

[MSA] Spring Cloud Gateway VS Apache APISIX : 단계별…

마이크로서비스 아키텍처(MSA)에서 API 게이트웨이는 시스템의 관문 역할을 하는 핵심 컴포넌트입니다. 수많은 Java 개발팀이 Spring 생태계와의 완벽한 통합성을 자랑하는 Spring Cloud Gateway를 선택해왔습니다. 그러나 시스템이...
eve
1 min read

[Kafka] 카프카의 심장: 토픽, 파티션, 프로듀서, 컨슈머 완벽 해부

Apache Kafka가 어떻게 대용량 데이터를 실시간으로, 그리고 안정적으로 처리할 수 있는지 궁금하신가요? 그 비밀은 Kafka를 구성하는 핵심 요소들의 유기적인 협력에 있습니다. Kafka는 마치 잘...
eve
1 min read