Skip to content

feat: DevOps/SRE 코드 리뷰 개선 사항 17건 반영 - #15

Open
joungGo wants to merge 24 commits into
developfrom
feat/code-improvements
Open

joungGo wants to merge 24 commits into
developfrom
feat/code-improvements

Conversation

@joungGo

@joungGo joungGo commented Sep 10, 2026 •

Copy link
Copy Markdown
Collaborator

개요

DevOps/SRE 코드 리뷰 문서에서 완료로 표시한 17개 항목을 develop에 반영합니다. 아래 내용은 문서의 개선 목표를 실제 변경 코드와 대조해 요약했습니다.

변경 사항

애플리케이션·GitOps

  • Prometheus Application: Argo CD의 sources를 올바른 배열로 수정하고, Git 저장소의 Prometheus values 파일을 $values로 연결했습니다.
  • 비밀값 파일 제외: Helm 패키지와 Docker 빌드 컨텍스트에서 secret values 및 로컬 환경 파일을 제외했습니다.
  • HPA와 replicas 충돌: HPA 사용 시 Deployment의 replicas 렌더링을 생략하고, Argo CD가 해당 필드를 동기화 과정에서 덮어쓰지 않도록 설정했습니다.
  • DB 연결 예산: HPA 최대 10개와 롤링 업데이트를 고려해 운영 DB 풀 크기를 줄이고 환경변수로 조정 가능하게 했습니다. Replica URL이 없으면 읽기·쓰기 세션이 같은 풀을 사용합니다.
  • Replica 지연과 캐시: 쓰기 직후 일정 시간 Primary를 조회하고 캐시 키의 세대를 증가시켜, 오래된 Replica 조회 결과가 현재 캐시에 다시 들어오는 문제를 줄였습니다.

관측·네트워크

  • 모니터링 데이터 보존: Prometheus와 Alertmanager를 EBS PVC로 전환하고 Prometheus의 보관 용량 및 리소스 한도를 설정했습니다.
  • 알림 범위: PromQL을 애플리케이션의 namespace·service로 한정하고, 캐시 지표가 없을 때의 0 처리와 최소 트래픽 조건을 보완했습니다.
  • Watchdog: 무시하던 Watchdog 알림을 Secret에 저장된 외부 heartbeat webhook으로 전달하도록 설정했습니다.
  • NetworkPolicy: API Pod의 인바운드·아웃바운드 허용 대상을 정의하고, EKS VPC CNI의 NetworkPolicy 집행 옵션을 활성화했습니다.

배포·인프라 운영

  • 운영 OIDC 권한: GitHub Actions의 운영 IAM 역할을 main 브랜치에만 허용하고, 운영 배포 워크플로도 main에서만 실행하도록 제한했습니다.
  • 배포 검증·복구: 배포한 Git 커밋이 Argo CD에서 Synced·Healthy인지 확인하고 /readyz, /items를 검사합니다. 실패하면 GitOps 이미지 태그를 이전 값으로 되돌린 뒤 복구를 재검증하도록 구성했습니다.
  • RDS 장애조치: Primary에 Multi-AZ 자동 장애조치를 적용하고, Read Replica는 읽기 확장용이며 수동 승격 시 별도 복구 절차가 필요함을 명시했습니다.
  • 데이터·이미지 보존: 운영 RDS의 삭제 보호와 최종 스냅샷을 설정하고, 운영 ECR 강제 삭제를 막았습니다. 태그가 있는 이미지는 자동 만료하지 않으며, 배포 검증을 통과한 이미지에는 release-<commit SHA> 태그를 부여합니다.
  • Terraform state: 운영·실습용 S3 backend 경로와 S3 잠금을 분리하고, 버킷 부트스트랩 절차를 추가했습니다. plan.out은 Git 추적에서 제거했습니다.
  • 버전·비밀번호 회전: Terraform 버전을 1.14.7로 고정하고, RDS 비밀번호를 ephemeral/write-only 입력과 명시적 회전 버전으로 관리합니다. Secret 변경 후 새 Pod가 값을 읽도록 secretRevision 기반 롤아웃 경로를 추가했습니다.
  • 의존성 관리: Actions·Terraform 모듈·Python 이미지·Karpenter AMI 등의 버전을 고정하고 Python 의존성 lock 및 해시 검사를 도입했습니다. Dependabot 설정과 Terraform·Python·Docker·Helm의 PR 호환성 검증 작업을 추가했습니다.
  • Ingress: 차트의 기본 Ingress를 비활성화해 별도 Traefik Ingress를 사용하도록 맞추고, 차트 Ingress를 선택적으로 켤 때 적용되던 nginx 루트 rewrite를 제거했습니다.

- sources를 외부 Helm 차트와 Git 저장소의 두 항목으로 구성
- ref: values와 $values 경로로 프로젝트 설정 파일 연결
- values 파일을 feat/code-improvements 브랜치에서 읽도록 지정
- .helmignore에 secret values 파일 제외 규칙 추가
- .dockerignore로 환경 파일·비밀값·로컬 산출물 제외
- HPA 활성화 시 Deployment replicas 렌더링 제외
- Argo CD가 HPA가 조정한 replicas 차이를 무시하도록 설정
- 연결 풀 크기와 timeout을 환경변수 및 Helm values로 분리
- HPA와 롤링 업데이트를 고려해 운영 연결 수 제한
- Replica 미사용 시 read/write 연결 풀 공유
- 캐시 세대 키와 최근 쓰기 Primary 조회 창 추가
- 생성·삭제 후 세대 증가로 오래된 캐시 격리
- 일관성 창 외 cache miss는 Read Replica 유지
- Prometheus와 Alertmanager의 emptyDir 임시 스토리지를 EBS PVC(gp2)로 변경하여 Pod 재기동 시 시계열 데이터 및 Silence 상태 보존

