PG Listen/Notify 워커의 GitOps 배포 구조 정리
PostgreSQL LISTEN/NOTIFY 워커를 ArgoCD+Kustomize+Jenkins로 dev/qa/prod 배포하는 GitOps 파이프라인 노트
개요
PostgreSQL 의 LISTEN/NOTIFY 채널을 폴링하는 백엔드 워커를 Kubernetes 위에서 dev/qa/prod 세 환경으로 운영하기 위해, Jenkins 가 이미지 태그만 업데이트하고 ArgoCD 가 실제 apply 를 담당하는 GitOps 파이프라인을 관찰자 시점에서 정리한 문서 레포지토리이다. Kustomize 의 base/overlays 구조로 환경별 replica 수, 리소스 제한, ingress host, TLS cert 등을 patch 형태로 분리하는 방식을 다룬다. Jenkinsfile 이 sed 로 deployment-patch.yaml 의 이미지 태그를 바꾸고 git commit/push 하면, ArgoCD 가 변경을 감지해 kustomize build 후 cluster 에 적용하는 흐름을 아키텍처 다이어그램으로 설명한다. 또한 sed 의 OS 호환성, ArgoCD sync 지연, prune/selfHeal 설정의 위험, secret 평문 노출, sync-wave 순서 등 실제 운영에서 자주 마주치는 함정을 정리했다.
담당 역할
직접 구축한 GitOps 파이프라인을 관찰자 시점에서 분석하고, 아키텍처·스택·운영상 함정을 구조화된 문서로 정리했다.
아키텍처 다이어그램
레포지토리 분석 결과를 바탕으로 자동 생성된 구조도입니다.
GitOps 배포 파이프라인
PR merge 부터 Jenkins 의 이미지 태그 업데이트, ArgoCD reconcile 을 거쳐 k8s 에 적용되기까지의 흐름을 보여준다.
Kustomize base/overlays 구조
공통 base manifest 와 dev/qa/prod 환경별 patch 가 결합되는 구조를 보여준다.
기술스택
각 기술을 이 프로젝트에서 어떤 용도로 썼는지 정리했습니다.
인프라
- Kubernetes워커 워크로드가 실행되는 컨테이너 오케스트레이션 환경
- AWS Route53ingress 도메인에 연결되는 DNS 관리
DevOps
데이터베이스
- PostgreSQLLISTEN/NOTIFY 채널을 통해 워커가 폴링하는 이벤트 소스
핵심 포인트
- Jenkins 가 k8s 에 직접 apply 하지 않고 git push 만 하는 GitOps 원칙을 준수
- base/overlays 구조로 dev/qa/prod 의 replica, 리소스, ingress 차이를 명시적 patch 로 분리
- prod 는 prune OFF·selfHeal 신중 적용, dev 는 prune ON 등 환경별 sync 정책 차등화
- sync-wave annotation 으로 SealedSecret 을 deployment 보다 먼저 적용해 race 방지
- sed 스크립트의 OS 호환성, CI 자격증명 노출, image latest 태그 금지 등 실전 함정을 문서화
문제와 해결
문제auto-sync 의 prune 과 selfHeal 설정에 따라 drift 미제거 또는 운영자의 응급 수동 변경이 즉시 롤백되는 양면적 위험이 있음
해결dev 는 prune ON, prod 는 prune OFF + 명시적 sync 로 환경별 정책을 다르게 적용
문제SealedSecret 이 deployment 보다 늦게 적용되면 secret 없는 상태로 pod 가 떠 CrashLoopBackOff 발생
해결argocd.argoproj.io/sync-wave: -1 annotation 으로 적용 순서를 명시
문제동일 infra repo 에 두 환경 배포가 동시 트리거되면 같은 파일을 동시에 sed·push 해 충돌 발생
해결Jenkins 의 disableConcurrentBuilds() 또는 file lock 으로 race condition 방지
레포지토리 정보
- 생성
- 2026년 5월 14일
- 최근 커밋
- 2026년 5월 14일
- 크기
- 6 KB
- 라이선스
- 없음
이 문서는 2026년 7월 26일 에 자동 분석으로 생성되었습니다.