AWS Cloud School 13기 107일차
2026-06-04
Today
- 4개 레포 pull + Infra 테라폼(ECS 모듈) 대조 → 실제 리소스명 확인 (
dev-cluster/dev-app-service/dev-app, {env}-ecs-execution-role·{env}-ecs-task-role)
- PassRole 네이밍 불일치 발견·정렬: 설계서 계획명(
farmily-{env}-...) ≠ 테라폼 실제명 → backend 정책 Resource를 실제 롤명 4개로 수정 결정 (IAM 설계서·deploy.yml 반영, ⚠️ 콘솔 적용은 남음)
- CI/CD 파이프라인 설계서 전면 정합화:
dev브랜치→feat, 수동승인→자동배포, ECS 이름 테라폼값, 모노레포→멀티레포(레포별 .github/workflows/)
- 구축 가이드 본문 YAML(Backend/Frontend-web/Mobile)·지원표까지 확정 모델로 전면 갱신 + 상단 "갱신 완료" 배너
- 이미지 태그
latest/고정 → SHA(<env>-<short-sha>) 전환 (deploy.yml + 블로그 3편)
- ★ Phase 1 워크플로우 실가동:
deploy.yml(ci=gradle test + push-image=build/ECR push) 작성 → feat 커밋 b1d641b·push → green → PR #26 → 셀프 머지 06dbaf1 → main 런 green → ECR에 dev-b1d641b·prod-06dbaf1+latest 생성
- 마이그레이션(VMware→ECS) 준비 범위·순서 정리 (영원님 몫 = ③배포 실행 + IAM/시크릿)
- SonarCloud 연동: Gradle
org.sonarqube 7.3.0.8198 + deploy.yml ci job에 ./gradlew sonar step 추가 (c0628a9) → PR #27 생성·머지 → main 반영
- Quality Gate 실패: Security Hotspot 2개 (
aws-actions/*@v4 SHA 미핀) → C Rating → QG blocked. Safe 마크 또는 SHA 핀으로 해결 필요
- 트러블슈팅 문서 작성:
Farmily-트러블슈팅-20260604-SonarCloud-연동.md (task 이름 변경·SONAR_TOKEN 미등록·fetch-depth 3가지)
- Frontend EAS 현황 확인:
eas.json 없음, app.json projectId 없음, 워크플로우 전무 → eas init 선행 필요
EXPO_TOKEN 발급 → Frontend 레포 Secrets 등록 완료
Notes
push-image: needs: ci + ci=./gradlew test → 테스트 통과해야 이미지 push (quality gate). 판정 = exit code(0/≠0), 채점은 JUnit/Gradle, 워크플로우는 게이트 설치만 함
- 고정 태그(
latest/:dev)는 ECS UpdateService가 "태그 안 바뀜"으로 새 이미지 미반영 → SHA 태그로 매 배포 고유 → 재배포·롤백 보장. prod는 latest도 추가 push
- merge commit 방식 = feat↔main 정합 유지 (squash는 분기 재발 — 이전에 #25 squash로 겪음)
- ECS Task Execution Role에
secretsmanager:GetSecretValue 있어야 task def secrets 주입됨 (자주 놓침)
- ALB 헬스체크
/api/v1/health = 앱이 실제 제공(HealthController @RequestMapping("/api/v1")+/health) → 테라폼과 일치 확인됨
- Security Hotspot ≠ 확정 취약점 —
TO_REVIEW 상태 자체가 Rating C → QG 실패. SonarCloud에서 Safe/Fixed/Acknowledged 판정해야 통과
- GitHub Actions SHA 핀:
@v4 태그는 소유자가 언제든 다른 커밋으로 이동 가능(공급망 공격 벡터) → 전체 commit SHA(@abc1234...)로 고정해야 불변 보장
- EAS CI/CD 3종 세트:
EXPO_TOKEN(expo.dev 발급) + eas.json(build profile) + mobile.yml — eas init 없이는 projectId 미확정이라 워크플로우 작성 불가
Learned
- "VMware에서 동작" ≠ "ECS에서 동작" — 마이그레이션 위험은 앱 로직이 아니라 환경 결합부(DB→RDS / Redis→ElastiCache / 파일→S3 / 시크릿 / 네트워크 / 컨테이너)
- CI/CD는 마이그레이션의 별도 후속이 아니라 "코드를 ECS에 올리는 수단" 자체
- 가이드/설계서 = 목표(가설), 실코드(
deploy.yml) = 현재 동작분 → "검증된 완성본"은 실제 돌려서 고친 후에 됨
- 거버넌스 갭: "리뷰 필수" 팀규칙이 main branch protection으로 강제 안 됨(
reviewDecision 빈값) → 문서 규칙 ≠ 시스템 강제. (다음 작업: main 보호규칙 추가)
- SonarCloud QG: 도구 추가 시 Secret 등록 + 프로젝트 사전 생성 체크리스트 먼저 → 런 후 인증 실패로 당황하는 패턴 방지
- 공급망 보안(Supply Chain Attack): CI에서 외부 Action을 태그로 쓰면 태그 이동 리스크 → 신규 Action 연동 시 SHA 핀이 보안 베스트 프랙티스 (포트폴리오: "Security Hotspot 검출 후 직접 판단·조치" 이력)
Prompt(회고)
- 하루 쉬고 이렇게 오랜만에 교육장에서 프로젝트를 진행을 하니 조금 힘들기도 했다. 그래도 오늘은 CI/CD 파이프라인 중 SonarCube를 통해 코드 확인하고 ECR로 image가 올라가는 .yml파일을 작성했다. 처음으로 CI/CD를 내가 직접생각 하고 작성을 하다보니 재미있는거 같기도 하고 더 깊게 생각해봐야겠다.
- 그리고 코드 이해가 조금 필요하듯 싶고 계획적인게 필요하다
- 내일 멘토님과의 회의가 온라인으로 잡혀있는데 필요한걸 다 물어봐야겠다.