AWS 과금을 막기 위해 우리는 해당 프로젝트에서 RDS 퍼블릭 액세스 비허용을 선택하였다.
해당 설정을 해두면 DataGrip으로 DB를 연결할 때 원래 해왔던 것처럼 DB 정보만 입력해서는 Connection failed 가 뜨며 연결에 실패하게 된다.
이때는 DataGrip에서의 SSH 터널링을 통해 RDS에 연결하면 된다.
RDS가 퍼블릭 액세스를 막아두긴 했지만 EC2와는 연결되어 있기 때문에 우리는 SSH를 통해 접근할 수 있다.

먼저 EC2의 SSH 정보를 등록해야 한다.
- Private key file : pem 파일
- Host : 퍼블릭 IP 주소
이렇게 입력한 뒤 Test Connection 버튼을 눌렀을 때 Successfully connected! 라고 뜨면 잘 연결된 것이다.
이후 이전처럼 RDS의 연결 정보를 넣고 Test Connection을 하면 끝!
디비 커넥션 풀은 어떻게 하면 되지?
퍼블릭 액세스 비허용을 해주었기 때문에 yml 파일에 우리의 디비 정보를 입력하고 이를 run 시키면 커넥션 풀 과정에서 에러가 발생하게 된다.

여기서 멈춰있다가..

에러
org.hibernate.exception.JDBCConnectionException: unable to obtain isolated JDBC connection [The connection attempt failed.]
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
Caused by: java.net.SocketTimeoutException: Connect timed out
yml에 RDS 정보가 들어있으면 run 시 HikariCP가 즉시 커넥션 풀을 생성하려고 하지만, RDS가 private subnet이라 로컬에서 접근할 수 없으므로 커넥션 타임아웃 에러가 발생한다.
이 경우 Docker로 DB를 띄워서 로컬 DB를 사용해야 한다.
docker-compose.yml
version: '3'
services:
postgresql:
container_name: acnelog-postgresql
image: postgres:latest
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password_test
networks:
- acnelog-network
networks:
acnelog-network:
driver: bridge
postgresql
컨테이너 설정 이름이다.
Docker compose 내부 서비스 이름으로 docker-compose 명령에서 postgresql 서비스로 인식된다.
네트워크 상에서 DNS 이름으로 사용되기 때문에 다른 컨테이너가 DB에 연결할 때 postgresql:5432로 접근한다.
container_name: acnelog-postgresql
실제 도커 컨테이너 이름을 지정하는 구간이다.
docker ps를 쳤을 때 나오는 실행 중인 컨테이너 명이 바로 이것이다.
image: postgres:latest
Docker Hub의 PostgreSQL 최신 버전 이미지를 사용하겠다는 의미이다.
ports: - "5432:5432"
호스트(로컬) 5432 → 컨테이너의 5432 매핑
즉, 로컬에서 localhost:5432 로 접속하면 이 PostgreSQL 컨테이너에 연결된다.
✔️ jdbc:postgresql://localhost:5432/데이터베이스명
environment
| POSTGRES_USER | 생성할 DB 유저 이름 |
| POSTGRES_PASSWORD | 해당 유저의 비밀번호 |
| POSTGRES_DB | 기본 생성할 데이터베이스 이름(옵션) |
POSTGRES_PASSWORD는 무조건 필요하다. 빈 값이면 컨테이너가 아예 실행이 안된다고 한다.
POSTGRES_USER는 직접 지정하거나 지정하지 않으면 기본값인 postgres를 사용하게 된다.
POSTGRES_DB는 옵션이지만 지정하지 않게 된다면 USER와 같은 이름으로 DB가 생성된다.
실제로 데이터베이스가 생성되었는지 확인하려면,
docker exec -it 컨테이너명 bash
명령어를 통해 컨테이너 내부의 쉘 환경으로 진입하고,
psql -U postgres -l
명령어를 통해 전체 데이터베이스 목록을 확인해보자.
networks: - acnelog-network
컨테이너가 acnelog-network라는 브리지 네트워크에 참여하도록 지정해주는 구간이다.
networks: acnelog-network
driver: bridge
Docker 브리지 네트워크를 생성하는 구간이다.
컨테이너끼리 서로 찾을 수 있는 전용 내부 네트워크라고 생각하면 된다. 이를 통해 같은 네트워크에 있는 다른 컨테이너들이 서비스명으로 통신이 가능해진다.
✔️ 다른 컨테이너에서 postgresql:5432 로 DB 접속 가능
이렇게 docker-compose.yml 파일을 만들고 docker-compose up -d 를 이용해 도커 컨테이너를 띄운다.
이후 yml의 디비 정보를 로컬 디비로 바꿔주면 해결!
🧩 참고 문헌
https://velog.io/@ncookie/AWS-RDS-퍼블릭-접근-제한-DataGrip-연결
[AWS] RDS 퍼블릭 접근 제한 + DataGrip 연결
한동안 AWS를 사용하지 않고 있다가 이번에 새로 프리티어 계정을 팠는데, 한달 후 11.66 달러, 한화로 17,000원 정도가 결제됐었다. (달러가 많이 비싸지긴 했나보다...) 원인 어찌된 영문이고 하니 p
velog.io
'✔️ Project' 카테고리의 다른 글
| [CI/CD] 배포 시 env는 언제 넣어주지? (1) | 2025.11.17 |
|---|