Skip to content

[INFRA] CI/CD 구축 및 EC2·RDS 배포 환경 세팅 - #2

Merged
Chhun-Lee merged 5 commits into
developfrom
infra/#1
Oct 24, 2026
Merged

Chhun-Lee merged 5 commits into
developfrom
infra/#1

Conversation

@Chhun-Lee

Copy link
Copy Markdown
Collaborator

작업 내용

CI (.github/workflows/ci.yml)

  • develop, main 대상 PR에서 빌드·테스트
  • @SpringBootTest가 DB 연결을 요구해 MySQL 8.4 서비스 컨테이너를 띄워 실행

CD (.github/workflows/cd.yml)

  • main push, Actions 탭 수동 실행 시 동작
  • 이미지 빌드 → Docker Hub(private) push → docker-compose.yml 전송 → GitHub Secrets로 .env 생성 → 컨테이너 교체
  • 이미지 태그를 커밋 SHA로 고정 → 이전 CD 실행을 Re-run 하면 그 버전으로 롤백
  • /actuator/health로 기동 확인 (최대 120초, DB 연결 포함)
  • concurrency로 배포가 겹치지 않도록 설정

Docker · 실행 구성

  • Dockerfile 멀티 스테이지 빌드, .dockerignore로 비밀값 파일 제외
  • plain jar 비활성화 → 실행 가능한 jar 하나만 생성
  • EC2용 docker-compose.yml
    • 127.0.0.1:8080 바인딩 → 호스트 Nginx를 통해서만 접근
    • KST 시간대, 로그 10MB × 5개 순환
  • application-prod.yml: Nginx 뒤에서 X-Forwarded-* 헤더 처리

헬스체크

  • spring-boot-starter-actuator 추가, /actuator/health만 노출
  • SecurityConfig: JWT 적용 후에도 헬스체크 경로는 인증 없이 허용

인프라 · 문서

  • EC2(Ubuntu 24.04) + RDS(MySQL 8.4) 생성, GitHub Secrets 등록 완료
  • EC2 초기 세팅 스크립트 docs/infra/ec2-user-data.sh
    • Docker, Nginx(80 → 8080, WebSocket 업그레이드 포함), 2GB 스왑, KST
  • README에 배포 흐름과 필요한 GitHub Secrets 정리, MySQL 버전 8.4로 수정
  • .gitattributes에 *.sh LF 고정 (Windows에서 받은 스크립트가 CRLF로 바뀌는 문제 방지)

확인 사항

  • RDS for MySQL 8.0은 2026-07-31에 표준 지원이 끝나 유료 Extended Support가 붙기 때문에 8.4로 생성했습니다. 로컬 MySQL도 8.4로 맞춰 주세요.
  • 환경변수를 새로 추가할 때는 GitHub Secrets 등록과 cd.yml의 .env 블록 수정을 같이 해야 합니다.
  • EC2의 .env는 배포마다 새로 만들어지므로 직접 수정하지 않습니다.
  • 첫 배포는 develop → main 머지 시 진행됩니다. 이슈 #1의 마지막 항목(첫 배포 확인)이 남아 있어 이 PR에서는 이슈를 닫지 않습니다.

테스트

  • ./gradlew build -x test 통과 (실행 가능한 jar 1개 생성, actuator 포함 확인)
  • 워크플로우·compose·yml 파일 YAML 파싱, 배포 스크립트 bash -n 문법 검사
  • contextLoads 테스트는 이 PR의 CI에서 MySQL 8.4 컨테이너로 실행
  • Docker 이미지 빌드는 첫 CD 실행에서 확인

- 배포 확인용으로 /actuator/health만 노출
- JWT 적용 후에도 헬스체크 경로는 인증 없이 허용
- Dockerfile 멀티 스테이지 빌드, .dockerignore로 비밀값 파일 제외
- plain jar 비활성화로 실행 가능한 jar 하나만 생성
- EC2용 docker-compose.yml (127.0.0.1:8080 바인딩, KST, 로그 순환)
- application-prod.yml 분리 (Nginx 프록시 헤더 처리)
- CI: develop/main 대상 PR에서 MySQL 8.4 서비스 컨테이너로 빌드·테스트
- CD: main push 시 Docker Hub push 후 EC2에 SSH로 배포, 커밋 SHA 태그 고정
- 배포 후 /actuator/health로 기동 확인 (최대 120초)
- README에 배포 흐름과 필요한 GitHub Secrets 정리
- MySQL 버전 8.4로 수정
- EC2 사용자 데이터 스크립트 (Docker, Nginx, 스왑, 시간대)
- Windows에서 받은 ec2-user-data.sh가 CRLF로 바뀌어 EC2에서 실패하지 않도록 고정
@Chhun-Lee Chhun-Lee added ⚙️ SETTING 프로젝트 세팅 관련 라벨 🌟 INFRA 인프라 관련 라벨 labels Oct 24, 2026
@Chhun-Lee Chhun-Lee self-assigned this Oct 24, 2026
@Chhun-Lee
Chhun-Lee merged commit 302373d into develop Oct 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🌟 INFRA 인프라 관련 라벨 ⚙️ SETTING 프로젝트 세팅 관련 라벨

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant