일단 CI/CD 얘기를 하기전에 나는 로컬에서도 docker-compose를 사용해서 켰었다. 하지만 이것의 문제점은 빌드하는데 시간이 너무 오래걸린다는 단점이 있어서 이번 기회에 local / prod 로 나눠서 구분을 하기로 했다.
Local/prod 분리
공통 설정과 환경별 설정을 분리했는데, application.yml 에는 환경에 상관없이 공통으로 쓰는 값을 넣어놨다.
ex ) 메일,jwt, cors기본값, 서버 포트 기본값, gemini, s3 등등
나머지는 환경별 설정으로 application-local.yml 과 application-prod.yml로 분리해서 빼놨고,
SPRING_PROFILES_ACTIVE=local 또는 prod로 선택해서 빌드할 수 있다.
또한 아키텍쳐 구조도 살짝 달라졌다.
Local에서는 더 이상 docker-compose 로 서버까지 감싸지 않는다. DB와 Redis만 docker 로 묶어서 돌리고 intellij에 환경변수를 넣어놓고 실행되게 만들었다.
Prod에서는 기존 방식인데, docker-compose로 server,redis,nginx를 묶어서 돌리고 DB는 RDS를 이용한다.
CI
- 소스 체크아웃
- Java 17 세팅
- Gradle 빌드
- DockerHub 로그인
- linux/amd64로 이미지 빌드 후 latest 태그로 push
CD
- EC2 접속 후 ~/deploy 이동
- 필수 파일/디렉토리 존재 체크
- .env
- docker-compose.yml
- nginx
- 불필요 이미지 prune
등이 있다고 생각하면 된다. 당연히 EC2 정보 등은 git actions 안에 넣어놨다.
'Project > Afternote' 카테고리의 다른 글
| [DB 리팩터링] 데이터 무결성을 위한 스키마 분리 및 Native SQL 기반 마이그레이션 (0) | 2026.04.26 |
|---|---|
| [CDN] S3 presigned URL에서 CDN 도메인 전환하기 (0) | 2026.04.12 |
| [VPC/EC2/RDS] 인프라 적용기 (0) | 2026.03.29 |
| [트러블슈팅] OCP 위반 코드 수정 (0) | 2026.03.22 |
| [트러블 슈팅] Test 환경 구축 (0) | 2026.03.22 |