Skip to content

release: Phase1 infra #236 - #244

Merged
goodjunseon merged 26 commits into
mainfrom
dev
Apr 12, 2026
Merged

goodjunseon merged 26 commits into
mainfrom
dev

Conversation

@goodjunseon

@goodjunseon goodjunseon commented Apr 9, 2026 •

Copy link
Copy Markdown
Member

🔗 관련 이슈

메인 이슈

👥 담당자 배정

📌 배경

이번 PR은 dev 브랜치의 인프라 관련 변경을 main으로 배포하기 위한 머지 PR이며, 범위는 아래 3개 서브이슈의 변경으로 제한합니다.

  • refactor/237-unify-compose-and-cleanup
  • feat/238-ssm-deploy-pipeline-refactor
  • refactor/242-cloudfront-cdn-s3

✅ 변경 사항

1) #237 Compose 진입점 단일화 및 실행 흐름 정리

  • docker-compose.dev.yml, docker-compose.prod.yml 제거 후 docker-compose.yml 단일화
  • run.sh 실행 모드 정리
    • DEPLOY_MODE=local|prod 분기
    • 운영(prod) 시 DOCKER_USERNAME 외부 주입 필수
    • 로컬 fallback (${DOCKER_USERNAME:-local}) 적용
  • .env.example 제거 및 .gitignore 규칙 정리
  • Spring 프로필 파일 통합
    • application-dev.yml, application-prod.yml 제거
    • application.yml 단일 관리로 전환
  • 운영 가이드(document/docker-guide.md) 최신화

2) #238 OIDC + SSM 롤링 배포 파이프라인 리팩터링

  • .github/workflows/deploy.yml에서 CI/Deploy 역할 분리
    • pull_request(main, dev)에서는 ci 검증 중심
    • 실제 배포는 main push 및 workflow_dispatch(main)에서만 실행
  • Docker Buildx 및 GitHub Actions 캐시 기반 이미지 빌드/푸시 정리
  • 배포 인증 체계를 SSH에서 GitHub OIDC + AWS AssumeRole 방식으로 전환
  • AWS SSM으로 2개 인스턴스 순차 롤링 배포
    • 인스턴스 1 성공 후 인스턴스 2 진행
  • 배포 readiness 게이트 도입
    • 의존성: spring-boot-starter-actuator
    • 경로: /actuator/health/readiness
    • 보안 설정: /actuator/health/** 허용
  • 배포 변수/시크릿 계약 문서화 (document/docker-guide.md)

3) #242 CloudFront 기반 S3 업로드 구조 개선

  • Presigned URL 응답 DTO 도입
    • uploadUrl, objectKey, fileUrl
  • S3 object key 생성 규칙 개선
    • 경로에 year 포함
    • 파일명 UUID 기반 생성으로 충돌 위험 완화
  • 이미지 조회 URL을 CloudFront 도메인 기반으로 반환하도록 변경
  • application.yml에 CloudFront 도메인 및 presigned URL 만료 설정 반영

🔄 Public API / Interface 변경

API 응답 변경

  • GET /api/s3/upload-url
    • 응답 데이터 구조를 PresignedUrlResponse 중심으로 명시
    • 필드: uploadUrl, objectKey, fileUrl

배포 인터페이스(필수 입력 계약)

  • GitHub Secrets
    • DOCKER_USERNAME
    • DOCKER_PASSWORD
    • AWS_ROLE_TO_ASSUME
  • GitHub Variables
    • AWS_REGION
    • DEPLOY_DIR
    • DEPLOY_ENV_PATH
    • DEPLOY_MOUNT_PATH
    • EC2_TARGET_TAG_KEY
    • EC2_TARGET_TAG_VALUE
    • HEALTHCHECK_PATH
    • HEALTHCHECK_TIMEOUT_SECONDS
  • 서버 실행 인자(run.sh)
    • DOCKER_USERNAME
    • ENV_FILE_PATH
    • DEPLOY_MOUNT_PATH
    • IMAGE_TAG
    • DEPLOY_MODE

🧪 검증 항목 (PR 체크리스트)

CI/배포 파이프라인

  • PR 이벤트에서 ci 잡 빌드 통과 확인
  • main 배포 시 deploy 잡에서 인스턴스 1 → 인스턴스 2 순차 성공 확인
  • 각 인스턴스에서 /actuator/health/readiness 응답 성공 확인

런타임/기능

  • GET /api/s3/upload-url 응답에 uploadUrl/objectKey/fileUrl 존재 확인
  • fileUrl이 CloudFront 도메인 + objectKey 조합인지 확인

문서/운영

  • document/docker-guide.md의 Secrets/Variables 계약과 워크플로우 입력 키 일치 확인

⚠️ 제외 범위

goodjunseon and others added 26 commits January 27, 2026 21:25
- 배치 작업의 시작과 끝의 소요시간 측정
- 파싱/저장 구간 시작 시간
- 쓰레드 수, 히카리 풀 상태
…ation

[REFACTOR] Spring POI 데이터 INSERT Baseline 확보 및 INSERT, DELETE 테스트 API 추가
…-cleanup

배포/실행 구조 단순화 및 Spring 설정 단일화
- ci job은 PR/push에서 Gradle 빌드만 수행
- deploy job은 main push 또는 main workflow_dispatch에서만 실행
- AWS OIDC/SSM 단계가 PR에서 실행되던 문제를 방지
…efactor

GitHub Actions SSH 배포를 OIDC+SSM 롤링 배포로 전환
S3 Presigned URL 업로드 구조 개선 및 CloudFront CDN 적용
@goodjunseon
goodjunseon requested review from jae-2024 and zldzldzz April 9, 2026 08:23
@goodjunseon goodjunseon self-assigned this Apr 9, 2026
@goodjunseon goodjunseon changed the title release: merge dev into main (infra #236) release: Phase1 infra #236 Apr 9, 2026
@goodjunseon
goodjunseon merged commit 7184ac7 into main Apr 12, 2026
2 checks passed
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.

3 participants