- Prometheus storageSpec의 volumeClaimTemplate 계층 누락 및 storageClassName 오타 수정

- 디스크 용량 초과로 인한 크래시 방지를 위해 50Gi PVC 기준 retentionSize를 40Gi로 설정

- 노드 OOM 방지 및 안정적인 스케줄링을 위한 Prometheus Pod 리소스(requests/limits) 설정
@joungGo joungGo self-assigned this Sep 10, 2026
@coderabbitai

coderabbitai Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 44f11ce7-d728-48db-9246-f3a9ae399982

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

- OIDC Role의 신뢰 subject를 main 브랜치 push로 축소
- 기능 브랜치와 PR의 ECR push Role Assume 차단
- CI/CD 배포 트리거와 쓰기 권한을 운영 배포 job으로 한정
- 모든 알림 규칙(HighErrorRate, CacheHitRateLow, CacheOperationErrorHigh, DBQueryLatencyHigh, APIRequestLatencyHigh)에 namespace 및 service 라벨 selector 추가하여 타 서비스 메트릭 혼입 방지
- HighErrorRate의 분자/분모 모두에서 probe(/healthz, /readyz) 경로를 제외하여 사용자 요청 에러율 희석 방지
- CacheHitRateLow 평가 시 첫 hit 전 시계열 부재(Empty Vector)로 알림이 누락되지 않도록 vector(0) fallback 적용
- Alertmanager에 Healthchecks Ping URL Secret 마운트
- Watchdog 알림을 전용 webhook receiver로 라우팅
- resolved 이벤트 없이 5분 주기로 heartbeat 전송
- EKS VPC CNI에 NetworkPolicy 집행 기능 활성화
- Traefik·Prometheus의 API 접근과 CoreDNS 조회 허용
- API Pod의 RDS·Redis egress를 VPC CIDR과 필수 포트로 제한
- 환경별 NetworkPolicy 설정값 추가
- Argo CD 동기화와 Healthy 상태 확인
- readiness 및 읽기 API smoke test 추가
- 검증 실패 시 이전 이미지로 GitOps 롤백 및 복구 검증
- 동시 배포 방지 설정 추가
- Primary RDS의 Multi-AZ 구성을 활성화
- Read Replica와 Multi-AZ Standby의 역할을 명확히 구분
- 수동 Replica 승격 시 필요한 복구 절차를 주석으로 기록
- CI/CD 워크플로를 main push에서만 실행하도록 변경
- Argo CD 애플리케이션이 main 브랜치만 추적하도록 통일
- GitHub Actions IAM Role을 main 브랜치 OIDC subject로 제한
- 운영·실습 환경의 RDS 삭제 보호와 최종 스냅샷 정책 분리
- 태그가 있는 ECR 이미지의 자동 만료를 제거하고 release 태그 digest 확인
- 누락된 GitOps 배포 검증 스크립트와 복원 절차 문서 추가
- S3 state 버킷 부트스트랩 및 운영·실습 backend 분리
- Terraform 최소 버전을 올리고 빈 로컬 state를 원격 backend로 이전
- plan.out의 Git 추적 제거 및 운영 절차 문서화
- S3 state 버킷 부트스트랩 및 운영·실습 backend 분리
- Terraform 최소 버전을 올리고 빈 로컬 state를 원격 backend로 이전
- plan.out의 Git 추적 제거 및 운영 절차 문서화
- GitHub Actions를 commit SHA로 고정하고 SonarCloud Action을 후속 Action으로 변경
- yq, Argo CD CLI, Ruff, uv의 버전과 다운로드 해시 고정
- Python base 이미지를 digest로 고정하고 전이 의존성 lock 파일 적용
- Terraform 모듈, Karpenter AMI, GitOps Helm chart 버전 고정
- Dependabot 월간 갱신 PR 및 Terraform·Python·Docker·Helm PR 검사 추가
- 의존성 갱신과 검토 절차를 런북에 문서화

검증: 빌드·배포·인프라 점검은 추후 일괄 진행
- Terraform fmt 검사에서 실패한 파일의 서식 정리
- GitHub Actions를 Node.js 24 지원 버전의 commit SHA로 갱신
- 의존성 검사 워크플로의 YAML 명령 구문 수정
- macOS/arm64 및 Linux/amd64 provider 해시 기록
- 현재 모듈에 맞게 tls provider 제약 정보 갱신
- 다중 플랫폼 lock 파일 갱신 절차 문서화
- API 요청 경로를 그대로 전달하도록 rewrite-target 기본값 제거
- 개발 Ingress class를 Traefik으로 지정
@joungGo joungGo changed the title Feat/code improvements feat: DevOps/SRE 코드 리뷰 개선 사항 17건 반영 Sep 23, 2026
@sonarqubecloud

sonarqubecloud Bot commented Oct 3, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants