AWS RDS, EC2 연동 및 PhpStorm 연동
이번에 새로 진행할 프로젝트 대비를 위해 데이터베이스 서버를 웹 서버의 로컬로 잡지 않고 별도의 서버를 구축하기로 했습니다.
대부분의 경우 큰 프로젝트가 아닌 이상은 로컬로 잡아두는게 연동도 편한 경우가 많아 굳이 분리해본적은 없는데 이왕 경험도 해볼겸 우선 제 개인 웹사이트의 디비 서버를 분리해보기로 했습니다.
기존에는 EC2 서버에 MariaDB 서버를 설치해 localhost 요청으로 애플리케이션이나 개발자도구에서 연동해서 사용했습니다.
새로 바뀌는 환경은 EC2 서버는 그대로이고 RDS에 MariaDB 서버를 구축해 이를 EC2에서 접근할 수 있도록 하게 하는 것이 목적입니다.
우선 RDS에서 자기가 원하는 환경을 선택해 데이터베이스를 구축합니다.
저는 쓰던 MariaDB를 선택해 가장 싼 플랜(db.t2.micro, AWS 프리티어 적용)으로 인스턴스를 생성했습니다. 기억에 남는 설치시 옵션이라면 디비 사용 용도에 따른 설정(Template)을 선택하는 부분이 있는데 여기에 프리티어 옵션이 있고 이 옵션값을 기반으로 아래는 천천히 읽으면서 생성했었던것 같네요.
프리티어 옵션을 선택하면 하위 옵션은 대부분 고정되므로 데이터베이스 이름, 관리자 패스워드 등만 추가 기입해주시면 됩니다. (이마저도 디폴트 세팅이 되어있습니다.)
어찌 되었든 연동의 핵심은 VPC Security Group 설정과 Parameter Group 설정입니다.
전자의 설정은 RDS가 외부 접속이 안되도록 설계가 되어있고 AWS에서 검증된 보안그룹을 가진 인스턴스나 서버에서만 접속이 가능하도록 유도하고 있습니다. 이 게시글에서는 운용중인 EC2 서버에서의 연동을 주 목적으로 하고있으니 당연히 VPC 보안그룹도 EC2것과 같아야 합니다. 위에서 잠깐 언급한대로 RDS 데이터베이스 생성 시 디폴트 VPC 보안그룹 값은 EC2의 것과 같게 설정이 되어있습니다. (이미 EC2 인스턴스를 생성했을 때 자동으로 만들어져있는 Default VPC라는 이름의 보안그룹입니다.)
VPC 보안그룹 설정은 RDS 메뉴 중 'Subnet groups'에서 확인 할 수 있으며, 운용할 데이터베이스 서버에 다른 보안 규칙을 적용하려면 여기서 새로운 보안그룹을 만들 수 있습니다.
EC2 메뉴에서도 'Security Groups'에서 인스턴스에 적용된 VPC 보안 그룹을 아래와 같이 확인할 수 있습니다. 물론 연동하려는 EC2의 VPC와 RDS의 VPC가 같아야 겠죠?
이어서 후자의 설정은 로컬 데이터베이스에서 했듯이 서버 간 통신이나 데이터베이스 사용중의 언어셋 문제를 최소화하기위해 utf8로 세팅해주기 위한 내용입니다. RDS 메뉴의 'Parameter groups'을 누르면 데이터베이스에 적용될 파라미터 설정 그룹을 확인할 수 있습니다.
RDS 데이터베이스 생성 시 별도의 옵션 변경이 없었다면 위에처럼 'default.mariadb10.2'와 같이 선택한 데이터베이스의 기본 파라미터 설정 그룹이 생성될 것 입니다. 기본 값은 놔두고 utf8용 파라미터 그룹을 하나 더 만들어 줍시다. 우측 상단의 'Create parameter group' 버튼을 눌러 사용하는 데이터베이스 버전의 파라미터 그룹을 만듭니다. (저의 경우에는 그렇게 만든 파라미터 명이 'mariadb-rds-erusya'입니다.)
이렇게 간단히 파라미터 그룹을 만들면 위의 사진과 같이 파라미터 그룹이 한개 더 생기며 그룹명을 클릭함으로써 여러가지 데이터베이스 파라미터 설정을 바꿀 수 있습니다. 여기서 우리가 바꿔야할 파라미터 설정은 아래와 같습니다. 우측상단의 'Edit parametrs'를 클릭하면 Values 컬럼이 수정가능하게 바뀌며 이를 아래 테이블의 값으로 바꿔줍니다.
Name | Values |
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | utf8 |
character_set_filesystem | utf8 |
character_set_results | utf8 |
character_set_server | utf8 |
collation_connection | utf8_general_ci |
collation_server | utf8_general_ci |
얼추 이렇게 바꿔주면 설정 준비는 끝났습니다. 위에 설정해준 값을 데이터베이스에 연동시키기 위해서는 해당 데이터베이스를 선택하시고 Modify 버튼을 눌러 설정 변경페이지로 갑니다. 여기서 VPC의 변동이 있다면 해당 설정을 변경하고, 방금 새로 만든 Parameter group도 아래와 같이 재 선택 후 'Confirm'버튼을 눌러 설정을 확인합니다. 화면에 설정을 언제 적용할꺼냐고 즉시, 또는 스케쥴링 여부를 묻는데 즉시(Immediately)를 눌러 설정을 바로 적용해줍니다.
여기까지 설정을 다시 복기해본다면,
라고 볼 수 있네요.
마지막으로 데이터베이스를 눌러 접속 경로(Endpoint) 주소를 확인합니다.
이 데이터베이스는 저 url로 접근이 가능합니다. 물론 지정된 VPC 보안 그룹안에서만요.
자, 그럼 EC2 인스턴스의 콘솔 또는 터미널에서 아래와 같이 접속시도를 해봅시다.
$ mariadb -u username -p --host endpoint
Copy
잘되네요 CLI로는 이런방식으로 컨트롤 하면 될 것 같네요. 그리고 PhpStorm을 사용하시는 분들은 우측 패널에서 데이터베이스를 관리할 수 있는데요.
이전에는 EC2 로컬 디비는 그냥 EC2 접속방식과 같게 접근요청을 하면 연동이 가능했지만 지금 데이터베이스는 EC2 서버에 있는게 아니라 별도의 RDS에 존재하니까 기존의 방법으로 연동하기에는 무리가 있습니다.
직접 접근을 하려고해도 허용된 VPC 보안 그룹에서만 접속이 되기때문에 개인 컴퓨터에서 돌아가는 PhpStorm은 통상적으로 접근이 안됩니다. 물론 다른 경우도 마찬가지고요.
여기서 우리는 위의 접속 예 처럼 EC2에서는 접속이 된다는 점을 착안하여 프록시 연결을 통한 데이터베이스 접속을 시도할 수 있습니다.
접속 경로가 [개발자 도구]->"[데이터베이스 서버]"가 아닌 [개발자 도구]->"[EC2 인스턴스]->[데이터베이스 서버]"의 경로로요. 여기서 중요한점은 따옴표로 묶여있는게 VPC 보안그룹의 영역 범위라는 것입니다.
저 개념만 이해하신다면 아래의 예제를 그대로 적용할 수 있습니다.
우선 기존 디비 연결과 같이 Host, User, Password, Database등의 접속정보를 입력해줍니다. Host는 위의 CLI 예제처럼 RDS의 Endpoint 주소를 입력하시면 되고요.
추가로 여기서 SSH/SSL 탭을 클릭하시면 데이터베이스 연결에 대한 경유(프록시) 설정을 할 수 있습니다.
예 맞습니다.
여기는 통상적으로 EC2에 연결할 때의 그 접속 정보를 입력하는 것 입니다. 이렇게 설정해두면 데이터베이스에 연결할 때 EC2의 환경을 문 상태에서 접속을 시도하기 때문에 VPC 보안 그룹 환경에 충족하면서 데이터베이스 연동을 할 수 있습니다.
'Test Connection'후 데이터베이스 연동에 성공하면 이렇게 RDS의 데이터베이스 정보를 끌어와 쉽게 개발자 도구에서 데이터베이스를 컨트롤 할 수 있습니다.