EC2 배포 절차
서버 정보
| 항목 | 값 |
|---|---|
| EC2 IP (Elastic IP) | 3.37.75.226 |
| EC2 타입 | t3.small |
| OS User | ec2-user |
| SSH 키 (Mac) | ~/IdeaProjects/key/agent-key.pem |
| SSH 키 (Windows) | C:\dev\key\scrapping\agent-key.pem |
| GitHub | git@github.com:MooPee/scraping.git |
| 애플리케이션 경로 | /home/ec2-user/scraping |
| 환경변수 파일 | /home/ec2-user/scraping/agent.env |
| DB | MySQL 8.0 (EC2 로컬, localhost:3306) |
주의: EC2 배포는 사용자가 명시적으로 요청할 때만 진행한다.
배포 절차
1. SSH 접속
ssh -i ~/IdeaProjects/key/agent-key.pem ec2-user@3.37.75.226
2. 로컬에서 빌드 후 EC2로 전송
EC2(t3.small)에서 직접 빌드 시 메모리/CPU 부족으로 SSH 세션이 끊길 수 있다. 반드시 로컬에서 빌드 후 SCP로 전송한다.
# 로컬에서 빌드
./gradlew bootJar
# EC2로 JAR 전송
scp -i ~/IdeaProjects/key/agent-key.pem \
build/libs/agent-0.0.1-SNAPSHOT.jar \
ec2-user@3.37.75.226:/home/ec2-user/scraping/build/libs/
빌드 결과물: build/libs/agent-0.0.1-SNAPSHOT.jar
3. 서비스 재시작
sudo systemctl restart agent
5. 배포 확인
# 서비스 상태 확인
sudo systemctl status agent
# 애플리케이션 시작 로그 확인 (필수)
sudo journalctl -u agent -f --no-pager | grep "Started AgentApplication"
Started AgentApplication 로그 확인 후 배포 완료.
배포 스크립트 (로컬 실행)
./gradlew bootJar && \
scp -i ~/IdeaProjects/key/agent-key.pem \
build/libs/agent-0.0.1-SNAPSHOT.jar \
ec2-user@3.37.75.226:/home/ec2-user/scraping/build/libs/ && \
ssh -i ~/IdeaProjects/key/agent-key.pem ec2-user@3.37.75.226 \
"sudo systemctl restart agent"
systemd service 파일
# /etc/systemd/system/agent.service
[Unit]
Description=Scraping Agent Application
After=network.target
[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/scraping
EnvironmentFile=/home/ec2-user/scraping/agent.env
ExecStart=/usr/bin/java -Xms128m -Xmx384m -jar /home/ec2-user/scraping/build/libs/agent-0.0.1-SNAPSHOT.jar
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
service 파일 변경 시
sudo systemctl daemon-reload
sudo systemctl restart agent
환경변수 추가 시
# 1. agent.env 파일 편집
vi /home/ec2-user/scraping/agent.env
# 2. 서비스 재시작 (환경변수 반영)
sudo systemctl restart agent
# 3. 시작 로그 확인
sudo journalctl -u agent -f
Slack 알림
배포 후 서버 시작/종료 시 Slack 채널에 자동 알림이 발송된다.
[서버 시작] Agent 서버가 정상적으로 시작되었습니다.
[서버 종료] Agent 서버가 종료됩니다.
[500 에러] 서버 오류 발생 — 경로, 예외, 메시지 포함
[배치 실패] 배치 실행 중 오류 발생 — 예외, 메시지 포함
Slack 웹훅 URL은 SLACK_WEBHOOK_URL 환경변수로 관리한다.
롤백 절차
# 이전 커밋으로 되돌리기
git log --oneline -5 # 커밋 해시 확인
git checkout <이전-해시>
./gradlew bootJar
sudo systemctl restart agent
트러블슈팅
서비스가 시작되지 않을 때
# 전체 로그 확인
sudo journalctl -u agent -n 100
# 에러 필터링
sudo journalctl -u agent | grep "ERROR"
포트 8080 점유 확인
sudo lsof -i :8080
sudo kill -9 <PID>
DB 연결 실패 시
# EC2 로컬 MySQL 상태 확인
sudo systemctl status mysqld
mysql -u admin -p scraping
환경변수 누락 시
# 현재 로드된 환경변수 확인
sudo systemctl show agent --property=Environment
# agent.env 내용 확인
cat /home/ec2-user/scraping/agent.env