Dev/DevOps, Infra

[RDS] 데이터베이스 서버 생성과 접속

HJChung 2021. 1. 13. 08:05

첫 번째 프로젝트로 진행한 SAFU 웹 서비스 을 배포하기 위해 서버 구축을 하려하며, 

'서버 단위의 로드 밸런서' 아키텍쳐 중 애플리케이션 서버가 (일단은)하나인 아래의 구성으로 진행하고자 한다.

 

[EC2] AWS를 이용한 서버 환경 이해 및 구축에 정리해둔 <2. 운영 서버 아키텍처의 이해>를 보면 단일서버의 여러 단점으로 인해 애플리케이션과 데이터베이스 서버를 분리하는 구조가 나왔다. 

 

그리고 서버 단위의 로드 밸런서는

이런 구조로 되어 있다. 여기서 RDS로 데이터베이스 서버를 만들어보고자 한다. 

1. Amazon RDS(Relational Database Services)

Amazon RDS는 클라우드에서 관계형 데이터베이스를 간편하게 설정, 운영, 확장 할 수 있는 서비스이다. 이는 매우 비싸다. (프리티어는 RDS 단일 AZ(Available Zone) db.t2.micro 인스턴스를 750시간 무료 사용) 그런데도 사용하는 이유는 뭘까?

데이터는 매우 중요하고도 소중한 자산인 반면 DB관리는 매우 까다롭고 위험하다. 이를 AWS RDS가 해주고, 이 비용이 들어갔다고 보면 된다. 

 

어떻게 운영, 확장, 관리해주길래?

2. RDS의 특징은

1. 유연한 인스턴스 및 스토리지 확장

RDS는 인스턴스 유형(메모리, 성능, I/O최적화)를 다양하게 제공하고, Cloudwatch와 연계를 통해 트래픽에 따른 확장 및 사양의 축소가 가능히다. 그리고 데이터를 저장하는 디스크에 해당하는 스토리지 역시 사용량에 따라 확장이 가능하다.

2. 데이터 백업 및 복원

자동 백업 설정을 통해 백업(snapshot)이 쉬우며, 최대 35일까지 데이터를 보존하고 이를 통해 새 데이터베이스를 생성할 수 도 있다. 

3. 멀티 AZ(Available Zone) 제공

물리적으로 분리된 다른 가용 영역에 동기식 "예비" 복제본을 자동으로 프로비저닝(사용자의 요구에 맞게 시스템 자체를 제공 하는 것)하고 관리한다. 동기식이라는 것은  데이터베이스가 기본 복제본과 예비 복제본에 동시에 쓰기 작업을 한다는 것이다. 그래서 장애가 발생할 경우 예비 복제본이 최신 상태로 유지되도록 할 수 있다. 

그리고 MySQL은 읽기 트래픽을 자동 관리하는 분산 서비스를 제공한다고 한다. 그래서 데이터 SELECT 에 대한 부하를 분산처리 할 수 있다. 

4. RDS 암호화 옵션을 통한 보안성 강화

5. 유연한 Database Migration 서비스

RDS간, 아니면 다른 DB에서 RDS로 데이터에 대한 migration을 지원한다.

 

3. 데이터베이스 서버 생성

프리티어는 MySQL - RDS 단일 AZ(Available Zone) db.t2.micro 인스턴스를 750시간 무료 사용이므로 이렇게 구성하여 사용해보고자 한다. 

1) AWS에서 데이터베이스 -> RDS로 가서 데이터베이스 생성을 시작한다. 

2) MySQL을 선택한다. 

3) 프리티어!

※ 스토리지: 데이터를 저장하는 디스크

유형

1. 프로비저닝된 IOPS: 데이터를 Input/Output 할 때 초당 얼마나 작업할 수 있는지에 대한 것이고 -> 비싸지만 빠름. 용량 따로, 속도 따로 지정 가능 

2. 범용(SSD) -> 저렴한것에 비해 느림. 저장 공간이 클수록 속도는 빨라진다.

 

 

 

4) 설정

DB인스턴스 식별자: 여러개의 DB인스턴스가 있을 때 각각의 이름(식별자)

마스터 사용자 이름: 데이터베이스에 접속시 username

마스터 암호: 데이터베이스에 접속시 password

5) 연결 - 네트워크 설정

1.  Virtual Private Cloud(VPC)

VPC란 외부로부터 독립된 안전한 네트워크를 구성해주는 서비스라고 생각하면 된다. AWS 클라우드에서 논리적으로 독립된 네트워크 공간을 만들어서 여기서 AWS 리소스를 사용할 수 있도록 해준다. 

Amazon VPC자체에 IP주소 범위, 서브넷 생성, 라우팅 테이블, 네트워크 게이트웨이 구성 등을 설정하여 네트워킹 환경을 제어할 수 있다. 

