인프라
[AWS] RDS Connection Refused 오류 해결기
| 서론
안녕하세요, 팡일입니다.
오늘은 프로젝트를 진행하면서 EC2 + RDS 환경에서 구성한 Database에 로컬 환경에서 접속하는 과정에서 겪었던 문제와, 이를 해결한 경험을 공유해보려고 합니다.
운영 환경과 동일한 보안 구조를 유지한 채, 로컬에서 DataGrip(또는 MySQL Workbench)과 같은 DB 클라이언트로 RDS에 접속하려다 보니 생각보다 사소하지만 헷갈릴 수 있는 이슈를 마주하게 되었습니다.
| 상황 설명
현재 프로젝트에서는 EC2 인스턴스와 RDS(MySQL) 인스턴스를 사용해 Database를 구성하고 있습니다. 로컬 환경에서 DataGrip 혹은 MySQL Workbench를 통해 DB에 접속하여 데이터 확인 및 관리를 하고자 했습니다.
아키텍처 구조는 다음과 같습니다.
EC2: Public Subnet
RDS: Private Subnet
이를 통해 RDS를 외부에 직접 노출하지 않고, EC2를 Bastion 서버로 사용하여 로컬 → EC2 → RDS 형태로 접근하는 것이 목표였습니다.
보안 그룹 설정은 아래와 같이 구성되어 있었습니다.
RDS 보안 그룹
MySQL/Aurora (3306) → EC2 보안 그룹 허용
EC2 보안 그룹
SSH (22) → 내 IP /32 허용
즉, EC2만 Public 하게 열고, RDS는 VPC 내부에서만 접근 가능하도록 설정한 상태였습니다.
Bastion 서버란?: 외부 네트워크(인터넷)에서 사설 서브넷에 위치한 내부 서버로 안전하게 접속하기 위한 경유지(점프 서버) 역할을 하는 인스턴스로, 퍼블릭 서브넷에 배치되어 단일 진입점 역할을 수행하며 내부 인프라를 보호하는 문지기 역할을 합니다.
이러한 설정을 바탕으로 DataGrip에서 DB 연결 정보를 입력하고 Test Connection을 시도했지만, 아래와 같은 에러가 발생했습니다.

Connection refused
인증 실패를 의미하는 Access denied가 아니라, 연결 자체가 거부되는 상황이었습니다.
구조적으로도, 보안적으로도 문제가 없어 보였기 때문에 오히려 더 당황스러웠고, 입력한 값 중 무엇이 잘못되었는지 하나씩 점검하기 시작했습니다.
| 문제 원인 및 해결책
Data Source를 입력할 때에는 Host / port / username / password를 입력해야 합니다. 그래서 아래와 같이 시도했는데요?
Host : EC2 IPv4 주소
port : 3306
username : MysQL 계정
password : MySQL 계정 비밀번호
EC2를 Bastion 서버로 사용하려는 구조였기 때문에, “EC2를 거쳐 RDS로 가려면 Host에 EC2 IPv4를 넣어야 하지 않을까?” 라고 생각했던 것이 문제의 시작이었습니다.
하지만, MySQL Host에는 EC2의 IPv4 주소가 아닌, RDS의 엔드포인트 주소를 넣어야 했습니다.
Host: RDS Endpoint (xxxx.ap-northeast-2.rds.amazonaws.com)
port : 3306
username : MysQL 계정
password : MySQL 계정 비밀번호
이렇게 설정한 후 다시 Test Connection을 시도하자, 정상적으로 DB 연결이 이루어졌고 스키마 목록도 문제없이 조회되었습니다.

| 왜 RDS 엔드포인트를 사용해야 할까?
RDS는 구조적으로 IP 기반 접속을 보장하지 않습니다. 왜냐하면, 장애 조치(Failover), 유지보수, 내부 인프라 변경 등의 상황에서 IP 주소는 변경될 수 있기 때문입니다.
따라서 AWS에서는 RDS 접속 시 고정된 IP가 아닌, DNS 기반의 엔드포인트 사용을 공식적으로 권장합니다. IP 주소를 Host로 사용하는 경우, 네트워크 레벨에서 연결이 거부될 수 있고 그 결과가 Connection refused로 나타날 수 있습니다.
| 결론
이번 문제의 핵심은 단순했습니다.
RDS는 IP 주소가 아니라, 반드시 엔드포인트(DNS)로 접속해야 한다
보안 그룹이나 네트워크 구조가 올바르게 구성되어 있어도, Host 설정 하나로 인해 Connection refused 오류를 마주할 수 있다는 점을 다시 한 번 느끼게 되었습니다.
EC2를 Bastion 서버로 두고 RDS를 Private하게 운영하는 구조에서 로컬 DB 접속에 문제가 발생한다면, 아래와 같은 점들을 가장 먼저 점검해보면 좋을 것 같습니다.
RDS Host에 IP를 사용하고 있지는 않은지
RDS 엔드포인트를 정확히 사용하고 있는지