이번 글에서는 Spring Boot 백엔드 프로젝트를 AWS EC2에 Docker로 배포하고, GitHub Actions로 자동화 배포(CI/CD)를 구성하는 전체 과정을 자세하게 정리합니다.
✅ 목표
- Spring Boot 애플리케이션을 Docker 이미지로 빌드하여 EC2에 배포
- GitHub에 main 브랜치 푸시 시 자동으로 빌드 & 배포되도록 구성
- RDS(MySQL) 연동 포함
📌 사전 준비
- AWS EC2 인스턴스 (Amazon Linux 2023)
- AWS RDS(MySQL 8.x)
- GitHub 레포지토리
- Spring Boot 프로젝트 + Dockerfile
- 로컬에 SSH 키 쌍 생성 (자동화용, GitHub Actions용)
1️⃣ EC2 인스턴스 생성 및 기본 설정
1-1. EC2 인스턴스 생성
- Amazon Linux 2023 선택
- t2.micro 이상 인스턴스 선택 (무료 티어 사용 가능)
- 키 페어 생성
- RSA 형식 권장 (기존에 있다면 재사용 가능)
- .pem 파일은 다운로드 후 절대 유출되지 않도록 안전하게 보관
- 로컬에서 접속 시 필요하므로 Git이나 Google Drive 등에 업로드하지 말 것
1-2. 보안 그룹 설정
- 인바운드 규칙 추가
- SSH (22번 포트): 내 IP로 제한 권장
- HTTP (80번 포트)
- 앱 포트 (예: 8080)도 열기
1-3. EC2 접속 (로컬에서)
ssh -i "your-key.pem" ec2-user@<EC2_PUBLIC_IP>
2️⃣ RDS(MySQL) 생성 및 연결
- RDS 콘솔에서 MySQL 8.x 인스턴스 생성
- 퍼블릭 액세스 허용 설정
- EC2 인스턴스 보안 그룹을 RDS 인바운드 규칙에 등록 (3306 포트 허용)
- EC2에 MySQL 클라이언트 설치 후 접속 테스트
sudo yum install mysql -y
mysql -h <RDS_ENDPOINT> -u <USER> -p
3️⃣ EC2에 Docker 및 JDK 설치
3-1. Docker 설치
sudo yum update -y
sudo yum install docker -y
sudo service docker start
sudo usermod -aG docker ec2-user
newgrp docker
3-2. JDK 설치 (javac 포함)
sudo yum install java-17-amazon-corretto-devel -y
- java -version, javac -version 둘 다 정상 출력 확인
4️⃣ Spring Boot 프로젝트에 Dockerfile 추가
FROM openjdk:17-jdk-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
5️⃣ EC2에 애플리케이션 최초 배포
git clone git@github.com:your-username/your-repo.git
cd your-repo
./gradlew build -x test
docker build -t your-app .
docker run -d --name your-app -p 8080:8080 your-app
6️⃣ GitHub Actions용 SSH 키 설정
키 생성 (로컬에서)
ssh-keygen -t ed25519 -C "github-actions" -f ~/.ssh/github-actions-key
- 공개키 (.pub) 내용은 EC2의 ~/.ssh/authorized_keys에 추가
- 비공개키는 GitHub 레포의 Secrets에 등록
7️⃣ GitHub Secrets 등록
1. Github Action을 사용할 레파지토리에 접속
2. Settings > Security > Secrets and variables > Actions 클릭
3. New repository secret 버튼 클릭
4. 아래 두개 등록
키 이름 / 설명
EC2_KEY_PRIVATE | 위에서 생성한 비공개 SSH 키 |
EC2_KNOWN_HOSTS | ssh-keyscan -H <EC2_IP> 실행 결과 값 |
8️⃣ GitHub Actions Workflow 작성
.github/workflows/deploy.yml:
프로젝트 root 경로에 .github/workflows 경로를 만들어주시고 아래 deploy.yml을 작성하시면 됩니다.
name: Deploy to EC2
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.EC2_KEY_PRIVATE }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo "${{ secrets.EC2_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts
- name: Deploy to EC2
run: |
ssh ec2-user@<EC2_IP> << 'EOF'
cd ~/your-repo
git pull origin main
./gradlew build -x test
docker stop your-app || true
docker rm your-app || true
docker build -t your-app .
docker run -d --name your-app -p 8080:8080 your-app
EOF
9️⃣ 배포 확인
- GitHub main 브랜치 푸시
- GitHub Actions → 실행 로그 확인
- EC2 접속 후 docker ps로 컨테이너 확인
- http://<EC2_IP>:8080 접속 테스트
🧩 추가 팁
✅ application.yml 배포
.gitignore에 포함된 application.yml은 아래 명령어로 EC2에 전송할 수 있습니다.
Windows PowerShell:
scp -i "C:/[key파일경로]/your-key.pem" "C:/workspace/src/main/resources/application.yml" ec2-user@<EC2_IP>:~/your-repo/src/main/resources/
# -i "C:/[key파일경로]/your-key.pem" : EC2 접속할 때 썼던 key 파일 경로
# "C:/workspace/src/main/resources/application.yml" : EC2에 업로드 할 파일 경로
# ec2-user@<EC2_IP>:~/your-repo/src/main/resources/ : EC2상에서 application.yml이 들어가야하는 경로
macOS:
scp -i ~/key/your-key.pem ~/your-repo/src/main/resources/application.yml ec2-user@<EC2_IP>:~/your-repo/src/main/resources/
✅ 마무리
이제 EC2 + Docker + RDS + GitHub Actions 기반으로 Spring Boot 앱을 자동 배포할 수 있습니다. 다음 단계로는 Nginx, HTTPS, 무중단 배포 등으로 확장해보세요.
'Back-End > AWS' 카테고리의 다른 글
[EC2/RDS] 💡 로컬 PC에서 EC2를 통해 AWS RDS에 포트포워딩으로 접속하는 방법 (1) | 2025.08.06 |
---|---|
[EC2] ✅ EC2 인스턴스 재시작 후 바뀐 퍼블릭 IP 처리 방법 (GitHub Actions) (0) | 2025.08.06 |
[EC2] EC2에 application.yml 업로드하기 (Windows & macOS) (0) | 2025.08.05 |
[EC2] EC2에 SSH 접속하는 방법 (Windows & macOS) (0) | 2025.08.05 |