이.. IP주소, 서브넷 등과 같은 네트워크 개념에 대해서도 좀 더 공부가 필요할 듯 하지만 여기서는 일단 VPC 내에 RDS를 생성하는 것에 대해서 배운 것만 간단히 정리하고자 한다. 

 

위의 그림처럼 VPC 내부에 RDS를 생성하면 외부로부터 직접 RDS에 접근하는 막을 수 있다. (해킹 위험으로부터 안전) 그리고 

같은 VPC내에 EC2를 통해 애플리케이션 서버를 설치하고, 이 애플리케이션 서버만 RDS로 접근 할 수 있도록 하면 매우 안전하면서도 기능은 다 할 수 있게 되겠다.  

VPC는 기본 VPC로 선택

 

2. VPC 보안 그룹

구름 안의 각각의 네모 박스에 해당하는 것이 VPC 보안 그룹이다. 같은 VPC라고 하더라도, 특정 서비스만 RDS로 접근 할 수 있도록 지정할 수 있도록 보안 그룹을 통해 설정 할 수 있다. 여기서는 '새로 생성' 선택

6) 데이터베이스 이름

MySQL에서 show databases; 하면 보이는 데이터베이스 이름을 말하며, 여기서는 초기에 들어가있을 DB와 그 이름을 설정하는 것이다.

7) 포트 번호는 기본으로 3306으로 정해놓는다. 

이 외에도 암호 설정, 백업 보존 기간 설정, 모니터링, 로그보내기.. 등의 옵션을 설정할 수 있지만 나머지는 기본으로 설정하고 데이터베이스 생성을 마친다. 

 

4. 데이터베이스 서버 접속

데이터베이스 서버에 접속하는 방법은 1. 퍼블릭 방식으로 접속하는 방식과 2. 퍼블릭 엑세스를 끈 상태로 비공개 상태로 접속하는 방법이 이 있다. 

1) 퍼블릭 방식으로 접근

현재는 퍼블릭 엑세스 가능성이 '아니요'로 되어 있는데, 이를 예로 바꾼다. 그리고 이를 즉시 적용해보자. 

적용후에 들어가볼까?

 

앞서 데이터베이스 생성시 적어준 

마스터 사용자 이름: 데이터베이스에 접속시 username

마스터 암호: 데이터베이스에 접속시 password와 

생성된 후 보여주는 엔드포인트: 데이터베이스 host주소

 

를 이용하여 

mysql -h [엔드포인트] -u [마스터 사용자 이름] -p
password: [마스터 암호]

를 통해 접속 해 볼 것이다. 

그런데 접속이 안될 것이다. 왜일까?

AWS이 제공하는 방화벽(Security group)때문이다. 

그래서 보안그룹에서 인바운드 규칙을 편집해주어야 한다. 이에 대한 자세한 내용은 AWS2- RDS 3.1. 접속1 - 퍼블릭 방식으로 접속을 참고. 그리고 자신의 위치의 IP주소로 그 때마다 바꿔주는 것이다. (모든 IP에 대해 열려있는 것보다는 훨씬 안전)

 

2) 좀 더 안전하게 비공개 상태로 접속하는 방법

진짜 딱 이런 구조를 만드는 것이다. 같은 VPC내에서 RDS로는 외부에서 접속할 수 없도록 하고, VCP내의 EC2인스턴스만 그 RDS에 접속할 수 있게하는 것이다. (AWS에서도 이렇게 하는 것을 추천한다.) 우선 퍼블릭 엑세스가 '예'로 열려있다면 이를 끈다. 

그리고 [EC2] AWS를 이용한 서버 환경 이해 및 구축의 내용처럼 EC2를 생성하고, 이것의 IP주소를 RDS 인스턴스 보안그룹에 인바운드에 등록해주거나  해당 EC2의 보안 그룹명을 RDS 인스턴스 보안그룹 인바운드 규칙 편집에 EC2 보안그룹 명을 등록해준다. 

5. 데이터베이스 Migration

이제 EC2에서 RDS를 접속하여 데이터베이스 migration을 해보자. (EC2에 있는 서버코드에서 배포환경에서는 데이터베이스관련 설정파일은 모두 RDS 정보로 수정되어 있어야 한다.)

우선 EC2 mysql-client에서 RDS 데이터베이스로 접속한다. 

mysql -h [엔드포인트] -u [마스터 사용자 이름] -p
password: [마스터 암호]

그 후 sequelize-cli로 (ORM으로 sequelize를 사용하였음)

Migration

npx sequelize-cli db:migrate --env production

seed 데이터 반영

npx sequelize-cli db:seed:all --env production

하면~~

끝이다. 

 

나중에는 RDS를 이용한 데이터베이스 모니터링과 백업 및 복원에 대해서도 공부하고 정리해보고 싶다. 

 

reference

생활코딩 AWS - RDS

아마존 웹 서비스 5장 확장 가능한 데이터베이스 서버 만들기 - 권영환 지음