💻 무료 배포 환경 구성 (EC2 + Tomcat + Oracle)
1️⃣ EC2 생성 (무료티어)
- AWS 콘솔 → EC2 → Instances → Launch instances
- AMI 선택: Amazon Linux 2023
- 인스턴스 유형: t3.micro (무료)
- 스토리지: 30 GB 기본 유지 (무료)
- 보안 그룹:
- HTTP 80, 8080 (Tomcat), SSH 22 열기
- 소스: 0.0.0.0/0 (외부 접근 허용)
- 키 페어 생성/다운로드 → PC에 저장
EC2 접속
ssh -i "C:\keys\ornably-key.pem" ec2-user@<EC2_PUBLIC_IP>
Tomcat 9 설치
cd /home/ec2-user
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.111/bin/apache-tomcat-9.0.111.tar.gz
tar -xvzf apache-tomcat-9.0.111.tar.gz
mv apache-tomcat-9.0.111 tomcat9
Tomcat 실행
cd tomcat9/bin
./startup.sh
// 로그 보기
tail -f ../logs/catalina.out

로그에도 “Server startup in [...] milliseconds”
이 부분이 나오면 톰캣이 정상적으로 실행된 것을 알 수 있다
이 상태에서 이제 WAR 배포와 외부 접속을 확인하면 된다
WAR 배포
로컬 PC에서 EC2로 WAR 업로드 (ex: BugSandwichOrnamentMall.war)
scp -i "C:\keys\ornably-key.pem" "C:\Users\J\Desktop\BugSandwichOrnamentMall.war" ec2-user@<EC2_PUBLIC_IP>:/home/ec2-user/
그전에 나는 로컬 PC에서 EC2로 WAR 업로드 됐는지 먼저 확인을 하고 싶었다
EC2 접속 후 ls -lh /home/ec2-user/ 이렇게 명령어를 입력한 뒤
.war로 끝나는 파일 이름이 보이면 정상적으로 업로드가 된 것이다

나는 안보이므로 업로드를 하면 된
로컬 Windows PC PowerShell에서 명령어 실행
scp -i "C:\keys\ornably-key.pem" "C:\Users\J\Desktop\BugSandwichOrnamentMall.war" ec2-user@54.66.241.218:/home/ec2-user/

이 명령어는 로컬에서 실행시켜야 한다 (E2C가 아닌!!)
ssh -i "C:\keys\ornably-key.pem" ec2-user@54.66.241.218
ls -lh /home/ec2-user/

그리고 SSH로 다시 접속해서 확인을 한다
마지막이 .war로 끝나는 파일이 보인다
☆*: .。. o(≧▽≦)o .。.:*☆ EC2에 WAR 파일 업로드 성공~
EC2에서 Tomcat webapps로 이동
mv /home/ec2-user/BugSandwichOrnamentMall.war /home/ec2-user/tomcat9/webapps/
SSH 접속한 상태에서 실행
mv 명령어로 WAR 파일을 Tomcat 배포 디렉터리로 이동
기본적으로 Tomcat은 webapps 안에 있는 WAR 파일을 자동으로 배포함
Tomcat 로그 확인하며 배포 상태 보기
tail -f /home/ec2-user/tomcat9/logs/catalina.out

Tomcat 로그를 실시간으로 보면서 WAR 배포 상태 확인를 한다
로그에 빨간줄로 된 메시지가 나오면 배초가 완료된 것이다!! ㅎㅎ
이제 브라우저에서 접속
http://54.66.241.218:8080/BugSandwichOrnamentMall/mainPage.do


접속 URL은 기본 Tomcat 포트 8080 기준
/mainPage.do 같은 서블릿 경로가 있다면 URL 끝에 붙이기
어쨌든 하면 잘 나오지만,, 이건 전에도 한 번 봤기 때문에 DB 연결이 중요하다

상품이 하나도 안나와잉
Amazon Linux / EC2의 기본 yum/dnf 레포지토리에는 Oracle Instant Client가
포함되어 있지 않아서 No match for argument가 떴다
즉, 그냥 yum install oracle-instantclient-basic처럼 설치는 안 되고,
Oracle에서 직접 RPM을 받아서 설치해야 했다..
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
Instant Client for Linux x86-64 (64-bit)
Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages
www.oracle.com

거기서 이렇게 두 개를 다운받았
RPM 파일 EC2로 옮기기

EC2 인스턴스 안으로 두 Oracle Instant Client RPM이 올라간 상태
EC2에서 설치
# EC2에 접속
ssh -i "C:\keys\ornably-key.pem" ec2-user@54.66.241.218
# rpm 설치
sudo yum localinstall -y oracle-instantclient-basic-21.20.0.0.0-1.el8.x86_64.rpm
sudo yum localinstall -y oracle-instantclient-sqlplus-21.20.0.0.0-1.el8.x86_64.rpm
# 설치 확인
sqlplus -v


