최종 목표 내 PC에서 만들던 오너블리 쇼핑몰을 AWS 서버에서 누구나 접속 가능하게 만들기
1️⃣ WAR 파일 생성 ✅
2️⃣ AWS EC2 생성 ✅
3️⃣ EC2에 Java 설치 ✅
4️⃣ EC2에 Tomcat 설치 ✅
5️⃣ WAR 업로드 ✅
6️⃣ DB 연결
7️⃣ 외부 접속 확인
Java 설치
# 1. 패키지 정보 업데이트
sudo yum update -y
# 2. OpenJDK 17 설치 (Tomcat 9 이상 권장)
sudo yum install java-17-amazon-corretto -y
# 3. 설치 확인
java -version
SSH에서 EC2 터미널에 입력

JAVA_HOME 설정
# 1. 설치 경로 확인
sudo alternatives --config java
# 또는
readlink -f $(which java)
# 2. JAVA_HOME 환경 변수 설정 (예시)
export JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto
export PATH=$JAVA_HOME/bin:$PATH
# 3. Tomcat 재시작
tomcat9/bin/startup.sh

SSH로 접속한 EC2 터미널

Windows PowerShell에서 SSH로 접속한 EC2 터미널에서 실행
ssh -i "C:\keys\ornably-key.pem" ec2-user@<EC2_PUBLIC_IP>
<EC2_PUBLIC_IP> → EC2 공인 IP 입력
공인 IP : EC2 대시보드 → 인스턴스 → 퍼블릭 IPv4 주소 확인 → 그걸 사용
접속 성공하면 터미널 프롬프트가 위와 같이 보인다
이제 EC2 안에 있는 상태
Tomcat 확인

