[OCI] 앱 서버와 DB 서버 분리 + DB 서버 로컬에 연결하기

peace w·2026년 1월 17일

AWS에서 생성한 프로젝트의 프리티어 기간이 끝나서 OCI로 옮기기로 결정했습니다.
프로젝트를 옮기면서 겪은 일들을 기록하고자 합니다.

https://velog.io/@peace_e/SSH-config-파일-여러-개-사용하기
위 내용에서 이어집니다.
OCI 계정을 발급받고 인스턴스 두 개를 만든 이후의 상황을 전제로 하고 있으며,
SSH 접속 설정을 끝내고 접속이 성공적으로 되어야 합니다.

1. 기본 세팅

업그레이드 및 timezone 설정

sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone Asia/Seoul

기본사항 체크하기

git --version
curl --version

DB서버에서 PostgreSQL 설치 + APP 서버에서 PostgreSQL 명령어만 동작 가능하게 설치
진행중인 프로젝트의 DB가 PostgreSQL이다.

sudo apt install -y postgresql <- db 서버
sudo apt install -y postgresql-client <- app 서버
psql --version <- 버전 확인용

db 유저 생성 및 권한 부여

sudo -i -u postgres psql -- 로컬접속

CREATE USER ${유저명} WITH PASSWORD '비밀번호'; -- 유저 생성

CREATE DATABASE ${db명} OWNER ${유저명}; -- db 생성


GRANT ALL PRIVILEGES ON DATABASE ${db명} TO ${유저명}; -- 권한부여
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ${유저명};
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO ${유저명};

2. VCN 설정 및 OS 방화벽

OCI Ubuntu 서버는
오라클 클라우드 방화벽(VCN)Ubuntu OS 내부 방화벽
두 가지를 전부 설정해야 비로소 외부에서 접근할 수 있다.

2-1. VCN 설정


OCI는 국내에 사용하는 케이스가 많이 없어서 찾는데 애를 먹었다.
왼쪽 햄버거 메뉴 클릭 > Networking > Virtual cloud networks
여기서 VCN 목록이 아무것도 없다면 Create VCN 버튼을 클릭하여 새롭게 VCN을 만들어준다.

생성한 VCN을 클릭 > Security 탭

Security 탭의 Security ListNetwork Security Groups(NSG) 생성

생성했으면 각각 5432(PostgreSQL) 포트를 열어준다.
Security List

Network Security

2-2. OS 방화벽

OCI에서는 Ubuntu OS의 경우, UFW(Uncomplicated Firewall)을 사용하지 않을 것을 권장한다.

/etc/iptables/rules.v4 파일을 수정하여 방화벽 권한을 제어할 수 있다.

Ubuntu 인스턴스가 UFW를 활성화한 이후 재부팅에 실패합니다.
...
해결 방법
방화벽 규칙을 수정하기 위해 UFW를 사용하지 마세요.
플랫폼 이미지는 인스턴스가 인스턴스의 부팅 및 블록 볼륨에 나가는 연결을 할 수 있도록 방화벽 규칙으로 미리 구성되어 있습니다.
자세한 내용은 필수 방화벽 규칙을 참조하십시오.
UFW는 재부팅하는 동안 인스턴스가 부팅 및 블록 볼륨에 연결할 수 없도록 이러한 규칙을 제거할 수 있습니다.
방화벽 규칙을 수정하거나 새로 만들기 위해선, 대신 /etc/iptables/rules.v4 파일을 업데이트하세요.
여기에 수정된 방화벽 규칙은 재부팅 이후 적용될 것입니다. 규칙을 즉시 적용하기 위해서는 다음을 실행하세요:

$ sudo su -
# iptables-restore < /etc/iptables/rules.v4

nano 명령어를 사용해서 etc/iptables/rules.v4 파일을 수정했다.

sudo nano /etc/iptables/rules.v4

※ 자주 쓴 명령어

명령단축키설명
파일 저장Ctrl + O파일을 저장한 후 Enter 키로 확정
편집 종료Ctrl + X파일 닫기. 변경 사항이 있으면 저장 여부를 물음
검색Ctrl + W특정 문자열 검색
잘라내기Ctrl + K커서가 위치한 줄을 잘라내기
붙여넣기Ctrl + U복사하거나 잘라낸 텍스트를 붙여넣기

5432 포트를 허용하도록 설정했다.

-A INPUT -s ${허용해줄 ip} -p tcp -m tcp --dport 5432 -j ACCEPT

설정하고 즉시 적용되도록 저장한다.

sudo -i && iptables-restore < /etc/iptables/rules.v4

테스트를 위해 db 서버를 재시작했다.
(재시작 시 iptables 설정이 초기화 되는 경우가 있음. 제대로 저장 된 건지 확인용)

sudo reboot

방화벽 설정이 제대로 적용되지 않았다면, app 서버에서 아래 명령어를 실행했을 때 db 서버에 접근할 수가 없다.

nc -zv ${db서버의 private ip} 5432

No route to host 또는 connection refused -> 연결 실패 X
Connection to ... port ... succeeded! -> 연결 성공 O

succeeded 가 떴다면 app 서버에서 db 유저명과 db명을 넣어서 제대로 조회해보자.

psql -h ${db서버의 private ip} -U ${db 유저명} -d ${db명}

비밀번호를 입력하라고 뜬다면 설정해준 비밀번호를 입력하고

Password for user ${db 유저명}: 

성공적으로 db 연결 시 ubuntu 버전 및 Type "help" for help.가 표시된다.

3. 로컬 DBeaver에 db 서버 연결하기

Main 탭에서 DB 서버 기본 설정

SSH 탭에서 APP 서버 설정

test connection 시도 -> 연결 되는 지 확인 필요


참고
https://velog.io/@doubledeltas/OCI-서버가-잘-열렸는데-외부에서-접속이-안될-때

profile
더 성장하자.

0개의 댓글