DevOps 관행 및 CI/CD
1) 목표와 원칙
빠르고 안전한: 짧은 사이클, 작은 변경 배치, 자동 점검.
반복성: 코드로서의 인프라 (IaC), 환경 = 코드 + 정책.
관찰 가능성: 상자에서 메트릭/트레일/로그, 계약으로 SLO.
준수: 감사, 변경 제어, 지역 데이터 격리.
황금 규칙: "첫 번째 품질, 속도-그렇지 않으면 속도는 나타나지 않습니다".
2) 지점 및 환경
트렁크 기반 + 기능 플래그-기본 선택.
짧은 기능 라인 (PK2-5 일), 매일 트렁크로 병합됩니다.
증분 전달 및 보안 롤백을위한 서버 측 플래그.
Git 환경: 'dev' → 'stage' → 'prod' (+ 지역 'prod-eu', 'prod-latam').
아티팩트 홍보: 하나의 수집 된 이미지가 미디어를 통해 홍보됩니다 (다이제스트에 의한 불변의 태그).
GitFlow: 드문 규제 어셈블리/SDK 릴리스-브랜치 + "경화" 를 릴리스하십시오.
3) 품질과 "빨간 선" 의 피라미드
1. 정적 분석 (SAST, 린터, 라이센스).
2. 단위/속성 기반 테스트 (초).
3. API 및 이벤트에 대한 계약 테스트 (CDC) (OpenAPI/AsyncAPI, Schema Registry).
4. 통합 (테스트 컨테이너, 현지 중개인).
5. E2E 중요 경로: 등록 → KYC → 예금 → 게임 출시 → 출력.
6. 결제/지갑/게임 제공 업체에 대한로드/혼돈 테스트.
품질이 통과되지 않습니다 → 예금이 차단됩니다. 변경 기록이없는 "수동 예외" 는 없습니다.
4) 공급망
각 이미지/패키지 (CycloneDX/SPDX) 에 대한 SBOM.
아티팩트 서명 (cosign), "서명 만" 정책 입학.
SCA/Dependabot: 취약점 및 라이센스.
Provenance/SLSA: 재현 가능한 어셈블리, 폐쇄 형 빌드 에이전트, 증명.
비밀: 관리자 (KMS/외부 비밀) 에서 리포/로그의 단일 비밀이 아닙니다.
5) GitOps... IaC
코드로서의 Infra: 클라우드를위한 Terraform/Pulumi; k8에 대한 Helm/Kustomize.
GitOps 컨트롤러 (ArgoCD/Flux): 선언적 선언, PR 검토, 감사 흔적.
Windows/freezes: 토너먼트 주/피크 시간-프로덕션 릴리스 자동 일시 중지.
OPA/Kyverno 정책: 아니오 ': 최신', 비 루트, 읽기 전용 FS, hostPath 불허가 있습니다.
6) 프로그레시브 배달
카나리아: 가드 레일 지표 (p95 대기 시간, 5xx, 오류 예산 연소) 에서 1 → 5 → 10 → 25 → 50 → 50 → 100%.
Blue-Green: 빠른 스위치 + 롤백 계획.
섀도우/미러 링: 응답에 영향을주지 않는 복사 요청 (새 PSP 어댑터).
기능 플래그: 세그먼트 별 포함 (지역/역할/파트너/채널) + 킬 스위치.
7) 데이터베이스 마이그레이션 (확장 및 계약)
1 단계: 이전 코드와 호환되는 체계 (새 열/색인) 를 확장하십시오.
2 단계: 두 버전/필드에 모두 쓰는 코드를 덤프합니다.
3 단계: 배경 호바 데이터 마이그레이션, 진행 지표.
4 단계: 읽기를 새 필드로 전환하십시오.
5 단계: 이전 버전을 제거하는 것은 별도의 릴리스입니다.
프라임 타임에 DDL 금지를 차단; 높은 테이블-온라인 마이그레이션.
8) 관찰 및 SLO
메트릭: RPS, p50/95/99, 4xx/5xx, 채도 (CPU/mem/큐), DLQ/브로커 지연.
비즈니스 메트릭: TTP (Time-to-Play), TtW (Time-to-wallet), FTD 성공, KYC-TtV.
추적: 게이트웨이에서 데이터베이스까지의 추적 ID.
SLO: 예를 들어, '예금 p95 λ300-500 ms', '성공 5% '', 가용성은 99 이상입니다. 9%`.
저하시 화상 경보 + 자동 일시 정지 해제.
9) 사건, 사후, 교대
중요한 스트림의 런북 (예금/출력/ACC, 라이브 게임).
우선 순위 척도: P1... P4, 소유자, ETA, 커뮤니케이션 (배너, 상태 페이지, 파트너).
행동 항목과 날짜가있는 무사한 사후 부검.
통화 중, 채팅 경고, N 분마다 상태 업데이트 대안.
도크 트레일: 누가/언제/무엇을 게시했는지 (커밋, 아티팩트, 환경, 플래그).
10) 보안 및 준수 (DevSecOps)
SAST/DAST/IAST, CI의 비밀 스캔.
작은 TTL을 가진 JWT, 키 회전.
로그/트랙의 마스킹 PII/PAN; WORM 관리 활동 로그.
지리 분리: 지역별 클러스터/데이터베이스, 게이트웨이 라우팅.
관리 변경: 민감한 영역에 대한 티켓/승인 (지갑/제한).
11) DORA 지표 및 FinOps
배포 빈도 (매일 작은 릴리스).
변경을위한 리드 타임 (이상: 시계).
MTTR (복구: 분/시간).
실패율 변경 (목표 10% 15%).
FinOps: 환경 비용, RPS 캐싱, 따뜻한 수영장, 근로자의 자동 정지, "거래 당 비용".
12) iGaming 특이성
피크 (토너먼트/라이브): 주요 변경 사항 동결, 캐시/이미지 예열, 할당량 증가.
지불/지갑: 개별 수영장/노드, 높은 SLO, 지역별 카나리아 출시, PSP 제공 업체의 이중 원격 측정.
CC/규정 준수: 별도의 릴리스 케이던스, 필수 규정 준수 후 업데이트.
파트너/제휴사: 안전한 SDK, 지원 창이있는 API 버전 및 기존 클라이언트 모니터링.
13) 예 CI/CD (YAML, GitHub 동작 → ArgoCD)
yaml name: ci-cd on:
push:
branches: [ main ]
paths: [ "services/wallet/" ]
jobs:
build_test_scan:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Setup Node uses: actions/setup-node@v4 with: { node-version: 22 }
- run: npm ci --omit=dev working-directory: services/wallet
- run: npm test -- --ci working-directory: services/wallet
- name: Lint & SAST run: npm run lint && npm run sast working-directory: services/wallet
- name: Build image run:
docker build -t registry. local/wallet:${{ github. sha }} -f Dockerfile.
cosign sign --key $COSIGN_KEY registry. local/wallet:${{ github. sha }}
- name: SBOM & Scan run:
syft packages registry. local/wallet:${{ github. sha }} -o cyclonedx-json > sbom. json trivy image --exit-code 1 --severity HIGH,CRITICAL registry. local/wallet:${{ github. sha }}
- name: Push image run: docker push registry. local/wallet:${{ github. sha }}
deploy_stage:
needs: build_test_scan runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Bump Helm values (image tag)
run: yq -i '.image. tag = "${{ github. sha }}"' helm/wallet/values-stage. yaml
- name: Create PR to gitops repo run: gh pr create -R org/gitops -B stage -H stage-bump/wallet-${{ github. sha }} -t "wallet:${{ github. sha }}" -b "Promote to stage"
promote_prod:
if: github. ref == 'refs/heads/main'
needs: deploy_stage runs-on: ubuntu-latest steps:
- name: Gate: SLO/quality checks run:./scripts/gates/check_stage_health. sh # p95, 5xx, e2e ok
- name: Canary 10%
run:./scripts/gitops/canary. sh wallet ${{ github. sha }} 10
- name: Auto-pause on degradation run:./scripts/gates/guardrails. sh./scripts/gitops/rollback. sh wallet
- name: Roll to 100%
run:./scripts/gitops/rollout. sh wallet ${{ github. sha }} 100
14) 점검표
메인으로 합병하기 전에
- 단위/CDC/통합 녹색.
- Linters/SAST/라이센스는 깨끗합니다.
- OpenAPI/AsyncAPI 스키마 및 데이터베이스 마이그레이션을 업데이트했습니다.
- Fiche 플래그가 추가되고 폴백이 정의됩니다.
prod로 출시하기 전에
- 이미지 서명, SBOM 첨부, HIGH/CRIT 취약점이 종료되었습니다.
- 대시 보드/알림 생성; SLO 게이트가 연결되어 있습니다
- 롤백 계획, 킬 스위치, 섀도우 (필요한 경우).
- 지역 제한 및 데이터 정책이 확인되었습니다.
사건
- 런북은 최신 정보를 찾았습니다.
- 사용자/파트너와의 통신 (템플릿, ETA).
- 48 시간에 사후, 날짜가있는 행동 항목.
15) 반 패턴
"모든 환경에 대한 재조정" (아티팩트 프로모션 없음).
감사/반복성없이 수동 배포 단계.
데이터베이스 마이그레이션 "정면", 호환되지 않는 API 응답.
CI 변수 또는 저장소의 비밀.
플래그/롤백이없는 치명적인 기능.
카나리아 출시시 SLO/가드 레일 부족.
PII/PAN이있는 로그, 마스킹 없음.
16) 유용한 마이크로 카피 템플릿
릴리스 (파트너에게):- "결제 모듈의 업데이트를 단계적으로 출시하고 있습니다 (10% → 100%). 최대 2 분의 단기 등록 지연이 가능합니다. 완료 ETA-오후 9시 EET "
- "결제 제공 업체 X가 불안정합니다. 등록에는 최대 15 분이 소요될 수 있습니다. 우리는 수정 작업을하고 있습니다. 다음 상태 업데이트는 30 분입니다. "
- "지연이 증가하여 업데이트가 보류 중입니다. 이전 버전을 반환합니다. 데이터와 작업이 저장되었습니다 "
17) 구현 프로세스 (4 스프린트)
1. 품질 표준 및 파이프 라인: SAST/Unit/CDC, 단일 이미지, 서명, SBOM.
2. GitOps + 환경: Helm/Kustomize, ArgoCD, 아티팩트 프로모션, 비밀 정책.
3. 프로그레시브 릴리스 및 SLO 게이트: 카나리아/섀도우, 가드 레일, 자동 허브.
4. 신뢰성과 비용: 혼돈 테스트, 자동 스케일/따뜻한 수영장, FinOps 대시 보드.
최종 치트 시트
트렁크 + 플래그 + 작은 배치 = 응력이없는 속도.
단일 서명 된 아티팩트 + SBOM = 제어 공급망.
GitOps + 정책 = 재현성 및 감사.
Canary/Blue-Green + SLO 게이트 = 보안 릴리스.
DB 확장 및 계약 = 제로 다운 타임.
관찰 및 DORA = 관리 가능한 개선.
지역 격리 및 규정 준수 = 법률 및 신뢰 준수.