시리즈: 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 -y | MySQL 클라이언트 설치 |
mysql -h [엔드포인트] -u admin -p | RDS 접속 |
SHOW DATABASES; | DB 목록 확인 |
USE mydb; | 데이터베이스 선택 |
EXIT; | MySQL 종료 |
이번 편에서 한 것:
- ✅ MySQL 클라이언트 설치
- ✅ EC2 → RDS 접속 성공
- ✅ 테이블 생성 및 데이터 입력
- ✅ 인터넷에서 직접 접속 차단 확인
다음 편 👉 9편. NAT 게이트웨이 — 프라이빗 서버도 인터넷 쓰기