수동 배포의 악몽을 끝내는 GitOps 완벽 가이드

2026. 6. 3. 08:00IT_Tech

반응형
수동 배포의 악몽을 끝내는 GitOps 완벽 가이드

어느 화요일 오후, 우리가 마주한 서늘한 공포

인프라를 관리하다 보면 누구나 한 번쯤 심장이 덜컥 내려앉는 순간이 있습니다. 분명 어제 테스트 서버에서는 완벽하게 돌아갔는데, 운영 서버에 반영하자마자 사이트가 먹통이 되는 상황이죠. 급하게 터미널을 열어 로그를 뒤지고, 수동으로 바꿨던 설정 파일 한 줄이 문제였다는 걸 깨달았을 때의 그 허망함... 다들 공감하시죠?

어느 화요일 오후, 우리가 마주한 서늘한 공포

🚨 수동 운영의 3대 빌런

  • 구성 드리프트(Configuration Drift): 실제 서버 설정이 우리가 문서로 기록해둔 것과 조금씩 달라지는 현상.
  • 인적 오류(Human Error): "아, 그 서버만 환경 변수를 안 바꿨네?" 하는 깜빡임.
  • 재현 불가능성: 지금 운영 중인 서버와 똑같은 환경을 다시 만들라면... "글쎄요?" 소리가 절로 나옵니다.

이런 문제들을 해결하기 위해 우리는 예전부터 CI/CD 파이프라인을 구축해왔습니다. 하지만 CI/CD만으로는 부족했습니다. 애플리케이션 코드는 자동 배포되지만, 그 앱이 담길 '그릇'인 인프라 설정은 여전히 누군가의 손길을 필요로 했으니까요. 여기서 등장한 구원투수가 바로 GitOps입니다.

Git이 곧 명령서가 되는 마법

GitOps는 아주 단순하지만 강력한 철학에서 시작합니다. "인프라의 현재 상태를 Git에 있는 코드와 똑같이 만든다"는 것이죠. 우리가 흔히 쓰는 Git이 인프라를 지휘하는 지휘봉이 되는 셈입니다.

Git이 곧 명령서가 되는 마법
📜

선언적 설명

"서버 3대 띄워줘"라고 명시합니다. 어떻게 띄울지는 시스템(Kubernetes)이 알아서 합니다.

🔍

단일 진실 원천

Git 저장소가 곧 실제 서버의 설계도입니다. 서버에 접속할 필요 없이 Git만 보면 됩니다.

🤖

자동 동기화

ArgoCD 같은 도구가 Git과 서버를 계속 비교하며, 차이가 발생하면 즉시 일치시킵니다.

기존의 배포 방식이 개발자가 운영 서버로 코드를 '밀어넣는(Push)' 방식이었다면, GitOps는 운영 서버가 Git의 코드를 '당겨오는(Pull)' 방식입니다. 이 작은 차이가 보안과 안정성 면에서 엄청난 변화를 가져옵니다. 서버 배포 권한을 사람이 가질 필요가 없으니까요.

직접 따라해보는 GitOps 워크플로우

백문이 불여일견이죠. 실제로 어떻게 돌아가는지 우리가 가장 많이 사용하는 GitHub + Kubernetes + ArgoCD 조합으로 시뮬레이션을 해봅시다.

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-cool-app
spec:
  replicas: 3  # 현재 서버 3대를 운영하겠다고 선언!
  template:
    spec:
      containers:
      - name: web
        image: my-app:v1.0.0 # 버전 업데이트를 여기서 합니다.

🚀 배포 4단계 과정

배포 4단계 과정
  1. 코드 수정: 개발자가 위 YAML 파일의 image 태그를 v2.0.0으로 수정합니다.
  2. PR 및 리뷰: GitHub에 Push하고 Pull Request를 올립니다. 동료들은 코드를 보며 "메모리 설정은 괜찮나?" 등을 검토합니다.
  3. Merge (승인): PR이 합쳐지는 순간, GitOps 도구인 ArgoCD가 알람을 받습니다.
  4. Reconciliation (조정): ArgoCD가 쿠버네티스에게 말합니다. "야, 지금 서버는 v1인데 Git은 v2래. 빨리 v2로 바꿔!" 쿠버네티스는 즉시 롤링 업데이트를 시작합니다.

이 과정의 핵심은 서버에 직접 접속한 사람이 아무도 없다는 것입니다. 모든 변경 이력은 Git에 남고, 장애가 나면 git revert 한 번으로 즉시 이전 상태로 돌아갈 수 있습니다. 든든하지 않나요?

은탄환은 없다: GitOps 도입 전 체크리스트

세상에 완벽한 기술은 없습니다. GitOps를 도입할 때 가장 많이 하는 실수와 주의해야 할 점들을 정리해 드릴게요.

  • 비밀번호 관리는 어떻게? (Secret Management): Git에 DB 비밀번호나 API 키를 그냥 올리면 절대 안 됩니다! DevSecOps 가이드에서 언급했듯, Sealed Secrets나 Vault 같은 도구를 반드시 병행해야 합니다.
  • 의존성 지옥: 인프라 설정이 복잡해지면 Helm이나 Kustomize 같은 도구를 쓰게 되는데, 이때 파일 구조를 깔끔하게 관리하지 않으면 나중에 Git 저장소가 쓰레기통이 될 수 있습니다.
  • 동기화 지연: Git에 푸시하고 실제 서버에 반영되기까지 몇 초에서 몇 분의 지연이 발생할 수 있습니다. 1분 1초가 급한 장애 상황에서는 이 지연이 답답하게 느껴질 수 있죠.

자주 묻는 질문 (FAQ)

Q. 쿠버네티스(K8s)가 꼭 있어야 하나요?

꼭 그런 건 아니지만, GitOps는 선언적 인프라에 최적화되어 있어 쿠버네티스와 찰떡궁합입니다. Terraform을 이용해 AWS나 Azure 자원을 관리하는 방식도 넓은 의미의 GitOps에 포함됩니다.

Q. Jenkins와 같은 기존 CI 도구와 무엇이 다른가요?

Jenkins는 '명령' 기반(이거 해, 저거 해)이라면, GitOps 도구는 '상태' 기반(지금 상태가 이거여야 해)입니다. 훨씬 더 안정적이고 자동 복구 능력이 뛰어납니다.


함께 읽으면 좋은 글

오늘도 안정적인 운영을 위해 고군분투하는 모든 엔지니어를 응원합니다.
GitOps와 함께라면 여러분의 주말은 더 평화로워질 거예요!

#GitOps #데브옵스 #DevOps #쿠버네티스 #ArgoCD #CI_CD #인프라자동화 #IaC #클라우드운영 #백엔드개발 #IT엔지니어 #자동배포

반응형