서문
안녕하세요. “시각화 한장으로 개념 이해하기” 시리즈를 써보려고 합니다. LLM 과 학습하는 시간이 늘어나면서, 뇌가 입력 받는 양이 늘어났습니다. 그러면서 Input 과 Output 의 비율이 깨지고 있습니다. 학습은 Output 을 통해 이루어집니다. 뱉어봐야 나의 것이 됩니다. 그 정수는 시각화라고 생각합니다. 시각화를 한다는건, 글보다 훨씬 어렵습니다. 어렵다는건, 더 많은 내용을, 더 깊이 이해하고 있어야 진정 제대로 그릴 수 있다는 것입니다. 바꿔 말하면, 시각화할 수 있다는건, 그 개념을 정확히 이해하고 있다는 것을 의미합니다. AI 시대에 거꾸로 가기 위해서, 시각화를 연습하고 글로 써봅니다.
오늘은 <어떻게 Local 에서 클라우드 RDS 로 query 를 날리나요?> 라는 질문에 답을 해봅니다.
문제 상황
서버 개발을 하면, 어플리케이션 서버를 띄우고, RDBMS 서버를 띄웁니다. AWS 로 치면, EC2와 RDS 를 통해 호스팅합니다. 이때 실제 Database 에 query 를 날려서 데이터를 얻어와야 하는데요. EC2 에 직접 접속해서, 쿼리를 날리는건 너무나 불편합니다. 접속도 불편하고, Terminal UI 는 시각화와 쿼리 관리가 어렵죠.
그래서 Local 에서 GUI 로 된 DB Client 를 사용합니다. DBeaver 나 MySQLWorkbench, DataGrip 등이 유명합니다.
이들은 대체 어떻게, Local 에서 RDS 로 바로 접속해서 query 를 날리는 것처럼 보일까요? 그 블랙박스를 시각화해서 그려봅니다.
시각화

시각화 전체 흐름 설명
- Local 은 SSH Protocol 22 port 로 EC2 에 접속한다.
- EC2 는 Local 에서 접속 가능하도록 Security Group(보안 그룹)을 설정해야 한다.
- EC2 는 MySQL Protocol 3306 port 로 RDS 에 접속한다.
- RDS 는 EC2 에서 접속 가능하도록 Security Group(보안 그룹)을 설정해야 한다.
- Local 에서 query 요청을 날리면, EC2 를 거쳐서, RDS 로 가고, RDS 에서 응답을 하면, EC2 를 거쳐서 Local 로 응답이 온다.
이 그림을 잘 이해하기 위해서, SSH Protocol, MySQL Protocol, Security Group 을 이해해야 합니다.
SSH Protocol
SSH 의 풀네임은 Secure Shell 입니다. 클라이언트가 원격 서버에 안전하게 접속할 수 있도록 하는 프로토콜 입니다.
여기서 Shell은 터미널 명령을 실행하는 환경입니다. 즉 SSH는 “내 Local Terminal에서 EC2 Terminal에 안전하게 들어가는 방법”이라고 볼 수 있습니다.
MySQL Protocol
MySQL Protocol은 MySQL Client와 MySQL Server가 대화하는 규칙입니다.
우리가 DBeaver에서 아래 쿼리를 실행한다고 해봅시다.
"SELECT * FROM users;"
사람 눈에는 SQL이지만, 실제 네트워크에서는 MySQL Client가 MySQL Protocol에 맞춰 요청을 보냅니다.
DBeaver --> EC2 -- MySQL Protocol --> RDS MySQL
즉, SQL은 “무엇을 할지”를 표현하는 언어이고, MySQL Protocol은 “그 SQL을 DB 서버에 어떻게 보내고 응답을 어떻게 받을지”를 정한 통신 규칙입니다.
MySQL은 기본적으로 3306 포트를 사용합니다. 그래서 EC2에서 RDS로 갈 때는 보통 3306 포트가 열려 있어야 합니다.
Security Group
Security Group은 AWS 리소스 앞에 붙는 방화벽입니다.
Public Subnet에 있다고 해서 모든 요청이 열리는 것은 아닙니다. Public Subnet은 “인터넷으로 갈 수 있는 길이 있다”는 뜻이고, Security Group은 “그 길에서 어떤 문을 열지” 정합니다.
이번 구조에서는 두 가지 문이 필요합니다.
Local -> EC2
SSH 22번 허용
Source: 내 IP/32
EC2 -> RDS
MySQL 3306번 허용
Source: EC2 Security Group
중요한 점은 RDS의 Source입니다. RDS 입장에서는 접속자가 Local이 아니라 EC2입니다. 그래서 RDS Security Group에는 내 IP가 아니라 EC2 Security Group을 허용해야 합니다.