8편. EC2 → RDS 연결 — 웹 서버에서 DB 접속 확인하기

시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 8편 / 15편

EC2 웹 서버와 RDS DB가 모두 준비됐어요. 이번 편에서는 EC2에서 RDS에 실제로 접속해서 동작을 확인 해볼 거예요.


연결 구조 다시 보기

EC2 → RDS 연결이 되는 이유를 먼저 짚고 넘어갈게요.

내 PC
  │ SSH (퍼블릭 인터넷)
  ↓
EC2 (퍼블릭 서브넷)
  │ MySQL 3306 (VPC 내부 통신)
  ↓
RDS (프라이빗 서브넷)

EC2와 RDS는 같은 VPC 안 에 있어서 내부 네트워크로 통신할 수 있어요. 하지만 내 PC에서 RDS에 직접 접속은 불가능 해요.

이게 우리가 설계한 보안 구조예요:

  • DB는 외부에서 직접 접근 불가 (프라이빗 서브넷 + Public access: No)
  • 오직 EC2(web-sg)를 통해서만 DB 접근 가능

EC2에 MySQL 클라이언트 설치

RDS 서버는 AWS가 관리하지만, 접속 도구(클라이언트) 는 EC2에 직접 설치해야 해요.

EC2에 SSH 접속하세요.

ssh -i ~/Downloads/my-key.pem ec2-user@[EC2 퍼블릭 IP]

MySQL 클라이언트 설치:

sudo dnf install mariadb105 -y

💡 왜 MySQL이 아닌 mariadb105인가요? Amazon Linux 2023의 패키지 저장소에서는 MariaDB 클라이언트 패키지를 통해 MySQL에 접속해요. 서버(RDS)는 MySQL이고, 클라이언트만 MariaDB 패키지를 쓰는 거라 문제없어요.

설치 완료 후 mysql 명령어가 작동하는지 확인:

mysql --version
mysql  Ver 15.1 Distrib 10.5.xx-MariaDB, ...

버전 정보가 나오면 설치 성공이에요. ✅


RDS에 접속하기

mysql -h [RDS 엔드포인트] -u admin -p

[RDS 엔드포인트] 에는 7편에서 복사해둔 엔드포인트 주소를 붙여넣으세요.

예시:

mysql -h my-database.xxxxxxxxxx.ap-northeast-2.rds.amazonaws.com -u admin -p

엔터를 누르면:

Enter password:

RDS 생성 시 설정한 비밀번호를 입력하고 엔터!

비밀번호를 입력해도 화면에 아무것도 표시되지 않아요. 정상이에요. 입력 후 엔터만 누르면 돼요.


접속 성공 화면

이런 화면이 나오면 성공이에요! 🎉

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.xx MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

프롬프트가 MySQL [(none)]> 로 바뀌면 이제 SQL 명령어를 입력할 수 있어요.


DB 동작 확인해보기

간단한 SQL 명령어로 DB가 잘 동작하는지 확인해볼게요.

데이터베이스 목록 확인

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

7편에서 설정한 mydb 가 보이면 성공이에요!


mydb 선택

USE mydb;
Database changed
MySQL [mydb]>

프롬프트가 MySQL [mydb]> 로 바뀌어요.


테이블 만들어보기

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.03 sec)

데이터 넣기

INSERT INTO users (name, email) VALUES ('홍길동', 'hong@example.com');
INSERT INTO users (name, email) VALUES ('김철수', 'kim@example.com');
INSERT INTO users (name, email) VALUES ('이영희', 'lee@example.com');

데이터 조회

SELECT * FROM users;
+----+--------+------------------+---------------------+
| id | name   | email            | created_at          |
+----+--------+------------------+---------------------+
|  1 | 홍길동 | hong@example.com | 2024-01-01 00:00:00 |
|  2 | 김철수 | kim@example.com  | 2024-01-01 00:00:00 |
|  3 | 이영희 | lee@example.com  | 2024-01-01 00:00:00 |
+----+--------+------------------+---------------------+
3 rows in set (0.00 sec)

DB가 정상 동작하고 있어요! ✅


MySQL 종료

EXIT;

또는 Ctrl + D


보안 확인 — 인터넷에서 직접 접속이 안 되는지 확인

이건 보안 설계가 의도대로 됐는지 확인하는 단계예요.

내 PC에서 RDS에 직접 접속 시도 (EC2가 아닌 내 PC에서 실행):

mysql -h my-database.xxxxxxxxxx.ap-northeast-2.rds.amazonaws.com -u admin -p

이렇게 되면 설계가 올바른 거예요! ✅

ERROR 2002 (HY000): Can't connect to MySQL server on '...' (110)

