본문 바로가기

⭐ AWS/RDS

Postgres DB 커넥션 시 주의사항 (백엔드 연결) 및 터널링

1. 문제 DB 커넥션이 안된다. (아래의 오류 참조)

2022-09-20 08:02:18.495 [WARN ] org.postgresql.Driver:526 - JDBC URL must contain a / at the end of the host or port: jdbc:postgresql://ap-northeast-2.rds.amazonaws.com:5432
2022-09-20 08:02:18.498 [WARN ] o.h.e.j.e.i.JdbcEnvironmentInitiator:133 - HHH000342: Could not obtain connection to query metadata
java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, jdbc:postgresql://ap-northeast-2.rds.amazonaws.com:5432
        at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:110)
        at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:331)
        at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:114)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:108)
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)

2. 터널링 통해 DB를 붙는다.

터널링은 동일한 VPC내에 EC2 인스턴스가 존재 해야하며, 해당 인스턴스를 통해 내부에 DB에 접근하는것을 의미한다.

보통은 아래의 프로세스를 통해서 접근이 가능하다.

3. 터널링을 통해 접근한 DB 정보 확인하기

- 아래와 같이 DB에 접속이 된것을 확인할 수 있다.

* 주의할점!

Postgres DB는 최초 생성시 DB를 따로 정의하지 않으면, postgres라는 기본 DataBases를 생성한다.

그래서, 백엔드에서 DB의 연결을 위해서는 DB URL을 맵핑 해야하는데 그 최초 맵핑 주소는 아래와 같이 설정을 해야한다.

예시는 아래와 같다.

spring:
  config:
    activate:
      on-profile: prod
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://test-db.abcdefghijklmn.ap-northeast-2.rds.amazonaws.com:5432/postgres
    username: postgres
    password: test1234
   # url: jdbc:postgresql://localhost:5432/test-db
   # username: psqluser
   # password: admin

  jpa:
    hibernate:
      ddl-auto: none # When you launch the application for the first time - switch "none" at "create"
    show-sql: true
    database: postgresql
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    open-in-view: false
    generate-ddl: true

- 그래서 여기서 이야기 하고자하는 것은 최초 맵핑 url 주소를 아래와 같이 설정을 해줘야 한다. DB 커넥션 오류가 발생한다.

url: jdbc:postgresql://test-db.abcdefghijklmn.ap-northeast-2.rds.amazonaws.com:5432/postgres

4. 터널링을 왜 사용을 해야하는지 간략하게 설명을 하자면 아래와 같다.

- 로컬 영역에서 터널링을 통한 Private 리소스의 접근은 아래와 같은 방법으로 수행한다.

- 터널링에 대한 접근은 pgAdmin이나 기타 다른 접근 툴에서도 제공 하므로 위의 예시와 같이 접근을 수행하면 된다.

- 주요 자원은 예를들어 RDS 같은 DB 자원은 대부분 Private 환경에 존재하고, RDS를 생성할때 퍼블릭 엑세스에 대한 별도의 옵션을 주지 않으면 자동으로 Private 환경으로 세팅되어 생성이 된다.

- Private 환경에 생성이 되면 원천적으로 외부의 Public 환경에서는 접근이 제한된다.

- 단 방법이 없는것은 아닌데 그것이 터널링이라는 개념이다. 터널링이란 Private 환경에 존재하는 리소스에대한 접근을 위해 중간에 중계서버를 두고 접근을 중계하는 의미이다.

- 다만 중계서버는 Public 환경에 존재 해야하며, 보안그룹에서 컨트롤을 해주어야 한다. 그리고 동일한 VPC 내에 존재 해야한다. 동일한 VPC내에서는 내부 IP를 통해 라우팅이 되므로 자유롭게 통신이 가능하다. 다만 동일 VPC 내에서만 가능하므로 참고하자.

- 그래서 위의 내용을 간략한 그림으로 표시하면 아래와 같다.

터널링.drawio
0.00MB