AWS RDS(Relational Database Service)는 이름 그대로 관계형 데이터베이스를 클라우드에서 제공하는 서비스다.
MySQL, PostgreSQL, MariaDB, Oracle, SQL Server 등을 EC2에 직접 설치하지 않고도, AWS에서 자동 관리되는 형태로 사용할 수 있다.
RDS는 설치, 패치, 백업, 복구, 모니터링 등을 AWS가 자동으로 처리해주기 때문에 인프라 운영 부담이 줄고, 서비스의 안정성도 높아진다.
보통 개발 초기에는 로컬 MySQL을 백엔드 서버와 연결해 사용한다.
하지만 서버를 EC2에 배포한 이후에도 계속 로컬 DB에 연결할 수 있을까?
❌ 당연히 불가능하다.
EC2는 AWS 클라우드 위에서 돌아가는 가상 머신이고,
로컬 DB는 내 개인 PC에 설치된 프로그램이기 때문에 서로 통신할 수 없다.
그래서 실서버 환경에서는 MySQL도 따로 배포해야 하며, 이때 선택지는 보통 두 가지다.
EC2 하나에 웹 서버 + DB 서버 동시 구성
EC2(웹 서버) -> RDS(MySQL 등)
사용자 → EC2(백엔드 서버) → RDS(MySQL 등)
EC2 내부 애플리케이션이 RDS에 직접 쿼리를 날리는 방식이다.
더 자세한 정보는 AWS RDS 프리 티어 공식 페이지에서 확인할 수 있다.
AWS RDS 인스턴스를 하나 생성해보자.
실습 환경에서는 프리 티어 설정을 사용하면 대부분의 경우 비용 없이 진행할 수 있다.
단, 사용 시간이나 스토리지를 초과할 경우 과금될 수 있으니 주의가 필요하다.
AWS 콘솔 상단 검색창에 rds 입력 후, RDS 서비스로 이동한다.
대시보드에서 [데이터베이스 생성] 클릭
프리 티어에서는 가용성이 단일 AZ(인스턴스 1개)로 고정된다.
성능이 아주 높진 않지만, 테스트 용도로는 충분하다.
프리 티어라고 해도 실습 수준에서는 전혀 문제 없이 사용할 수 있다.
DB 인스턴스 이름을 입력하고,
마스터 사용자 이름과 비밀번호를 입력한다.
이 계정은 나중에 RDS에 접속할 때 사용하는 계정이다.
예:mysql -u admin -p비밀번호
기본 설정 그대로 두고 넘어간다. 프리 티어에 맞게 자동 설정되어 있다.
프리 티어에선 어떤 걸 써도 상관 없다.
VPC나 서브넷은 기본값 그대로 두고,
퍼블릭 액세스를 "예"로 설정한다.
운영 환경에서는 VPC 내부 전용으로 두는 것이 좋지만, 지금은 외부에서도 접속 가능하도록 예로 설정하고, 보안 그룹으로 접근을 제한할 예정이다.
보안 그룹은 뒤에서 별도로 설정할 것이므로, 여기서는 기본값 그대로 두고 넘어간다.
별도 설정은 없이 그대로 둔다.
월별 추정 요금을 확인하고 [데이터베이스 생성] 클릭
RDS도 결국 하나의 EC2(=가상 머신)이기 때문에, 포트 접근 허용이 필요하다.
인바운드 [규칙 추가]
다음과 같이 인바운드 규칙을 추가한다.
❗ 실제 서비스에서는 반드시 EC2의 보안 그룹 ID로 제한하거나,
최소한 특정 IP만 허용하도록 설정해야 한다.
보안 그룹을 생성한 뒤, RDS 콘솔로 돌아와 해당 DB를 선택하고 [수정]을 클릭한다.
연결 > 보안 그룹에서 생성한 보안 그룹으로 변경한다.
기본 설정으로도 동작은 하지만, 문자 인코딩/타임존 문제로 인해 한글 깨짐이나 시간 차이 문제가 발생할 수 있기 때문에 실무에선 대부분 이 부분을 수정한다.
사이드바 [파라미터 그룹] 클릭
[파라미터 그룹 생성] 클릭
❗ Aurora MySQL과 헷갈리지 않도록 주의
생성된 파라미터 그룹 이름 클릭
파라미터들을 확인할 수 있다.
파라미터 그룹 이름 옆 [편집] 클릭
아래 항목들을 수정한다:
utf8mb4
utf8mb4
utf8mb4
utf8mb4
utf8mb4
utf8mb4
utf8mb4는 한글은 물론 이모지, 특수문자까지 제대로 저장할 수 있어 실무에서 널리 사용된다.
utf8mb4_unicode_ci
utf8mb4_unicode_ci
Asia/Seoul
수정이 완료됐는지 확인한다.
RDS 인스턴스 수정의 추가 구성에서 방금 만든 파라미터 그룹을 선택한다.
❗ 파라미터 그룹의 변경 사항을 적용하려면 DB 재부팅이 필요하다.