이거 실행하면 설치된 SQL*Plus 버전이 출력됨
명령어 둘 다 아주 잘 실행이 됐다
즉, EC2에서 Oracle 클라이언트 환경은 완전히 준비된 상태
원격 Oracle 서버 정보 확인
| 항목 | 내용 |
| DB_HOST | Oracle 서버 IP 또는 도메인 |
| PORT | 기본 1521 (서버 설정 확인 필요) |
| SERVICE_NAME | XE, ORCL 등 DB 서비스 이름 |
| USERNAME | DB 계정 (예: KEVIN) |
| PASSWORD | DB 비밀번호 |
Oracle Instant Client 설치 (EC2)

EC2에서 Oracle DB를 설치할 필요는 없음. 클라이언트만 있으면 됨.
이미 $ORACLE_HOME 환경 변수 설정을 했다면 거의 준비 끝
원격 DB 접속 명령
오너블리 프로젝트에서 Oracle DB 연결 테스트
환경 변수 설정
Oracle Instant Client를 설치했으니까, 먼저 환경 변수를 본다
// 환경 변수 세팅
export ORACLE_HOME=/usr/lib/oracle/21/client64
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
// 확인
echo $ORACLE_HOME
echo $PATH
echo $LD_LIBRARY_PATH

ㅎ..
하다가 먼가 꼬여서

다시..
// Oracle 설치 확인
sqlplus -v
// Listener 활성화 확인
lsnrctl status
lsnrctl start

이렇게 하고
DB 클라이언트에서 실행
sqlplus system/1234@XE

SQL을 실행한다
CREATE USER KEVIN IDENTIFIED BY 1234;
GRANT CONNECT, RESOURCE TO KEVIN;
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER TO KEVIN;
SQL 프롬프트에서 위의 명령어를 입력한다
나 같은 경우는 사용자 KEVIN은 이미 존재해서 생성할 필요 없음.
필요한 권한(Connect, Resource, Create Session 등)을 성공적으로 부여했으므로,
이제 KEVIN 계정으로 DB에 접속하고 테이블 만들기 등 작업 가능하다
SQL 스크립트(.sql) 만들기
-- 불필요한 출력 제거
SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SET LONG 100000
SET LINESIZE 200
SET TRIMSPOOL ON
-- 스크립트 파일 저장 위치 지정
SPOOL C:\Users\J\backup.sql
테이블 생성문(DLL) 추출
SELECT DBMS_METADATA.GET_DDL('TABLE','테이블명','KEVIN') || ';'
FROM DUAL;

- 테이블마다 반복 → 테이블 이름 바꿔서 실행
- 결과가 backup.sql 파일로 저장됨
ACCOUNT 테이블명을 넣어서 해봤더니 진짜 저렇게 추출이 되었다..! 신기방기

여기 프로젝트에 사용된 나머지 테이블도 추출을 하고
ACCOUNT 데이터 INSERT문 생성
//ACCOUNT 데이터 INSERT문 생성
SET HEADING OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SET LINESIZE 200
SPOOL C:\Users\J\account_data.sql
SELECT 'INSERT INTO ACCOUNT (ACCOUNT_PK, ACCOUNT_ID, ACCOUNT_PASSWORD, ACCOUNT_NAME, ACCOUNT_EMAIL, ACCOUNT_PHONE, ACCOUNT_DATE, ACCOUNT_ROLE) VALUES ('
|| ACCOUNT_PK || ', '''
|| ACCOUNT_ID || ''', '''
|| ACCOUNT_PASSWORD || ''', '''
|| ACCOUNT_NAME || ''', '''
|| ACCOUNT_EMAIL || ''', '''
|| ACCOUNT_PHONE || ''', TO_DATE('''
|| TO_CHAR(ACCOUNT_DATE,'YYYY-MM-DD HH24:MI:SS') || ''',''YYYY-MM-DD HH24:MI:SS''), '''
|| ACCOUNT_ROLE || ''');'
FROM ACCOUNT;
SPOOL OFF

오.. 이렇게 샘플 데이터도 다 가져온다..
스크립트 저장 종료
SPOOL OFF
모든 테이블에 대한 INSERT문 추출용 SQL을 실행했
이렇게 스크립트 저장 종료까지 하면
SQL*Plus를 새로 실행

새 서버/환경에서 배포
sqlplus KEVIN/1234@XE
새 서버에서 KEVIN 계정 접속
@C:\Users\J\backup.sql
스크립트 실행
🔥🔥🔥🔥🔥🔥🔥🔥
'🍏 개발일기' 카테고리의 다른 글
| DB 연결이 안 되는 경우 : 방법을 바꿔야겠다 (0) | 2026.01.23 |
|---|---|
| EC2에서 JDBC 연결 확인 + Tomcat 배포 점검 가이드 (1) | 2026.01.22 |
| DB 연결 그리고 인스턴스 스펙 문제 | 오버블리 프로젝트 배포하기 (1) | 2026.01.21 |
| EC2 루트 볼륨 용량 늘리기 (0) | 2026.01.21 |
| 로그인부터 Board 목록까지 출력 흐름 정리해보기 (0) | 2026.01.20 |