SSH 터널링으로 로컬 PC와 Private Subnet DB 연결해서 프로젝트 실행하기

2025. 9. 19. 14:59·개발 노트

최근에 운영 서버 DB를 새로 만들어서 테이블 스키마를 개발 DB와 똑같이 생성해야하는 일이 있었다.

하지만 손으로 하나하나 만들기는 귀찮았기 때문에 운영 DB에 프로젝트를 연결해서 `ddl-auto: create`로 자동생성하려고 했다.

 

그런데 DB가 Private Subnet에 있어서 문제가 됐다.

DB가 인터넷에 연결돼있지 않기 때문에, application.yml에 DB 엔드포인트를 제대로 넣더라도 실행할 때 DB 엔드포인트를 못 찾아서 프로젝트 실행이 안된다.

이때 아래에서 설명할 SSH 터널링으로 로컬 포트랑 RDS 포트를 연결해서 스키마를 생성했다.

 

프로젝트 JAR를 빌드해서 Bastion Host로 옮겨 실행하는 방법도 있긴 한데,

번거롭기도 하고 실수할 여지가 있기 때문에 SSH 터널링이 조금 더 안전할 것 같다.

 

SSH 터널링으로 로컬 포트와 RDS 연결하기

Bastion host을 통해 내 로컬 컴퓨터와 Private Subnet의 RDS를 연결하는 방법이다.

아래 그림처럼 터널을 만들어보자.

Bastion host는 인터넷에 연결돼있기 때문에 내 PC에서 접속할 수 있다.

RDS는 인터넷에서 바로 연결은 안되지만, Bastion Host를 통해서 3306 포트에 접근하는 건 가능하다.

그러므로 내 PC의 3307 포트와 RDS의 3306 포트를 연결해서, localhost:3307로 접속 시 RDS:3306으로 연결되도록 할 것이다.

 

1. 터미널에서 아래 명령어 입력

RDS 엔드포인트와 Bastion Host 주소가 다음과 같다고 하자.

- RDS 엔드포인트: rds-xxxx.ap-northeast-2.rds.amazonaws.com

- Bastion Host 주소: 12.34.56.78, 유저네임: ubuntu

 

`ssh -i <pem키 경로> -L 3307:rds-xxxx.ap-northeast-2.rds.amazonaws.com:3306 ubuntu@12.34.56.78`

3307은 내 로컬에서 사용할 포트고, 3306은 RDS의 MySQL포트이다.

3307은 다른 숫자로 바꿔도 무방하다.

 

연결이 완료되면, 아래 명령어를 쳐보자.

 

2. 로컬의 application.yml의 url 수정

RDS 엔드포인트 대신 localhost:3307에 연결하도록 임시로 변경해준다.

spring:
    datasource:
        # 기존 url: jdbc:mysql://${DB_URL}/db-name
        url: jdbc:mysql://localhost:3307/db-name # 임시 수정
        username: ${DB_USER}
        password: ${DB_PASSWORD}

 

3. 평소처럼 애플리케이션 실행

 

ddl-auto를 create로 설정하면, SSH 터널을 통해 RDS에 접속해서 열심히 테이블을 생성해준다.

 

4. 터널 삭제하기

터미널을 끄면 자동으로 삭제된다.

 

'개발 노트' 카테고리의 다른 글

gemini-cli로 더미 데이터 바이브 생성한 후기  (0) 2025.07.31
[HTTPS] Let's Encrypt + Certbot + nip.io로 도메인 발급 없이 HTTPS 등록하기  (0) 2025.02.19
[AWS] DNS 미설정으로 인한 RDS 생성 불가  (0) 2025.02.14
'개발 노트' 카테고리의 다른 글
  • gemini-cli로 더미 데이터 바이브 생성한 후기
  • [HTTPS] Let's Encrypt + Certbot + nip.io로 도메인 발급 없이 HTTPS 등록하기
  • [AWS] DNS 미설정으로 인한 RDS 생성 불가
jec0101
jec0101
생각이 많은 사람
  • jec0101
    생각하는 사람
    jec0101
    • 분류 전체보기 (13)
      • 공부 (1)
      • 개발 노트 (4)
      • 회고 (4)
      • 기타 (4)
        • 주절주절 (1)
      • 스프링부트 (0)
        • @Annotations (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    https 적용
    Spring Security
    주저리주저리
    certbot
    util vs service
    리눅스 명령어
    SW 마에스트로
    회고
    합격 후기
    springboot
    AWS
    EC2
    삼성전자 dx
    인프라
    소프트웨어 마에스트로
    effectively final
    자바 람다
    람다 제약조건
    Service
    nginx
    소마 합격후기
    RDS
    삼성전자 알고리즘
    rds 오류
    삼성전자 dx 알고리즘 특강
    UTIL
    nip.io
    람다 스코프
    let's encrypt
    VPC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jec0101
SSH 터널링으로 로컬 PC와 Private Subnet DB 연결해서 프로젝트 실행하기
상단으로

티스토리툴바