Skip to content

PostgreSQL RDS DBeaver SSH 터널 연결

heopath edited this page Jul 28, 2026 · 1 revision

PostgreSQL RDS와 DBeaver SSH 터널 연결

1. 구성 목적

Spring Boot 서버와 데이터베이스를 분리하고, RDS를 인터넷에 직접 공개하지 않기 위한 구성입니다.

Spring Boot EC2
  → 사설 네트워크
PostgreSQL RDS

팀원 DBeaver
  → SSH 22
EC2
  → 사설 5432
RDS

2. 적용 기준

항목
엔진 PostgreSQL 17.x
템플릿 개발/테스트
가용성 Single-AZ
인스턴스 db.t4g.micro
스토리지 gp3 20 GiB
퍼블릭 액세스 아니요
포트 5432
초기 DB all_my_trip
확장 pgvector

RDS 엔드포인트, 관리자 비밀번호, 팀원 계정 비밀번호는 Wiki에 기록하지 않습니다.

3. 네트워크 설정

  • EC2와 RDS는 같은 VPC를 사용합니다.
  • RDS 보안 그룹의 5432 소스는 EC2 보안 그룹으로 제한합니다.
  • 0.0.0.0/0으로 5432를 열지 않습니다.
  • 팀원 PC는 RDS에 직접 접속하지 않습니다.

RDS 생성 화면에서 가능하면 EC2 컴퓨팅 리소스에 연결을 선택합니다.

생성 후 다음을 확인합니다.

  1. RDS 상태가 Available
  2. 퍼블릭 액세스가 아니요
  3. 포트가 5432
  4. 연결된 VPC가 EC2와 동일
  5. RDS 보안 그룹이 EC2 보안 그룹의 접근을 허용

4. EC2에서 연결 시험

PostgreSQL 17 클라이언트와 네트워크 검사 도구를 설치합니다.

sudo dnf install -y postgresql17 nmap-ncat
psql --version

포트 확인:

nc -vz <RDS_ENDPOINT> 5432

성공 예시:

Ncat: Connected to <PRIVATE_IP>:5432.

DB 연결:

psql "host=<RDS_ENDPOINT> port=5432 dbname=all_my_trip user=<DB_USER> sslmode=require"

접속 후 SQL은 한 줄씩 실행합니다.

\conninfo
SELECT version();
SELECT current_database();

5. pgvector와 계정 원칙

RAG 벡터 저장을 위해 관리자 계정으로 한 번 실행합니다.

CREATE EXTENSION IF NOT EXISTS vector;

SELECT extname, extversion
FROM pg_extension
WHERE extname = 'vector';

마스터 계정은 초기 설정에만 사용합니다.

  • Spring Boot 전용 계정
  • DB 담당자 계정
  • 필요하면 읽기 전용 계정

각 계정을 분리하고 최소 권한만 부여합니다.

6. DBeaver Main 설정

항목 입력값
Host RDS 엔드포인트
Port 5432
Database all_my_trip
Username 팀장에게 발급받은 개인 DB 계정
Password 개인 DB 비밀번호

SSL 사용을 권장합니다.

7. DBeaver SSH 설정

SSH 탭에서 터널을 활성화합니다.

항목 입력값
Host/IP EC2의 현재 공인 IP 또는 탄력적 IP
Port 22
User Name ec2-user
Authentication Method Public Key
Private Key 개인에게 안전하게 발급된 .pem

먼저 Test tunnel configuration을 실행한 뒤 전체 Test Connection을 실행합니다.

공용 PEM을 GitHub나 단체 채팅방에 올리지 않습니다.

8. Spring Boot 설정

EC2 환경 파일 예시:

RAG_DB_URL=jdbc:postgresql://<RDS_ENDPOINT>:5432/all_my_trip?sslmode=require
RAG_DB_USERNAME=<APP_DB_USER>
RAG_DB_PASSWORD=<APP_DB_PASSWORD>

실제 변수명은 프로젝트의 application-prod.yml과 일치시킵니다.

DB 비밀번호는 저장소, GitHub Wiki, GitHub Actions 로그에 출력하지 않습니다.

9. Flyway 원칙

테이블 변경은 DBeaver에서 임의로 실행하지 않고 Flyway 파일로 관리합니다.

src/main/resources/db/migration/
  V1__baseline_schema.sql
  V2__seed_reference_data.sql
  V3__create_rag_vector_tables.sql
  V4__add_travel_record.sql
  • 이미 공유된 마이그레이션 파일은 수정하지 않습니다.
  • 변경이 필요하면 다음 번호의 새 파일을 추가합니다.
  • 스키마와 더미데이터를 파일로 분리합니다.
  • MySQL 전용 문법을 PostgreSQL에 그대로 사용하지 않습니다.

10. 오류 해결

증상 확인
nc: command not found sudo dnf install -y nmap-ncat
nc timeout 같은 VPC, RDS 상태, 5432 보안 그룹
password authentication failed 계정명·비밀번호·DB명
DBeaver SSH timeout EC2 현재 IP와 SSH 22의 내 IP /32
SSH 인증 실패 ec2-user, 올바른 PEM, 키 권한
pgvector 없음 CREATE EXTENSION vector 실행 권한과 지원 버전

11. 완료 기준

  • RDS가 PostgreSQL 17.x로 실행 중
  • RDS가 Private 상태
  • EC2와 같은 VPC
  • EC2에서 5432 연결 성공
  • SSL psql 접속 성공
  • pgvector 활성화 확인
  • 앱 전용 계정 생성
  • 팀원별 DB 계정 발급
  • DBeaver SSH 터널 연결 성공
  • Flyway로 스키마 변경 관리

Clone this wiki locally