클릭 몇 번으로 글로벌 배포: Kontrol 멀티 클러스터 지원기 (SRE 밋업 3회)
원문 정보
- 원문: 당근마켓 개발자 플랫폼: 클릭! 클릭! 글로벌로 향하는 멀티 클러스터 지원 스토리 | 당근 SRE 밋업 3회 (23:04)
- 매체 · 게시일: YouTube 당근 채널 · 2023-06-27
- 발표자: 유병화(Alfred). 슬라이드 표지에 인프라실 SRE팀 딜리버리 파트로 적혀 있습니다.
- 근거: YouTube 자동 자막(20:00 부근 구간 누락) + 발표 슬라이드
- 이 문서는 영상을 읽고 재구성한 요약이며 원문 자체가 아닙니다.
주요 구간
- 00:00 글로벌 배포 데모 영상
- 03:36 배경: ArgoCD와 Kontrol, OKR 설정
- 06:08 리전 설정 위치와 파이프라인 설계 선택
- 10:15 시스템 구조와 Stateless 파이프라인
- 17:20 방향 전환: GoCD에서 Argo Workflows로
- 21:58 개설과 이후 배포 현황
Kontrol 이전을 막던 리전 제약
당근 딜리버리 파트가 가장 중요하게 보던 일은 ArgoCD를 쓰는 서비스를 Kontrol로 옮기는 것이었습니다. 2022년 6월 당근은 두 도구로 배포하고 있었는데, ArgoCD는 한국·영국·캐나다·일본 4개 리전을 지원했고 Kontrol은 한국만 지원했습니다. Kontrol을 쓰고 싶은 개발자도 글로벌 배포가 필요하거나 앞으로 필요할 수 있어 이전을 주저했습니다. 딜리버리 파트는 이 제약을 풀기 위해 2022년 2분기부터 글로벌 배포 지원을 가장 높은 우선순위의 OKR로 잡았습니다.
설계 선택과 배포 엔진 교체
- 배포 승인은 마지막 단계에서 리전별로 받습니다. 동료와 개발팀은 모든 리전에 잘못된 버전이 한꺼번에 나가면 메트릭과 알림이 함께 흔들려 대응하기 어렵다고 봤습니다. 리전 간 일시적인 버전 차이는 허용하되, 오래 이어지면 UI나 알림으로 알리기로 했습니다.
- 빌드와 이미지 푸시를 맡는 준비 단계는 모든 리전이 공유합니다. 리전마다 실행하면 버전이 혼동될 수 있어 한 번만 실행하기로 했습니다.
- 배포 리전 목록은 Kontrol DB에 저장합니다. 프로젝트 저장소의 파일에서 리전을 지웠을 때 해당 리전의 서비스를 모두 내려야 하는지 모호하고, UI가 저장소 파일을 읽어 오는 방식도 부자연스럽다고 판단했습니다.
- 각 클러스터에는 GoCD 에이전트만 설치합니다. Kontrol과 GoCD를 리전마다 복제하지 않았습니다. 반복 수작업을 없애려고 만든 Kontrol을 수작업으로 늘리는 것은 모순이라고 판단했기 때문입니다.
글로벌 배포를 붙이면 GoCD 파이프라인이 프로젝트당 최대 9개로 늘어납니다. 상태는 Kontrol DB가 이미 알고 있어서, 당근은 Stateless 파이프라인을 만들었습니다. 실행마다 프로젝트·단계·리전 파라미터를 넘겨 파이프라인을 동적으로 생성하고, 실행을 마치면 삭제하는 방식입니다. GoCD가 기본 제공하던 기능은 Kontrol에서 직접 구현했습니다.
배포 상세 화면도 최대 9개 단계를 보여 줘야 하므로 단계별 페이지와 사이드바로 나눴습니다. 한 설정에 Secret이 최대 8개 붙으면서 환경변수 설정도 DB에서 관리하기 시작했습니다.
작업이 절반쯤 진행됐을 때, GoCD 대체 엔진으로 Argo Workflows를 조사하던 같은 파트 동료가 Argo Workflows에서 글로벌 배포를 구현하자고 제안했습니다. 발표자는 검증된 GoCD로 글로벌 배포를 출시한 뒤 엔진을 바꾸려 했으나, 두 변경을 함께 진행하는 편이 효율적이라는 의견을 받아들였습니다.
캐나다와 일본의 알파 환경에서는 AWS 계정이 달라 통신이 막혔습니다. 각 계정에 kontrol-admin 역할을 만들고 Assume해서 접근하는 방식으로 해결했습니다.
지원 이후 변화
- 작업별로 나눠 공개했으며, 글로벌 배포 지원은 2023년 3월 3일 개시
- Kontrol 이용 프로젝트: 2022년 6월 한국에서만 45개 → 2023년 6월 한국 129개, 영국·캐나다·일본 각 7개
- ArgoCD 이용 프로젝트: 같은 기간 한국 122개 → 134개
발표자는 글로벌 배포 지원으로 ArgoCD에 남아 있던 이점이 사라졌다고 보고, Kontrol로의 이전이 더 빨라질 것으로 기대했습니다.
일정과 남은 과제
당초 계획은 9개월이었지만, 중간 방향 전환을 포함해 약 1년이 걸렸습니다. 리전 간 버전 차이도 발표 당시 완전히 해소되지는 않았으며, UI 고도화로 보완하기로 합의한 상태였습니다. 발표자가 개발 경험을 높인 도구로 꼽은 것은 TypeScript, Prisma의 자동 스키마 마이그레이션, Graphite입니다.
근거와 세부 수치
| 리전 | ArgoCD 2022-06 | ArgoCD 2023-06 | Kontrol 2022-06 | Kontrol 2023-06 |
|---|---|---|---|---|
| 한국 | 122 | 134 | 45 | 129 |
| 영국 | 46 | 53 | 0 | 7 |
| 캐나다 | 45 | 55 | 0 | 7 |
| 일본 | 44 | 54 | 0 | 7 |
| 항목 | 값 | 근거 |
|---|---|---|
| 배포 단계 | 준비, 알파, 마지막 단계의 3단계 | 슬라이드 |
| GoCD 파이프라인 수 | 프로젝트당 3개, 4개 리전이면 9개 | 자막 기준 |
| 한 설정이 참조하는 Secret | 최대 8개 | 슬라이드 |
| 글로벌 배포 지원 오픈 | 2023년 3월 3일 | 자막 기준 |
| 글로벌 배포 프로젝트 | 약 7개 | 자막 기준, 슬라이드 표와 일치 |
| 계획 대비 기간 | 9개월 계획, 약 1년 소요 | 자막 기준 |
| 배포 엔진 교체 결정 회의 | 2022년 9월 26일 | 자막 기준 |
자동 자막이 GoCD를 “고시디"로 인식해 이름은 슬라이드 표기를 따랐습니다. 20분 이후부터 20:57 사이에는 자막이 없어 슬라이드로만 확인했습니다. 영상 시작부의 데모에는 새 커밋, 4개 리전 활성화, 알파 동시 배포, 리전별 승인 흐름이 나옵니다.