Tomcat이 실행 중이면 프로세스 목록 확인
명령어 : ps -ef | grep tomcat
그런데 나는
- Tomcat 프로세스가 정상적으로 실행 중 ✅
- grep 명령은 그냥 검색용이니까 두 번째 줄은 무시
WAR 파일을 EC2로 올리기
Windows PC에서 WAR 파일 올리기
- EC2 공인 IP 확인 → 예: 3.26.97.21
- 로컬 WAR 파일 위치 확인 → 예: C:\Users\J\Desktop\BugSandwichOrnamentMall.war
- SSH 키 위치 확인 → 예: C:\keys\ornably-key.pem
1. Windows → EC2로 WAR 업로드 (PowerShell에서)
아래 이 명령어 Windows PC에서 실행
실행 후 EC2 /home/ec2-user/에 WAR 파일이 올라감
scp -i "C:\keys\ornably-key.pem" "C:\Users\J\Desktop\BugSandwichOrnamentMall.war" ec2-user@3.26.97.21:/home/ec2-user/
2. EC2에서 Tomcat webapps로 이동 (SSH 접속 후)
ssh -i "C:\keys\ornably-key.pem" ec2-user@3.26.97.21
mv /home/ec2-user/BugSandwichOrnamentMall.war /home/ec2-user/tomcat9/webapps/
명령어 순서대로 SSH 터미널 접속, EC2에서 Tomcat webapps로 이동
3. 배포 확인
tail -f tomcat9/logs/catalina.out
로그에 Deployment of web application archive BugSandwichOrnamentMall.war has finished 나오면 완료 ✅
🔥 또 에러 발생
java.lang.UnsupportedClassVersionError: controller/InitListener has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
sion of the Java Runtime only recognizes class file versions up to 61.0
해석하면: InitListener 클래스가 Java 21 (class version 65)로 컴파일되어 있음
하지만 EC2 Tomcat에서 돌아가는 JVM은 Java 17 (class version 61)임
그래서 클래스를 읽을 수 없어서 WAR 배포가 실패한 상태
즉, WAR 파일이 현재 EC2 JVM 버전보다 높은 Java로 빌드됨이 문제입니다.
EC2 JVM 업그레이드 (권장)
- EC2에 Java 21 설치 후 Tomcat 실행
- 현재 Amazon Corretto 17이므로 21 설치 필요
- 설치 후 java -version 확인하고 Tomcat 재시작
# 1️⃣ 현재 설치된 Java 버전 확인
java -version
# 2️⃣ EC2에 설치된 모든 Java 버전 확인 (alternatives)
sudo alternatives --config java
# 출력된 목록에서 원하는 Java 21 번호를 입력
# 3️⃣ Java 21 선택 (예: 2번)
# 2 /usr/lib/jvm/java-21-amazon-corretto.x86_64/bin/java
# 4️⃣ 선택 후 적용 확인
java -version
# 출력 예시: openjdk version "21.0.9" ...
# ✅ 이제 EC2 JVM은 Java 21로 업그레이드 완료
Tomcat 재시작
1️⃣ 설치된 Java 버전 확인
java -version
# 현재 Tomcat이 사용하는 Java 버전 확인
# 예: openjdk version "17.0.17" → Java 17 사용 중
2️⃣ EC2에 설치된 Java 21 선택 (Amazon Corretto 21)
sudo alternatives --config java
# 설치된 Java 목록이 나오면
# 2번 선택 → Java 21을 기본으로 설정
# 확인 후 java -version으로 Java 21 적용 확인
3️⃣ Tomcat 서버 중지
/home/ec2-user/tomcat9/bin/shutdown.sh
# Tomcat 종료 → 포트 8080 점유 해제
# catalina.out에서 정상 종료 메시지 확인 가능
4️⃣ Tomcat 서버 시작
/home/ec2-user/tomcat9/bin/startup.sh
# Tomcat 시작
# catalina.out에서 "Server startup in [...] milliseconds" 확인
5️⃣ 로그 실시간 확인
tail -f /home/ec2-user/tomcat9/logs/catalina.out
# Tomcat 실행 중 발생하는 오류 및 WAR 배포 상태 확인
# 정상적으로 시작되면 오류 메시지(UnsupportedClassVersionError 등) 사라짐
6️⃣ 브라우저에서 배포 확인
# URL 접속: http://<EC2_PUBLIC_IP>:8080/BugSandwichOrnamentMall
# 페이지가 정상적으로 뜨면 WAR 배포 성공
- EC2 퍼블릭 IP 확인
SSH 접속할 때 쓴 IP 그대로 사용하면 됩니다.
예: 3.26.97.21 - 포트
Tomcat 기본 포트는 8080 입니다. - 배포 경로
WAR 파일 이름이 BugSandwichOrnamentMall.war 라면, Tomcat은 기본적으로 /BugSandwichOrnamentMall 경로로 배포합니다. - 최종 URL
http://3.26.97.21:8088/BugSandwichOrnamentMall/

접속을 했더니 이렇게 나온다
🍎 Tomcat 포트 확인 (8080/8088)
🍎 AWS 보안 그룹에서 해당 포트 허용
🍎 브라우저에서 올바른 포트로 접속
이 세 가지가 맞으면 연결 거부는 없어진다
1. 포트 확인

명령어 : netstat -tulnp | grep 8088
결과가 아무 것도 안 나왔어요 → Tomcat이 8088 포트에서 안 열려 있음

