비교적 최근 등장한 GitOps는 DevOps를 좀 더 구체적으로 실현하기 위해 등장한 방법론입니다. 특히 이름에서도 알 수 있듯이, Git을 중심으로 DevOps 원칙을 구현하죠.

전세계적으로 클라우드 네이티브 생태계를 관리하는 CNCF에서 이런 GitOps 자격증을 릴리즈했습니다. 정식 명칭은 GitOps Certified Associate이며, 줄여서 CGOA라고 합니다.

최근 좋은 기회로 저도 CGOA 시험을 응시하게 되었는데요. 감사하게도 합격이라는 좋은 결과를 얻었습니다.

아마 GitOps에 대해 더 깊이 공부하려는 분들뿐만 아니라, Golden Kubestronaut 타이틀을 취득하려는 분들도 CGOA 시험을 고려하고 계실 겁니다.

Golden Kubestronaut은 기존의 CNCF의 Kubernetes 자격증 5개를 모두 취득하면 부여되는 Kubestronaut 타이틀의 상위 버전으로, 8개의 CNCF 자격증을 추가로 취득하면 부여되는 타이틀이거든요. 이 요구조건 중에 CGOA 자격증도 포함되고요.

이번 아티클에선 바로 지난주에 CGOA 시험을 응시하면서 마주쳤던 핵심 개념, 그리고 자주 등장했던 용어들을 콕 찝어서 알려드리겠습니다.

CGOA는 객관식 시험이지만 기본 언어가 영어이기 때문에, 핵심 개념과 용어에 익숙해져야 시험의 허들을 낮출 수 있거든요.

이번 주제는 물론 CGOA 시험을 준비하시는 분들께 도움이 되겠지만, 거기서 끝이 아닙니다.

CGOA에서 자주 나온다는 것은 클라우드 네이티브 생태계를 관리하는 CNCF에서 중요하게 여기는 개념이란 뜻이기 때문에, GitOps에 대해 빠르게 파악하고 싶으신 분께도 본 아티클에서 다룰 내용이 크게 도움될 것이라 믿습니다.

팀에서 협업할 때, 혹은 AI를 활용해서 배포 자동화를 구현할 때 GitOps의 핵심 원칙이나 개념을 적용해보실 수도 있을 겁니다.


GitOps 핵심 원칙은 아무리 강조해도 부족하다

CGOA에서 GitOps 핵심 원칙 4가지는 필수로 숙지해야 할 개념입니다. 이 4가지만 이해하신다면 시험에 등장하는 문제의 30%는 어렵지 않게 풀 수 있으실 테니까요. 물론 실제 프로젝트에 GitOps를 적용하려는 분들에게도 핵심 원칙 숙지는 중요합니다.

1. Declarative

(Elasticsearch 애플리케이션을 Kubernetes Statefulset으로 배포하는 YAML 파일 예시)

애플리케이션이 배포되는 전체 시스템의 최종 상태를 선언적으로(Declarative) 정의하는 것이 GitOps의 첫 번째 핵심 원칙입니다.

‘어떻게’ 도달할지를 기술하는 절차적 방식과 달리, ‘무엇’이 되어야 하는지를 명시하는 방식이 바로 선언적 정의인데요.

Kubernetes의 리소스를 정의(예: Replica 수, CPU 할당량)하는 YAML 양식 파일이 선언적 정의의 대표적인 예시이죠. GitOps는 이렇게 선언된 상태를 기준으로 클러스터를 관리합니다.

2. Versioned and Immutable

(출처: https://maxat-akbanov.com/gitops-principles-visualized)

GitOps에서 시스템의 최종 상태에 대한 모든 정보는 Git 저장소에 저장되고 관리됩니다. 인프라 관리에 필요한 코드와 Kubernetes 리소스 매니페스트 파일들이 그 대상이 되겠죠.

Git은 단일 진실 공급원(Single Source of Truth, SSoT)으로서, 모든 변경 사항은 Git 커밋을 통해 기록되고 추적되는데요.

이렇게 GitOps에서는 시스템의 변경사항이 기록(Versioned)되고, 새로운 커밋이 올라오지 않는 이상 시스템의 상태는 불변(Immutable)이어야 누가, 언제, 무엇을 변경했는지 명확하게 알 수 있으면서도 현재 시스템을 안정적으로 운영할 수 있게 됩니다.

3. Pulled Automatically

(출처: https://maxat-akbanov.com/gitops-principles-visualized)

전통적인 CI/CD가 외부에서 시스템으로 변경 사항을 밀어넣는(Push) 방식이었다면, GitOps는 시스템 내부에 설치된 에이전트가 Git 저장소로부터 시스템의 최종 상태를 알아서 당겨(Pull Automatically)와야 한다는 원칙입니다.

Argo CD나 Flux은 클러스터 내부에서 애플리케이션을 배포하는 툴이죠. 이런 툴을 GitOps에선 에이전트(Agent) 또는 컨트롤러(Controller)라고 하는데요.

이 툴들은 주기적으로 최종 상태가 저장되는 Git의 변경 사항이 있는지 확인하고 업데이트하거나, git push와 같은 특정 이벤트에 반응해서 시스템의 상태를 업데이트합니다. 그래서 이런 에이전트를 사용해서 시스템의 상태를 관리한다면 GitOps의 Pulled Automatically 원칙을 따르게 되는 겁니다.

그리고 Pull 방식은 외부 시스템에 클러스터 접근 권한을 부여할 필요가 없어 보안적으로 매우 유리하다는 장점도 있는데요. 시스템의 경계를 더욱 명확하게 하고 공격 표면을 줄이는 효과가 있기 때문입니다.

4. Continuosly Reconciled

(출처: https://maxat-akbanov.com/gitops-principles-visualized)

GitOps의 마지막 핵심 원칙은 시스템의 실제 상태(Actual State)가 Git에서 정의된 최종 상태(Desired State)와 일치하도록 지속적으로 조정(Continuosly Reconciled)해야 한다는 것입니다.

시스템 내의 에이전트(Argo CD나 Flux 등)는 두 상태를 끊임없이 비교하며, 만약 상태에 불일치(이것을 GitOps에서는 State Drift라고 합니다.)가 발생하면 이를 감지합니다.

그리고 상태 불일치를 해소하기 위해 에이전트는 Git에 저장된 최종 상태를 가져와 시스템에 다시 적용합니다. 바로 위의 Pulled Automatically 원칙에서 언급한 것처럼요.

이런 지속적인 조정 방식은 GitOps에서 시스템의 일관성과 안정성을 보장하는 핵심 메커니즘이라고 할 수 있습니다.


이번 글에서는 CGOA 시험 후기와 시험에 꼭 등장하는 GitOps의 핵심 원칙에 대해 알아봤습니다.

사실 본 아티클에서 여러분들께 시험에 등장하는 GitOps 관련 필수 용어와 방법론까지 더 자세히 설명하고 싶었는데요. 그렇게 하기엔 글 분량이 너무 길어질 것 같아 다음주에 나머지 필수 용어와 방법론까지 모두 다뤄보려 합니다.

제가 두 번에 걸쳐 공유드릴 내용은 GitOps 구현에 필수적인 지식이기 때문에, 위에서도 언급했지만 CGOA 시험을 준비하시는 분들과 프로젝트에 GitOps 방법론을 적용해보시려는 분들 모두에게 큰 도움이 될 것입니다.

그럼 저는 다음 아티클에서 CGOA에서 단골 출제되는 GitOps의 필수 용어와 방법론에 대해 공유해보겠습니다.

감사합니다.


참고 자료


이번 아티클은 어떠셨나요?

이번 글의 주제에 대해 어떻게 생각하는지 알려주세요! 더 나은 아티클을 전달해드리기 위해 아래 폼에서 짧은 피드백을 받고 있어요.

👉 피드백 보내기 (1~2분 소요)

여러분들의 소중한 의견은 Aiden’s Lab에 큰 힘이 됩니다!