EC2 배포

AWS EC2 배포 및 운영 절차 (systemd 기반)

마지막 수정: 2026-05

EC2 배포

서버 정보

항목
EC2 OSAmazon Linux 2
OS Userec2-user
앱 경로/opt/{서비스명}/
서비스명{서비스명}
포트8080

주의: EC2 배포는 담당자가 명시적으로 요청할 때만 진행한다.


배포 순서

배포는 반드시 아래 순서를 따른다:

git pull → 빌드 → jar 전송 → 서비스 재시작

1. 최신 코드 Pull

git pull origin master

2. Gradle 빌드

# 전체 클린 빌드 (테스트 제외)
./gradlew clean build -x test

빌드 결과물: build/libs/{서비스명}-0.0.1-SNAPSHOT.jar

3. jar 파일 EC2 전송

scp -i ~/key/{서비스명}-key.pem build/libs/*.jar ec2-user@{EC2_IP}:/app/

4. 서비스 재시작

sudo systemctl restart {서비스명}

5. 배포 확인

# 서비스 상태 확인
sudo systemctl status {서비스명}

# 애플리케이션 시작 로그 확인 (필수)
sudo journalctl -u {서비스명} -f --no-pager | grep "Started"

한 줄 배포 명령

git pull && ./gradlew clean build -x test && scp build/libs/*.jar ec2-user@{EC2_IP}:/app/ && sudo systemctl restart {서비스명}

환경변수 설정

systemd service 파일에 Environment= 추가

# /etc/systemd/system/{서비스명}.service
[Unit]
Description={서비스명} Application
After=network.target

[Service]
User=ec2-user
WorkingDirectory=/opt/{서비스명}
EnvironmentFile=/opt/{서비스명}/{서비스명}.env
Environment=ANTHROPIC_API_KEY=sk-ant-...
ExecStart=/usr/bin/java -jar /opt/{서비스명}/{서비스명}.jar \
  --spring.profiles.active=prod
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

ANTHROPIC_API_KEY 환경변수 추가는 필수다.

환경변수 파일 방식

# /opt/{서비스명}/{서비스명}.env
DB_URL=jdbc:oracle:thin:@{host}:1521:{sid}
DB_USERNAME=appuser
DB_PASSWORD=...
ANTHROPIC_API_KEY=sk-ant-...
JWT_SECRET=...

service 파일 변경 시

sudo systemctl daemon-reload
sudo systemctl restart {서비스명}

환경변수 추가 시

# 1. service 파일 또는 .env 파일 편집
sudo vi /opt/{서비스명}/{서비스명}.env

# 2. 서비스 재시작 (환경변수 반영)
sudo systemctl restart {서비스명}

롤백 절차

# 이전 커밋으로 되돌리기
git log --oneline -5        # 커밋 해시 확인
git checkout <이전-해시>
./gradlew clean build -x test
scp build/libs/*.jar ec2-user@{EC2_IP}:/app/
sudo systemctl restart {서비스명}

트러블슈팅

서비스가 시작되지 않을 때

# 전체 로그 확인
sudo journalctl -u {서비스명} -n 100

# 에러 필터링
sudo journalctl -u {서비스명} | grep "ERROR"

포트 8080 점유 확인

sudo lsof -i :8080
sudo kill -9 <PID>

SSH 접속

ssh -i ~/key/{서비스명}-key.pem ec2-user@{EC2_IP}