이전에 처음으로 AWS EC2를 이용해서 nestjs 서버를 배포했는데 그때는 mysql을 직접 EC2에 설치해서 사용했다. 하지만 다른 선택지도 있다는 것을 알게되었다. AWS RDS라는 서비스를 통해 우리는 보다 간편하고 성능 좋게 데이터베이스를 관리할 수 있다.
사실 당장 내 서비스에 RDS를 적용할 이유는 없지만 나중에 사용할 일이 생길지도 모르니 경험을 삼아 사용해보기로 했다.
대시보드 검색에서 RDS를 입력하고 클릭한다.
다음과 같은 페이지로 이동되는데 데이터베이스 생성을 클릭한다.
페이지가 이동되면 세부 설정을 해줘야 한다.
표준 생성을 선택한다.
사용하는 DB를 선택한다.
나는 현재 1년 프리티어 체험 중이므로 프리티어로 진행한다.
식별자, 마스터 사용자 이름 및 암호 등을 다음과 같이 설정한다.
퍼블릭 엑세스를 허용해주어야 외부에서 RDS에 연결할 수 있다.
VPC 보안 그룹을 새로 생성을 선택하고 이름 입력 및 가용 영역을 선택한다.(아무거나)
초기 데이터베이스 이름을 입력한뒤 데이터베이스 생성을 한다.
EC2에서 했던 것과 같이 외부 접속을 허용할려면 RDS의 방화벽 규칙 또한 변경해야 한다. 일단 RDS의 인스턴스 목록에 들어간다.
해당 인스턴스를 선택한다.
인스턴스를 선택한뒤 세부 정보 우측 인바운드 규칙을 선택한다.
인바운드 규칙 편집을 클릭하고 외부 접속을 허용하기 위해 기존에 존재하는 규칙의 소스를 Anywhere-IPv4로 변경한다.
그리고 새로운 규칙을 추가해 포트는 3306, 소스는 IPv6으로 변경한다.
규칙을 저장한 뒤 인스턴스를 선택해 다음과 같은 연결 정보를 확인한다. 필요한 것은
cmd를 실행하고 다음과 같은 명령어를 입력해 RDS 인스턴스가 제대로 실행되고 연결되는지를 파악한다.
$ mysql -h "엔드포인트" -u "사용자" -p
저번에 로컬 Mysql DB에서 EC2로 데이터를 이동시켰던 것 처럼 이번에도 RDS 인스턴스로 데이터를 옮겨 주어야 한다.
하지만 RDS는 컴퓨터 방식이 아니라 이전 방식처럼 scp를 이용해 백업 파일을 전송하는 것은 힘들다. 하지만 다행히도 AWS에서는 간편한 방법을 지원하고 있는 것을 발견했다.
cmd를 관리자 권한으로 실행한다.
다음 명령어를 입력한다.
$ mysqldump -u 로컬_사용자 ^
--databases DB이름 ^
--single-transaction ^
--compress ^
--order-by-primary ^
--routines=0 ^
--triggers=0 ^
--events=0 ^
-p로컬_password | mysql -u RDS_사용자 ^
--port=RDS_port ^
--host=RDS_endpoint ^
-pRDS_password
mysqldump 명령어를 입력할때 -p 패스워드 와 같이 -p와 패스워드 사이에 공백이 생기지 않도록 조심합니다.
sudo mysqldump -u 로컬_사용자 \
--databases DB이름 \
--single-transaction \
--compress \
--order-by-primary \
-p 로컬_password | mysql -u RDS_사용자 \
--port=RDS_port \
--host=RDS_endpoint \
-p RDS_password
마이그레이션이 완료되면 RDS mysql로 접속해 데이터가 무사히 옮겨졌는지 확인한다.
EC2에 직접 mysql을 설치해서 사용하는 것과 RDS를 이용하는 것은 꽤나 차이가 있다. 각각을 살펴보자.
EC2에 mysql을 설치해서 사용하는 것은 우리의 컴퓨터에 mysql을 설치해서 사용하는 것과 비슷하다. 중점은 스스로가 직접 모든 것을 관리하는 것이다. 이것은 장점이면서도 단점이다.
장점은 필요에 의해 데이터베이스 엔진 자체를 변경하는 등의 자유로움이 있으며 비용또한 RDS에 비해 저렴하다.
단점은 관리자가 백업, 업데이트, 장애조치를 처리할 기술력을 높은 수준으로 가져야 하고, 시간과 노력이 많이 든다는 것이다.
RDS는 사실상 만들어져 있는 서비스를 이용하는 것이다. 비용이 더 비싸지만 백업, 업데이트, 장애조치 등을 편하게 해주며 관리자의 시간과 노력을 아껴준다.
그리고 특정 상황에서는 RDS가 더 저렴할수도 있다고 한다.
ex) EC2에서 자동화 백업, 장애처리 조치 등의 고가용성을 기능을 도입해야 하는 상황일때 RDS가 비용적으로 더 효율적일 수 있다.
나는 당장 데이터베이스를 더 공부해야하는 입장이기에 고가용성을 높이기 위한 기능을 직접 구현하고 관리해보는 경험이 필요하다. 따라서 나는 EC2를 선택했다.