Spring Boot 애플리케이션 EC2에 자동 배포하기 (CD 파이프라인 구축)

Dev.Dana·2025년 3월 30일

Zipitda

목록 보기
3/3
post-thumbnail

지난 글에서 CI를 끝냈다. 이제는 CD 환경을 구성해 볼 차례이다.
일반적인 CD의 흐름은 아래와 같다.

1. GitHub에 main 브랜치로 코드가 push됨
↓
2. Github Actions가 Docker 이미지 빌드하고 DockerHub에 업로드
↓
3. EC2 서버에서 최신 Docker 이미지 pull → 기존 컨테이너 중지 → 새 컨테이너 실행
↓
✅ 자동 배포 완료

즉, 서버가 항상 최신 이미지를 자동으로 가져와서 실행 하도록 만드는 게 CD의 핵심인 것이다.

1. EC2 생성하기



키페어를 만들어 놓지 않았다면 아래 표를 참고해서 만든 후 적용하기

키 파일 저장 할 때는 내 프로젝트 폴더 옆에 keys/ 디렉토리 만들어서 보관한다.
(예시 경로 : ~/keys/zipitda-key.pem)
절대 GitHub에 올리면 안 됨!

  • Name : zipitda-server (원하는 이름으로)
  • AMI : Ubuntu 24.04 LTS (Free Tier Eligible)
  • Instance type : t2.micro (프리티어 무료 대상)
  • Key pair : 새로 생성 또는 기존에 만든 것 선택
  • Network settings : Allow SSH (22) 반드시 열어야 함
    • 추가 포트 열기 : 8081, 80 도 추가로 열어두면 좋다.

위 그림과 같이 설정이 모두 끝났다면 Launch Instance를 클릭하여 EC2 서버를 생성한다.

생성하고 나면 CloudWatch와 같은 billing Alarm을 생성하라고 뜨는데 이 부분은 개인 상황에 맞게 설정하면 된다.
나는 돈 내고 싶지 않아서 $1 이상 청구될 경우 바로 메일오게 설정해뒀다ㅎㅎ

2. EC2 에 접속하기

public IPv4 주소 확인

AWS 콘솔 → EC2 → 인스턴스 목록에 들어간 후 내가 만든 인스턴스를 클릭한다.
위 처럼 “퍼블릭 IPv4 주소”를 복사한다.

터미널 열고 .pem 파일 있는 위치로 이동

cd ~/Downloads  # pem 파일이 있는 폴더로 이동 (본인 위치에 따라 다름)

접속 명령어 입력 (Mac 기준)

chmod 400 zipitda-key.pem  # 처음 한 번만 권한 설정
ssh -i zipitda-key.pem ubuntu@<퍼블릭_IP>
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

위와 같이 뜬다면 처음 EC2에 접속했기 때문에 나오는 경고이다.
이 IP 주소가 진짜 맞는지 아직 인증된 적 없는데 접속할거임? 이라고 떴기때문에 yes 입력하고 넘어가면 된다.

Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-xxx-x86_64)
ubuntu@ip-172-31-xx-xx:~$

위와 같은 메세지가 뜨면 이제 EC2 서버에 접속 성공한 것~~!

3. Docker 설치

패키지 업데이트

sudo apt update

처음 서버에 들어왔기 때문에 sudo 명령어로 패키지 업데이트를 해주고 시작한다.

Docker 설치

sudo apt install -y docker.io

Docker 자동 시작 설정 + 실행

sudo systemctl enable docker
sudo systemctl start docker

이제 서버가 재시작되어도 자동으로 Docker가 켜지게 되었다.

현재 사용자도 Docker 그룹에 추가

sudo usermod -aG docker $USER

docker build, docker run, docker ps 등의 명령어들을 sudo 없이도 쓸 수 있게 된다.
적용을 위해선 로그아웃/재접속 또는 exit 후 다시 접속해줘야 해야 됨

설치 확인

docker --version

Docker version 20.10.x, build xxxx

도커 버전이 저렇게 나온다면 이제 Docker 설치도 완료~~

DockerHub에서 이미지 pull 해오기

Github Actions로 DockerHub에 자동 배포 CI 파이프라인 만들기
여기에서 DockerHub에 이미지 올리기를 완료했었다.
이제 올라간 이미지를 가지고 서버에 배포할 차례!

docker pull <docker-id>/<project-name>:latest

# 성공했다면 아래와 같은 메세지가 뜬다!
latest: Pulling from <docker-id>/<project-name>
Digest: sha256:xxxxxxxx
Status: Downloaded newer image for <docker-id>/<project-name>:latest

컨테이너 실행하기

docker run -d \
  --name <project-name>-container \
  -p 8081:8081 \
  <docker-id>/<project-name>:latest
  • -d : 백그라운드 모드로 실행
  • --name: 컨테이너 이름
  • -p : EC2의 8081 포트 → 컨테이너의 8081 포트 연결
    (난 8081을 사용했기때문에 port옵션을 넣어줌)
  • 마지막줄 : 사용할 이미지 이름

성공했는지 확인하기 위해선 docker ps를 날려보면 알 수 있다.

글을 마무리하며

일단 이번 집잇다 프로젝트는 잘 올라갔는데..
로컬에서 작업할 때 docker-compose에 mysql이랑 redis를 올려서 작업했었기 때문에, EC2에서도 spring application까지 포함하여 한번에 compose로 띄우려고 했었다.
하지만 서버가 프리티어다보니 리소스가 부족해 과부하로 서버가 다운되는 문제가 발생했다ㅠㅠㅠㅠ..

결국 아키텍쳐부터 다시 구성해서 작업해 보도록한다. 일단 이번 글은 CD를 구현하는 것으로 만족, 이제 git develop 브랜치에 merge 또는 push되면 자동으로 DockerHub 올라가게 되고, 해당 이미지파일을 기반으로 ec2에 배포가 되도록 구성되어 있다.

(자연스럽게 CI/CD를 이어서 3편은 집잇다 아키텍쳐 구상도를 바탕으로 쓰게 되겠구만 하하 )

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글