콘텐츠로 이동

CI/CD (GitHub Actions / 배포)

GitHub Actions로 빌드 → 이미지 → ECR/Docker Hub 푸시 → EC2/Lightsail SSH 실행. develop=Dev, main=Prod.

1. 파이프라인 (백엔드)

checkout → setup-java(21, temurin) → chmod +x gradlew
→ ./gradlew clean build -x test
→ Flyway 검증 (Dev: flywayInfo / Prod: flywayValidate)
→ Docker 이미지 빌드 → ECR push
→ EC2 SSH → 컨테이너 실행 (SPRING_PROFILES_ACTIVE=dev|prod)
  • Jobs는 독립 환경 → 코드/산출물 공유는 actions/upload-artifact/download-artifact
  • secret 접근: ${{ secrets.<KEY> }} (Repo Settings → Secrets → Actions) → teams/engineering/infra/environments
  • gradlew 실행 권한: git이 권한 미보존 → CI에서 chmod +x 또는 git update-index --chmod=+x

2. 배포 방식

  • 현재: GitHub Actions가 이미지 빌드 → 레지스트리 push → 서버에서 pull/run (빌드/배포 분리, 서버 리소스 절약)
  • 대안: 서버에서 docker-compose 직접 빌드 (의존성 일괄 관리, 단 서버 리소스 소모)

3. 트러블슈팅 (요지)

React 빌드 시점 환경변수

React는 빌드 시점.env가 함께 번들됨(런타임 X). docker-compose env_file로 컨테이너 env에 넣어도 실행파일에 반영 안 됨 → CI 빌드 단계에서 시크릿을 .env로 주입해 빌드. 민감 정보면 --build-args + .dockerignore, nginx 동적 주입, 백엔드 config API 중 택일.

Spring 설정 우선순위

SPRING_CONFIG_LOCATION=classpath:/application.yml,file:/application-private.yml. 외부 파일이 classpath 기본을 덮어씀. 우선순위: application-private.yml > application-{profile}.yml > application.yml.

Mixed Content

HTTPS 페이지에서 HTTP 요청 시 브라우저 차단. nginx/ALB가 HTTPS→HTTP 변환만 하고 역변환 안 해서 발생. 해결: API를 그냥 HTTPS로 요청. 부득이하면 X-Forwarded-Proto로 ALB가 원 프로토콜 전달.

CORS

브라우저 origin 기준. 서버(또는 nginx 리버스 프록시)가 Access-Control-Allow-Origin: https://<frontend-origin> 헤더 주입. ALB는 전달만 하므로 origin은 그대로.

4. 관련