[K8s] 인프라 배포의 패러다임 시프트: GitOps와 OCI 레지스트리의 이해

2026. 7. 15. 22:27·▣ Infra & DevOps/Kubernetes🚢
728x90
반응형

이번 글에서는 전통적인 CI/CD 방식의 한계를 극복하기 위해 등장한 GitOps(깃옵스) 패턴과, 최근 GitOps의 단일 진실 공급원(Source of Truth)으로 새롭게 주목받고 있는 OCI(Open Container Initiative) 레지스트리의 개념을 정리해 봅니다.


1. Push형 가고 Pull형 온다: 전통적 CD와 GitOps의 차이

기존의 전통적인 배포 방식(Jenkins, GitLab CI 등)은 가상 머신(VM)이나 서버에 원격으로 접속해 배포 스크립트를 실행하는 Push 방식이었습니다.

  • 전통적인 Push 방식: CI/CD 툴이 K8s 클러스터의 API 권한(kubeconfig 등)을 직접 가지고, 밖에서 클러스터 안으로 kubectl apply -f deployment.yaml 명령을 밀어 넣는(Push) 형태입니다.
  • 문제점: 외부의 CI/CD 툴이 클러스터의 막강한 관리자 권한을 상시 보유해야 하므로 보안상 취약점이 생깁니다. 또한 누군가 실무에서 kubectl로 직접 설정을 바꾸면, Git 레포지토리의 코드와 실제 인프라의 상태가 불일치하는 현상이 발생합니다.

이 문제를 해결하기 위해 등장한 개념이 바로 GitOps이며, 이를 구현한 대표적인 오픈소스가 Argo CD와 Flux입니다. GitOps는 Pull 방식을 사용합니다.

Push형 CD vs Pull형 GitOps 비교

  • 작동 원리: K8s 클러스터 내부에 배포된 GitOps 에이전트(예: Argo CD)가 지정된 Git 레포지토리를 계속 감시(Polling)합니다. Git에 저장된 YAML 파일과 현재 클러스터의 상태가 다르면, 에이전트가 클러스터 내부에서 스스로 변경 사항을 당겨와(Pull) 싱크를 맞춥니다.
  • 장점: 클러스터 외부로 배포 권한을 노출할 필요가 없어 보안이 극대화됩니다. 인프라의 모든 변경 이력이 Git 커밋 로그로 남기 때문에 추적과 롤백이 매우 정교해집니다.

2. "OCI is not Git": 왜 GitOps의 저장소로 OCI를 고민할까?

GitOps 환경이 성숙해지면서, 대규모 인프라를 관리하는 엔지니어들 사이에서 새로운 화두가 던져졌습니다. 바로 "쿠버네티스 명세서(YAML)를 반드시 Git 레포지토리에만 저장해야 하는가?"에 대한 의문입니다.

 

여기서 등장한 개념이 OCI(Open Container Initiative) 아티팩트 활용입니다.

 

원래 OCI 레지스트리(예: Docker Hub, AWS ECR, GitLab Container Registry 등)는 'Docker 이미지'를 저장하는 공간이었습니다. 하지만 OCI 스펙이 발전하면서, 이제는 이미지뿐만 아니라 K8s YAML 파일, Helm 차트 등 클라우드 네이티브 환경의 모든 정적 아티팩트를 묶어서 버저닝하고 저장할 수 있게 되었습니다.


💡 Git 저장소 대신 OCI 레지스트리를 활용할 때의 이점

  • 대규모 커밋으로 인한 Git 오버헤드: 수백 개의 마이크로서비스가 배포될 때마다 GitOps 배포용 Git 레포지토리에 수많은 자동 커밋이 발생합니다. 이는 Git 서버의 성능 저하와 API 레이트 리밋(Rate Limit) 문제로 이어집니다.
  • 보안 및 접근 제어의 한계: 배포 명세서에 접근해야 하는 에이전트가 늘어날수록 Git 레포지토리 자체의 접근 권한 관리가 복잡해집니다.
  • 불필요한 변경 이력의 비대화: 소스 코드가 아닌 컴파일된 배포본(YAML 결과물)의 단순 텍스트 변경 이력이 Git 히스토리에 무겁게 쌓이게 됩니다.

이러한 한계를 극복하기 위해, CI 파이프라인에서 렌더링이 완료된 최종 K8s 배포 명세서(YAML)를 OCI 아티팩트 패키지 형태로 빌드하여 이미지 레지스트리에 푸시하고, K8s 클러스터 안의 GitOps 에이전트(Flux 등)는 이 OCI 레지스트리를 '단일 진실 공급원(Source of Truth)'으로 바라보고 동기화하는 아키텍처가 대안으로 부상하고 있습니다.


3. 요약: 현대적인 배포 파이프라인의 모습

OCI 레지스트리 기반 GitOps 파이프라인

 

결국 배포 자동화의 미래는 "모든 산출물을 OCI라는 표준 규격으로 패키징하고, 클러스터 내부의 에이전트가 이를 안전하게 당겨와 스스로 동기화(GitOps)하는 구조"로 수렴하고 있습니다.

728x90
반응형
'▣ Infra & DevOps/Kubernetes🚢' 카테고리의 다른 글
  • [K8s] 상태가 있는(Stateful) 데이터를 위한 스토리지 전략: PV, PVC와 StatefulSet
  • [K8s] 눈을 가리고 운전할 수는 없다: K8s 옵저버빌리티(Observability)와 AIOps의 도래
  • [K8s] 외부 트래픽 라우팅의 진화: Ingress에서 Gateway API까지
  • [K8s] 스프링부트 개발자를 위한 쿠버네티스 생존 가이드
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (1025) N
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (30)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ Infra & DevOps (20) N
        • LGTM Stack🔭 (5)
        • Kafka🐦‍🔥 (0)
        • Kubernetes🚢 (9) N
        • KubeCon Japan 2026⚓ (6)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (49)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (5)
        • 오늘가챠🃏 (8)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (80)
        • 백준(BOJ)👨🏻‍💻 (71)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
      • ◈ Study (129)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 알고리즘(Algorithm)🎡 (14)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (11)
        • 인공지능 AI🛸 (8)
      • ◈ 공부모임 (57)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (17)
        • 국가기술자격 서포터즈🌻 (12)
      • ◈ 자격증 공부 (48)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 정보보안기사⚜️ (11)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (124)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (55)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 반응형
    250x250
  • 태그

    Database
    SQL
    백준 티어
    Project
    Error Note
    CSS
    일상
    코딩 테스트
    코딩
    백준
    프로그래밍
    javascript
    Java
    spring boot
    자바스크립트
    꿀팁
    spring
    jsp
    Oracle
    BOJ
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[K8s] 인프라 배포의 패러다임 시프트: GitOps와 OCI 레지스트리의 이해
상단으로

티스토리툴바