8088로 접속하려고 했다면 서버.xml에서 포트 바꾸거나 브라우저에서 8080으로 접속
즉, 브라우저에서 접속할 때 포트는 8080을 써야 합니다.
그러면서 갑자기 생각난 톰캣 포트 설정
Tomcat 설정 파일(server.xml)에 기본 HTTP 포트는 8080으로 되어 있었다
- 그런데 EC2 보안 그룹에서 8088만 열려 있어서 외부 접속이 안 됨
- 그래서 브라우저에서 http://3.26.97.21:8080/...로 접속해도 연결 거부(ERR_CONNECTION_REFUSED) 발생
포트 문제 → 브라우저 접속 거부 → 해결: EC2 보안 그룹에서 8080 포트 허용
https://ap-southeast-2.console.aws.amazon.com/ec2/home?region=ap-southeast-2#Instances:
https://ap-southeast-2.console.aws.amazon.com/ec2/home?region=ap-southeast-2#Instances:
ap-southeast-2.console.aws.amazon.com
여기에 접속해서
- AWS 콘솔 → EC2 → 좌측 메뉴 보안 그룹 클릭
- 현재 EC2에 연결된 보안 그룹 선택
- 인바운드 규칙 탭 → 편집 클릭
- 포트 범위를 지금 8088로 되어 있다면 8080으로 변경
- 유형: Custom TCP
- 포트 범위: 8080
- 소스: 0.0.0.0/0 (외부 모든 접속 허용, 필요 시 제한 가능)
- 저장 후 브라우저에서 http://3.26.97.21:8080/BugSandwichOrnamentMall/ 접속
이제 접속이 가능해진다

http://3.26.97.21:8080/BugSandwichOrnamentMall/mainPage.do
그리고 마지막으로 EC2 인스턴스를 멈추도록 하겠습니다

1️⃣ 인스턴스 중지 (Stop)
- AWS 콘솔 접속 → EC2 → Instances
- 중지할 인스턴스 선택
- 상단 메뉴에서 Instance state → Stop instance 클릭
- 확인 메시지에서 Yes, Stop 선택
💡 포인트:
- 인스턴스 중지는 CPU/메모리 요금이 안 나가지만, EBS(스토리지) 요금은 계속 발생
- 인스턴스를 중지해도 인스턴스에 배포한 WAR 파일, 설정, 데이터는 그대로 유지
2️⃣ 인스턴스 재시작 (Start)
- AWS 콘솔 → EC2 → Instances
- 중지된 인스턴스 선택
- 상단 메뉴에서 Instance state → Start instance 클릭
- 상태가 running으로 바뀔 때까지 기다림
💡 포인트:
- 퍼블릭 IP가 변경될 수 있음 → 이전 IP로 접속하려던 경우, 새 IP 확인 필요
- 이전에 열어둔 보안 그룹 포트(예: 8080) 그대로 유지됨
3️⃣ SSH 접속 후 Tomcat 확인
- 퍼블릭 IP 확인 (예: 54.206.105.59)
- 로컬 PC에서 SSH 접속:
ssh -i "C:\keys\ornably-key.pem" ec2-user@<퍼블릭_IP>
3. Tomcat 상태 확인 / 재시작:
# Tomcat 로그 확인
tail -f /home/ec2-user/tomcat9/logs/catalina.out
# 필요시 Tomcat 재시작
/home/ec2-user/tomcat9/bin/shutdown.sh
/home/ec2-user/tomcat9/bin/startup.sh
4️⃣ 배포 웹사이트 접속
브라우저에서 URL : http://<퍼블릭_IP>:8080/BugSandwichOrnamentMall/
💡 포인트:
- 포트 8080이 보안 그룹에서 열려 있어야 함
- 접속 안 되면 tail -f catalina.out로 에러 확인
마지막은 여기로~ http://54.206.105.59:8080/BugSandwichOrnamentMall/mainPage.do
'🍏 개발일기' 카테고리의 다른 글
| EC2 루트 볼륨 용량 늘리기 (0) | 2026.01.21 |
|---|---|
| 로그인부터 Board 목록까지 출력 흐름 정리해보기 (0) | 2026.01.20 |
| AWS EC2 인스턴스 생성과 EC2 서버 접속 (0) | 2026.01.20 |
| JSTL 오류 해결과 게시판 구현 (0) | 2026.01.20 |
| GitHub Pages 다음 단계: WAR 파일과 EC2로 서버 배포 이해하기 (2) | 2026.01.18 |