hello

GitLab에서 제작한 GitOps 초보자 가이드

image

소개

소프트웨어 애플리케이션의 복잡도가 증가함에 따라 인프라에 대한 요구도도 함께 증가하고 있습니다. 인프라 팀은 다양한 서비스를 빠르고 안정적으로 제공해야 하지만, 인프라 구축은 여전히 수동 프로세스에 의존하는 경우가 많습니다. 이 문제를 해결하기 위한 핵심 접근 방식이 인프라 자동화이며, 그중 하나가 GitOps입니다.


1. 인프라 자동화의 필요성

  • 애플리케이션 개발은 CI/CD로 자동화되었지만 인프라 관리에는 여전히 사람이 개입.
  • 인프라팀은 복잡한 환경을 빠르고 대규모로 구축해야 하는 과제를 가짐.
  • 수동 구성은 오류가 발생하기 쉽고 비효율적.

2. IaC(Infrastructure-as-Code)의 한계

  • Ansible, Terraform 같은 IaC 도구는 자동화의 좋은 출발점.
  • 그러나 IaC 실행을 자동화하는 명확한 워크플로가 필요.
  • DevOps는 하루에도 수백 번 배포가 가능하지만, 인프라는 여전히 수동 프로비저닝이 많음.

3. 클라우드와 인프라 자동화

  • 클라우드는 대규모 인프라를 일관적으로 자동화할 수 있도록 지원.
  • 하지만 클라우드 서비스가 복잡해지면서 수동 배포의 비효율성은 여전히 존재.
  • 스크립트를 통한 배포가 가능하지만 반복성·표준화·검증 측면에서 한계가 있음.

4. GitOps를 통한 인프라 자동화

GitOps는 DevOps 모범 사례(버전 관리, 코드 검토, CI/CD)를 인프라 운영에 적용합니다.

GitOps의 핵심 아이디어

  • 인프라를 코드(IaC) 로 정의하고 Git 저장소에서 버전 관리
  • 모든 변경은 Merge Request(MR) 를 통해 반영
  • CI/CD 파이프라인이 자동으로 인프라 상태를 원하는 상태로 맞춤
  • 구성 드리프트(Config Drift)가 자동으로 수정됨

5. GitOps의 등장 배경

5.1 인프라 관리의 역사

  • 온프레미스 환경에서는 서버 구축이 대부분 수동으로 이루어짐.
  • 확장 시 동일한 서버를 반복적으로 구성해야 했음.

5.2 구성 관리(CM) 도구의 발전

  • 1세대 CM 도구(Puppet, Chef)
    • 서버 설정을 자동화했지만, 클라우드 네이티브 환경에서는 제약.
  • 2세대 CM 도구(Ansible, SaltStack)
    • VM 프로비저닝과 설정에는 유용하지만, 클라우드 네이티브 서비스 지원은 부족.

5.3 클라우드 네이티브 대응 도구

  • CloudFormation, ARM → 특정 클라우드에 종속.
  • Terraform → 멀티 클라우드 지원, 코드 버전 관리/검토 가능.

6. GitOps의 작동 방식

6.1 GitOps란?

  • Git 리포지토리를 단일 진실 소스(SSOT)로 사용하는 인프라 관리 방식.
  • 원하는 상태를 YAML/JSON으로 선언적으로 정의.

6.2 GitOps 주요 특징

  • IaC 정의: JSON/YAML 기반 선언적 코드
  • 버전 관리: Git이 변경 이력을 모두 추적
  • MR 기반 변경: 변경 사항은 병합 요청을 통해 승인
  • CI/CD 자동화: 코드 병합 시 자동으로 인프라 업데이트
  • 구성 드리프트 방지: 실제 상태와 코드가 불일치하면 자동 교정

7. GitOps의 장점

  • 협업 향상: 모든 변경은 MR을 통해 투명하게 관리
  • 배포 속도 향상: 수동 클릭 대신 코드 기반 자동화
  • 감사 용이성: 변경 이력이 Git에 축적
  • 위험 감소: 변경 롤백 가능, 코드 리뷰 기반 오류 예방
  • 오류 최소화: 반복 가능한 코드 기반 구성
  • 비용 절감: 자동화로 인력/시간/클라우드 리소스 절약
  • 보안 강화: CI/CD만 클라우드에 접근하면 됨
  • 규정 준수 개선: MR 프로세스를 통한 변경 관리

8. 일반적인 GitOps 도구

  • GitOps는 특정 제품이 아니라 프로세스와 문화에 가까움.
  • 주로 사용되는 기술:
    • Terraform
    • Ansible
    • Kubernetes
    • Git
    • CI/CD (GitLab CI, GitHub Actions, Jenkins 등)

9. GitOps와 Kubernetes

  • Kubernetes는 GitOps와 최적의 조합:
    • 컨테이너 기반 불변 인프라
    • 멀티 클라우드 지원
    • YAML 기반 선언적 구성
  • Terraform을 통해 클러스터/DB/네트워크 등 인프라까지 프로비저닝 가능.

10. 기존 클라우드 인프라에서의 GitOps

  • Kubernetes가 아니어도 GitOps 적용 가능.
  • VM 기반 환경에서도 Terraform + Ansible 조합으로 구성 가능.

11. GitOps 도입 모범 사례