또는 아무 반응 없이 시간이 초과돼요.

인터넷에서 DB에 직접 접근이 차단 됐다는 뜻이에요. EC2를 통해서만 접속 가능 — 우리가 설계한 대로 완벽하게 동작하고 있어요. 🔒


접속이 안 될 때 체크리스트

① 연결이 계속 기다리다가 끊기는 경우 (Timeout)

ERROR 2003 (HY000): Can't connect to MySQL server on '...' (110)

한참 기다리다가 이 에러가 나거나, 응답 없이 계속 멈춰있는 상태예요. 이건 요청이 RDS까지 아예 도달하지 못했다 는 뜻이에요. 보안 그룹을 의심하세요.

  • rds-sg 인바운드 규칙 확인: 3306 포트, Source가 web-sg 인지
  • EC2에 web-sg 가 붙어있는지 확인
  • RDS와 EC2가 같은 VPC(my-vpc) 안에 있는지 확인

② 연결이 바로 거절되는 경우 (Connection Refused)

ERROR 2003 (HY000): Can't connect to MySQL server on '...' (111 "Connection refused")

①과 헷갈리기 쉬운데, 이건 반응 없이 기다리는 게 아니라 즉시 거절 당하는 경우예요. 네트워크 경로는 살아있는데(도달은 함) RDS 쪽에서 거부한 거라, 원인이 달라요.

  • RDS Status가 Available 인지 확인 (Creating / Modifying 중이면 아직 접속 불가)
  • 엔드포인트 주소나 포트 번호(3306)를 잘못 입력하지 않았는지 확인

③ 비밀번호 오류

ERROR 1045 (28000): Access denied for user 'admin'@'...' (using password: YES)

RDS 생성 시 설정한 비밀번호가 맞지 않아요. RDS 콘솔에서 비밀번호를 재설정할 수 있어요.

RDS → Databases → my-database → Modify → Master password 변경

④ 엔드포인트 오타

RDS 콘솔에서 엔드포인트를 다시 복사해서 붙여넣어보세요.

⑤ mysql 명령어를 찾을 수 없는 경우

-bash: mysql: command not found

mariadb105 설치가 제대로 안 된 경우예요.

sudo dnf install mariadb105 -y

다시 설치해보고, 그래도 안 되면 which mysql 로 실제 설치 경로가 잡혔는지 확인하세요.

⑥ 한글 데이터가 깨져서 보이는 경우

+----+------+-------------------+
| id | name | email             |
+----+------+-------------------+
|  1 | ???  | hong@example.com  |
+----+------+-------------------+

접속할 때 클라이언트 문자셋을 지정하지 않아서 생기는 문제예요.

mysql -h [RDS 엔드포인트] -u admin -p --default-character-set=utf8mb4

접속 명령어에 --default-character-set=utf8mb4 옵션을 추가하면 한글이 정상적으로 보여요.


현재 아키텍처 상태

인터넷
  ↓ HTTP(80)
IGW → 퍼블릭 서브넷
  └ EC2 (web-server-1) ✅
       └ Nginx 실행 중
       ↓ MySQL(3306)
프라이빗 서브넷
  └ RDS (my-database) ✅
       └ EC2에서만 접근 가능
       └ 인터넷 직접 접근 차단 🔒

중간 점검 — 지금까지 만든 것

8편까지 왔어요. 지금까지 만든 것들을 정리하면:

  • ✅ VPC (my-vpc)
  • ✅ 서브넷 4개 (퍼블릭 2, 프라이빗 2)
  • ✅ 인터넷 게이트웨이 + 라우팅 테이블
  • ✅ 보안 그룹 (web-sg, rds-sg)
  • ✅ EC2 웹 서버 (Nginx 실행 중)
  • ✅ RDS DB (MySQL)
  • ✅ EC2 ↔ RDS 연결 확인

기본적인 2-Tier 아키텍처 가 완성됐어요!

다음 편부터는 이 구조를 더 안전하고 실용적으로 개선할 거예요.


이번 편 정리

명령어설명
sudo dnf install mariadb105 -yMySQL 클라이언트 설치
mysql -h [엔드포인트] -u admin -pRDS 접속
SHOW DATABASES;DB 목록 확인
USE mydb;데이터베이스 선택
EXIT;MySQL 종료

이번 편에서 한 것:

  • ✅ MySQL 클라이언트 설치
  • ✅ EC2 → RDS 접속 성공
  • ✅ 테이블 생성 및 데이터 입력
  • ✅ 인터넷에서 직접 접속 차단 확인

다음 편 👉 9편. NAT 게이트웨이 — 프라이빗 서버도 인터넷 쓰기