![[인프라를 소프트웨어처럼 4/5] plan은 동작을 모른다: 인프라를 테스트·재현한다는 것](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fv31psllp%2Fproduction%2F3b0143412b7bf340a7b2981a73bb7a2825bd2bd6-1684x1030.png%3Fauto%3Dformat%26fit%3Dmax%26w%3D1200&w=3840&q=75)
Pulumi와 로컬 쿠버네티스로 배포 전 진짜 인프라 동작을 검증하고 완벽히 재현 가능한 인프라를 확보하는 방법
본 아티클은 Terraform과 같은 기존 IaC의 plan 단계가 지닌 구조적 한계를 극복하기 위해 소프트웨어 공학의 헥사고날 패턴을 인프라 설계에 이식한 실제 엔지니어링 여정을 소개합니다. Kotlin 인터페이스 기반의 Port 설계를 통해 실제 클라우드 인프라와 로컬 테스트용 검증 어댑터(kind, vcluster)를 분리 교체할 수 있도록 아키텍처를 설계했습니다. 이에 더해 인프라 배포 이후 ArgoCD가 모든 애플리케이션의 헬스 상태를 최종적으로 수렴하는 과정까지 통합 스크립트로 확인해 견고하고 안전한 플랫폼 생태계를 일구는 과정을 다룹니다.
안정적인 클라우드 프로비저닝을 추구하는 DevOps 엔지니어와 다수의 격리된 개발 환경을 빠르게 구성하고 안전하게 해체하길 원하는 플랫폼 설계자에게 모범적인 아키텍처 가이드로 강력하게 추천합니다.
IaC의 plan 단계는 리소스 명세의 변경 유무만을 비교하기 때문에 실제 인프라와 앱이 정상 구동되는지 검증하지 못하고, 배포(apply) 시점에서야 오류를 감지하게 되는 구조적 공백이 발생합니다.
헥사고날 아키텍처를 IaC에 대입하여 인프라 규격을 Port로 추상화하고, 로컬 환경(kind, vcluster)을 Adapter로 구축하여 로컬에서 먼저 배포해 본 후, pulumi up 및 ArgoCD가 모든 앱을 Synced 및 Healthy로 수렴시킬 때까지 폴링하여 유효성을 검증합니다.
인프라 변경 전 로컬 사전 검증으로 배포 실패율을 극적으로 최소화했으며, 5대 스택 구조의 설계를 기반으로 멀티 클라우드 환경에서도 두려움 없이 동일 인프라를 반복 재현 및 생성해낼 수 있는 기반을 구축했습니다.
Trade-off
클라우드 서비스 고유의 기능이나 세밀한 권한 및 물리 환경을 로컬의 kind/vcluster 상에 완벽하게 일관되게 동기화해 관리하기 위한 부가적 엔지니어링 리소스가 발생할 수 있습니다.
소프트웨어 아키텍처의 포트 앤 어댑터 패턴 개념을 인프라 제어 코드로 가져와, 특정 클라우드 환경 명세와 구체적인 프로비저닝 구현체를 엄격하게 격리하고 선택적으로 결합해내는 설계 방식입니다.
로컬 물리적 장비 내부에서 도커 또는 가상화 컨테이너 기반으로 경량화된 독립적 쿠버네티스 클러스터를 손쉽고 자유롭게 기동해 주는 개발 친화적 오케스트레이션 제어 도구입니다.
선언적인 GitOps 저장소 상태를 모니터링하여 대상 쿠버네티스 클러스터 안의 전반적인 배포 리소스가 명세대로 일치하도록 강제하고 모든 세부 서비스들의 구동 건강도 상태를 측정하는 도구 기능입니다.









