개발 가이드 설정 (Setup) EC2 배포 절차
최종 수정:

EC2 배포 절차

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

EC2 배포 절차

서버 정보

항목
EC2 IP (Elastic IP)3.37.75.226
EC2 타입t3.small
OS Userec2-user
SSH 키 (Mac)~/IdeaProjects/key/agent-key.pem
SSH 키 (Windows)C:\dev\key\scrapping\agent-key.pem
GitHubgit@github.com:MooPee/scraping.git
애플리케이션 경로/home/ec2-user/scraping
환경변수 파일/home/ec2-user/scraping/agent.env
DBMySQL 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
AI 문서 검색

현재 페이지 내용을 기반으로 질문하세요.