-
Notifications
You must be signed in to change notification settings - Fork 0
PostgreSQL RDS DBeaver SSH 터널 연결
heopath edited this page Jul 28, 2026
·
1 revision
Spring Boot 서버와 데이터베이스를 분리하고, RDS를 인터넷에 직접 공개하지 않기 위한 구성입니다.
Spring Boot EC2
→ 사설 네트워크
PostgreSQL RDS
팀원 DBeaver
→ SSH 22
EC2
→ 사설 5432
RDS
| 항목 | 값 |
|---|---|
| 엔진 | PostgreSQL 17.x |
| 템플릿 | 개발/테스트 |
| 가용성 | Single-AZ |
| 인스턴스 | db.t4g.micro |
| 스토리지 | gp3 20 GiB |
| 퍼블릭 액세스 | 아니요 |
| 포트 | 5432 |
| 초기 DB | all_my_trip |
| 확장 | pgvector |
RDS 엔드포인트, 관리자 비밀번호, 팀원 계정 비밀번호는 Wiki에 기록하지 않습니다.
- EC2와 RDS는 같은 VPC를 사용합니다.
- RDS 보안 그룹의 5432 소스는 EC2 보안 그룹으로 제한합니다.
-
0.0.0.0/0으로 5432를 열지 않습니다. - 팀원 PC는 RDS에 직접 접속하지 않습니다.
RDS 생성 화면에서 가능하면 EC2 컴퓨팅 리소스에 연결을 선택합니다.
생성 후 다음을 확인합니다.
- RDS 상태가
Available - 퍼블릭 액세스가
아니요 - 포트가
5432 - 연결된 VPC가 EC2와 동일
- RDS 보안 그룹이 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();RAG 벡터 저장을 위해 관리자 계정으로 한 번 실행합니다.
CREATE EXTENSION IF NOT EXISTS vector;
SELECT extname, extversion
FROM pg_extension
WHERE extname = 'vector';마스터 계정은 초기 설정에만 사용합니다.
- Spring Boot 전용 계정
- DB 담당자 계정
- 필요하면 읽기 전용 계정
각 계정을 분리하고 최소 권한만 부여합니다.
| 항목 | 입력값 |
|---|---|
| Host | RDS 엔드포인트 |
| Port | 5432 |
| Database | all_my_trip |
| Username | 팀장에게 발급받은 개인 DB 계정 |
| Password | 개인 DB 비밀번호 |
SSL 사용을 권장합니다.
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나 단체 채팅방에 올리지 않습니다.
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 로그에 출력하지 않습니다.
테이블 변경은 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에 그대로 사용하지 않습니다.
| 증상 | 확인 |
|---|---|
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 실행 권한과 지원 버전 |
- RDS가 PostgreSQL 17.x로 실행 중
- RDS가 Private 상태
- EC2와 같은 VPC
- EC2에서 5432 연결 성공
- SSL psql 접속 성공
- pgvector 활성화 확인
- 앱 전용 계정 생성
- 팀원별 DB 계정 발급
- DBeaver SSH 터널 연결 성공
- Flyway로 스키마 변경 관리