11.1 모든 인프라를 코드로 정의

  • 선언적 방식 선호 (원하는 상태를 정의)
  • 기존 인프라를 IaC로 역설계(import) 필요

11.2 단계적 구현

  • 처음부터 모든 인프라를 자동화할 필요 없음
  • 점진적으로 GitOps로 이동

11.3 자동화할 수 없는 작업은 문서화

  • 외부 시스템, 수동 승인 등은 문서로 관리
  • 문서도 Git에 포함하여 저장/검토

11.4 코드 검토 및 MR 프로세스 구축

  • 필수 리뷰어 설정
  • 초기에는 “선택적 검토”, 이후 “필수 검토” 도입
  • GitLab 오픈소스 규칙 참고 가능

11.5 다수 환경(DTAP) 운영

  • Dev → Test → Approval → Prod 순으로 점진적 배포
  • 불변 이미지 사용을 권장하여 구성 드리프트 최소화

11.6 CI/CD를 클라우드 리소스의 단일 접근 지점으로 설정

  • 개발자가 직접 클라우드 환경에 접근할 필요 제거
  • 사고 방식 전환: 직접 접근 → 자동화 파이프라인 중심

11.7 리포지토리 전략 수립

  • 하나의 리포지토리 or 서비스별 리포지토리
  • 고려 사항:
    • 보안
    • 종속성
    • 규모
  • Git branch 전략(Feature Branching) 활용

11.8 변경 사항을 작게 유지

  • 작은 커밋 단위는 이해/검토/롤백이 쉬움

12. GitOps + Terraform 기반 CI/CD

12.1 코드 검증 단계

  • terraform validate
  • JSON/YAML 린터 실행
  • 검증 실패 시 빌드 중단 및 알림

12.2 배포 단계

  • terraform apply
  • CloudFormation의 update-stack 등 활용
  • 인프라 상태를 선언한 코드와 일치시키는 자동화

13. 참고 예시

  • GitOps-Demo Group
    • Terraform 보안 권장 사항
    • 주요 클라우드 제공업체별 코드 샘플
    • 데모 재현 가이드 제공

14. 인프라 자동화의 미래

  • GitOps는 기존 IaC를 DevOps 워크플로에 자연스럽게 통합한 방식.
  • 자동화·반복성·표준화·보안성을 크게 개선.
  • 인프라 유지관리를 자동화하여 개발 배포 주기와 동일한 속도를 유지 가능.
  • 수동 접근을 최소화하여 보안 강화.

결론

GitOps는 인프라를 코드로 정의하고 Git 기반 프로세스를 통해 자동화하는 강력한 접근 방식입니다. 이를 통해:

  • 빠르고 일관된 인프라 배포
  • 안전하고 투명한 변경 관리
  • 높은 개발자 경험
  • 비용 절감 및 운영 효율성 향상

을 실현할 수 있습니다.

Read more

TCP 공부하기

TCP(전송 제어 프로토콜) 개요 TCP는 불안정한 네트워크 환경에서도 신뢰성 있고 순서가 보장된 데이터 전송을 가능하게 하는 핵심 인터넷 프로토콜이다. IP가 호스트 간 패킷 전달만을 담당한다면, TCP는 포트 기반 프로세스 간 통신, 오류 복구, 재전송, 순서 제어를 제공한다. 흐름 제어와 혼잡 제어를 통해 TCP는 수신 버퍼와 네트워크 대역폭의 고갈을 방지한다.

By JHL

Builder.AI 의 몰락

한때 15억 달러의 가치를 인정받으며 AI 혁신의 선두주자로 불렸던 영국 스타트업 Builder.ai가 충격적인 진실과 함께 파산 위기에 직면했습니다. 마이크로소프트와 소프트뱅크 같은 거대 기업들로부터 4억 4,500만 달러라는 천문학적 투자를 받았던 이 회사가 어떻게 이런 상황에 이르게 되었는지, 그리고 그 뒤에 숨겨진 충격적인 진실을 파헤쳐보겠습니다. 화려했던 시작: "AI가 모든

By JHL

Dify 소개

DEMO Link Dify란? Dify는 오픈소스 기반의 LLM 애플리케이션 개발 플랫폼으로, 생성형 AI 서비스를 구축하는 데 필요한 다양한 기능을 제공합니다. 주요 특징은 다음과 같습니다 노코드/로우코드 개발: 직관적인 웹 UI를 통해 복잡한 코드 작성 없이도 AI 애플리케이션을 개발할 수 있습니다. 필요시 API를 활용한 커스터마이징도 가능합니다 . 다양한 LLM 지원: OpenAI의 GPT 시리즈,

By JHL

AI 시대, 개발자 스킬 위축을 피하는 법 (Avoiding Skill Atrophy in the Age of AI) - 초보자도 쉽게 이해하는 가이드

ChatGPT, GitHub Copilot 같은 AI 코딩 도구가 등장하면서 개발자들의 작업 방식은 크게 바뀌고 있습니다. 코드 자동완성, 버그 수정, 문서 요약, 리팩터링까지… 반복적이고 지루한 작업은 AI가 척척 처리해주고, 개발자는 더 빠르게 더 많은 일을 할 수 있게 되었죠. 하지만 이런 편리함 뒤에는 한 가지 위험이 숨어 있습니다. 너무 편한 AI에 의존하다

By JHL