01
CI/CD가 왜 필요한가
배포를 수동으로 하면 어떤 일이 생길까요? 개발자가 서버에 SSH 접속 → jar 파일 업로드 → 서비스 재시작. 이 과정에서 실수가 생기고, 서비스가 중단되는 시간이 생깁니다. 팀원이 여러 명이면 "어떤 버전이 배포돼 있지?"를 모릅니다.
CI/CD는 코드를 push하면 자동으로 테스트·빌드·배포까지 이어지는 파이프라인입니다.
🚀 CI/CD 파이프라인 흐름
git push
→
CodePipeline
트리거
트리거
→
CodeBuild
테스트·빌드
테스트·빌드
→
CodeDeploy
EC2 배포
EC2 배포
→
배포 완료
02
CodeBuild — 빌드 환경
CodeBuild는 소스 코드를 빌드하고 테스트하는 서비스입니다. 빌드 환경(Docker 이미지)을 선택하고, buildspec.yml 파일에 빌드 명령을 씁니다.
📄 buildspec.yml — Spring Boot 빌드
version: 0.2
phases:
install:
runtime-versions:
java: corretto17
pre_build:
commands:
- echo "테스트 시작"
- ./gradlew test
build:
commands:
- echo "빌드 시작"
- ./gradlew bootJar
post_build:
commands:
- echo "빌드 완료"
artifacts:
files:
- build/libs/*.jar
- appspec.yml
- scripts/**/*
discard-paths: no
03
CodeDeploy — EC2에 무중단 배포
CodeDeploy는 빌드된 결과물을 EC2에 배포합니다. 배포 전략에 따라 중단 없이 롤링 배포하거나, Blue/Green 배포도 할 수 있습니다.
📄 appspec.yml — 배포 명세
version: 0.0
os: linux
files:
- source: /build/libs/myapp.jar
destination: /home/ec2-user/
hooks:
ApplicationStop:
- location: scripts/stop.sh
timeout: 30
AfterInstall:
- location: scripts/start.sh
timeout: 60
runas: ec2-user
ValidateService:
- location: scripts/validate.sh
timeout: 30
배포 전략
| 전략 | 방식 | 다운타임 |
|---|---|---|
| In-Place | 기존 인스턴스에 순차적으로 배포 | 있을 수 있음 |
| Rolling | 일부씩 교체 (ALB에서 잠시 제외 후 배포) | 없음 |
| Blue/Green | 새 인스턴스 그룹에 배포 후 트래픽 전환 | 없음 (롤백 쉬움) |
CodeDeploy 배포 실패 시 로그 확인
또는
/opt/codedeploy-agent/deployment-root/ 경로에 배포 로그가 있습니다.또는
sudo tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
04
Systems Manager — 운영 자동화
Parameter Store — 설정값 중앙 관리
DB 비밀번호, API 키 같은 설정을 Parameter Store에 저장하고 애플리케이션에서 가져옵니다. 코드에 하드코딩하거나 환경변수 파일에 담을 필요가 없습니다.
🔐 Parameter Store 활용
# AWS CLI로 파라미터 저장
aws ssm put-parameter \
--name "/myapp/prod/db-password" \
--value "secure-password-here" \
--type "SecureString"
# Spring Boot에서 가져오기 (의존성 추가 필요)
@Value("${spring.datasource.password}")
private String dbPassword;
# application.yml에서 SSM 참조
# spring.datasource.password: ${ssm:/myapp/prod/db-password}
Session Manager — SSH 없이 EC2 접속
CH02에서 배운 내용입니다. SSH 포트(22)를 열지 않아도 브라우저나 AWS CLI로 EC2에 접속할 수 있습니다. 모든 접속이 CloudTrail에 기록되고, ISMS-P 감사에 유리합니다.
📌 CH09 핵심 개념 요약
CI/CD 파이프라인CodePipeline(오케스트레이터) → CodeBuild(빌드) → CodeDeploy(배포)
buildspec.ymlCodeBuild의 빌드 명령 정의. 프로젝트 루트에 위치
appspec.ymlCodeDeploy의 배포 명세. 파일 복사 위치 + 훅 스크립트 정의
배포 전략Blue/Green = 무중단 + 롤백 쉬움. 프로덕션 권장
Parameter Store설정값 중앙 관리. DB 비밀번호·API 키를 코드 밖에서 관리