🍏 개발일기

무료 배포 환경 구성.... 이어서 계속

보배 진 2026. 1. 22. 00:38

💻 무료 배포 환경 구성 (EC2 + Tomcat + Oracle)

1️⃣ EC2 생성 (무료티어)

  1. AWS 콘솔 → EC2 → Instances → Launch instances
  2. AMI 선택: Amazon Linux 2023
  3. 인스턴스 유형: t3.micro (무료)
  4. 스토리지: 30 GB 기본 유지 (무료)
  5. 보안 그룹:
    • HTTP 80, 8080 (Tomcat), SSH 22 열기
    • 소스: 0.0.0.0/0 (외부 접근 허용)
  6. 키 페어 생성/다운로드 → 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

스크립트 실행

 

🔥🔥🔥🔥🔥🔥🔥🔥