OPA 정책 가드를 활용한 자체 배포 인프라 도구 구축

발행: (2026년 5월 7일 AM 03:41 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

Introduction

HNG Stage 4를 위해 SwiftDeploy라는 CLI 도구를 만들었습니다. 이 도구는 단일 YAML 매니페스트 하나만으로 Nginx, Docker 컨테이너, Open Policy Agent (OPA) 보안 게이트가 포함된 완전한 웹 애플리케이션을 실행합니다.

전통적인 DevOps는 여러 설정 파일을 손으로 작성하고, 환경이 안전한지 수동으로 확인하며, 배포 중에 문제가 발생하지 않기를 기대합니다. SwiftDeploy는 모든 것을 설명하는 하나의 매니페스트 파일을 사용함으로써 이를 해결합니다. 도구가 모든 설정을 자동으로 생성하고, 정책을 자동으로 검사하며, 조건이 충족되지 않으면 배포를 거부합니다.

How the Manifest Works

nginx:
  # ... your nginx configuration here ...

이 단일 파일에서 swiftdeploy init 명령을 실행하면 다음이 생성됩니다:

  • nginx.conf – 역방향 프록시, JSON 로깅, 사용자 정의 오류 페이지
  • docker-compose.yml – 헬스 체크, 네트워크, 볼륨

생성된 파일을 삭제하면 정확히 동일한 방식으로 다시 생성됩니다. 매니페스트가 유일한 진실의 원천(“omni truth”)입니다.

The Policy Brain: Open Policy Agent

OPA 사이드카를 사용하면 배포 규칙을 CLI에 하드코딩하는 대신 Rego 정책으로 표현할 수 있습니다.

# Example policy (replace with your own rules)
package swiftdeploy.policy

default allow = false

allow {
    input.disk_free_gb > 10
    input.cpu_load < 0.8
}

CLI는 OPA에 “배포해도 될까?”라고 묻고, OPA는 결정과 이유를 함께 반환합니다—단순 예/아니오가 아닙니다. OPA에 접근할 수 없을 경우, CLI는 충돌 대신 안전하게 실패합니다.

Observability: Prometheus Metrics

모든 요청은 메서드, 경로, 상태 코드별 카운터로 추적됩니다. 지연 시간은 히스토그램 버킷에 기록됩니다.

실시간 대시보드(swiftdeploy status)는 3 초마다 이 메트릭을 스크랩하여 정책 준수 상황을 실시간으로 보여줍니다.

Chaos Testing: Breaking Things on Purpose

ModeDescription
slow응답이 N 초 걸림
error50 % 요청이 500 오류 반환
recover모든 혼돈을 취소

error 모드를 활성화했을 때, 사전 프로모션 게이트가 오류율이 1 % 임계값을 초과했기 때문에 승격을 차단했습니다. 감사 보고서에 모든 위반 사항이 기록되었습니다.

What I Learned

  • 선언적 구성은 강력합니다 — 하나의 파일이 전체 스택을 생성합니다.
  • 코드로서의 정책은 실수를 방지합니다 — OPA가 사용자에게 도달하기 전에 문제를 잡아냅니다.
  • 관측 가능성은 중요합니다 — 메트릭이 없으면 눈이 먼 채 배포하는 셈입니다.
  • 자신의 IP를 화이트리스트에 추가 — Stage 3에서 얻은 힘든 교훈입니다.

Try It Yourself

git clone https://github.com/icode-py/swiftdeploy.git

도구를 로컬에서 실행하고 대시보드에 접속해 보세요:

http://localhost:8080/
0 조회
Back to Blog

관련 글

더 보기 »

시스템 설계 트레이드오프

스케일링 - 수직 스케일링 vs 수평 스케일링 - 확장성 vs 성능 일관성 및 가용성 - 일관성 vs 가용성 CAP - 강한 일관성 vs 최종 일관성