RDS란?

RDS는 Amazon Relational Database Service의 약자로 클라우드 상에서 제공되는 관계형 데이터베이스 서비스입니다. RDS는 다양한 관계형 데이터베이스 엔진을 지원합니다.

  1. Mysql
  2. PostgreSQL
  3. MariaDB
  4. ORACLE
  5. Amazon Aurora
  6. MS SQL Server

이중 가장 보편적인 Mysql/Mariadb를 중심으로 RDS 구성 과정을 다뤄보고자 합니다.

*RDS에 포함되지 않는 NoSQL 역시 AWS에서 제공하며, key-value 방식의 DynamoDB 뿐 아니라 인 메모리 방식의 ElastiCache, Redis와 그래프 SQL 기반의 Neptune등 이 있습니다. https://aws.amazon.com/ko/products/databases/

RDS의 특징

RDS는 클라우드 기반의 데이터베이스로써, 일반적으로 웹서버에 설치해 운영하던 DB와는 조금 다른 작동 방식으로 구성됩니다. 일반적인 과정에서 RDB를 구성할때 개발자는 아래와 같은 과정을 거치게 됩니다.

  1. 서버 구축
  2. 서버 접속 및 DBMS 설치
  3. DBMS 설정 파일 변경
  4. DBMS 재실행
  5. DBMS 접속 및 계정 및 권한 설정 (PostrgreSQL은 접속 전 계정 및 권한 설정)
  6. 서버 접속 종료 후 개발/운영 환경 접속 테스트

반면 RDS는 위 과정의 1,2번 과정을 거치지 않으며, 3,4,5번 과정을 클라우드 콘솔(또는 AWS CLI)에서만 수행할 수 있습니다.

RDS를 구성할때에는 아래와 같은 과정을 거칩니다.

  1. DBMS 설정 파일 생성 (기본 설정 이용 시 건너뜀)
  2. RDS 구성
  3. 네트워크(VPC) 환경 설정
  4. 개발/운영 환경 접속 테스트

RDS는 기본 DBMS 설정 파일을 제공함과 동시에, 사용자만의 설정파일을 만들수 있도록 하고, 각각의 RDS 인스턴스가 해당 설정파일을 바탕으로 실행되도록 구성합니다. 따라서, DB에 다양한 설정을 적용하고자 하는 경우에는, RDS를 실행하기 전에 설정파일을 먼저 구성하는 것이 좋습니다.

또, RDS 역시 인스턴스 기반의 서비스로 예약 인스턴스/Savings Plan 등을 통해 비용 할인을 받을 수 있습니다.

그 외에도 자체 구축시에는 직접 설정해야하는 Replication 설정 등도 다중 AZ 또는 읽기 전용 복제본을 구성하여 별도 구축 과정 없이 단순 설정만으로 구성이 가능합니다. 특히 메인으로 사용하는 인스턴스에 장애가 발생할 경우 자동으로 main-sub 구성을 변경하거나, 백업을 자동화 시키는 등의 기능이 콘솔에서 굉장히 간단하게 구성되어 있습니다.

RDS 시작하기

RDS는 일반 생성과 손쉬운 생성 두가지 방식의 생성 과정을 제공합니다. 다만 운영 서비스를 개발할 계획이라면 조금 어렵더라도 표준 생성을 이용하여 세부 설정을 디테일하게 관리하는 것이 좋습니다.

엔진 옵션

엔진은 위 언급한 6개 엔진 중 한가지를 골라, 엔진의 버전을 지정할 수 있습니다.

MariaDB의 경우 10.2 버전대 부터 10.6 버전대까지 지원하며, MySQL 역시 최신 Community 버전을 제공합니다.

템플릿

RDS의 세부 설정을 이용하려는 목적에 맞게 불러올 수 있습니다.

  1. 프로덕션: 실제 서비스 운영에 필요한 필수 항목들이 적용됩니다. 운영 비용이 높습니다.
    1. 다중 AZ 배포: 적용2. SSD: 프로비저닝된 IOPS SSD3. 인스턴스 타입: 자유
  2. 개발/테스트: 개발 과정 및 테스트 과정에 사용하기 위한 수준의 옵션을 제공합니다. 비용이 상대적으로 적습니다.
    1. 다중 AZ 배포: 미적용2. SSD: 범용 SSD3. 인스턴스 타입: 자유
  3. 프리티어: RDS를 맛볼수 있게 무료로 사용가능한 옵션으로 시작합니다. 비용이 없습니다.
    1. 다중 AZ 배포: 미적용2. SSD: 범용 SSD (20GB)3. 인스턴스 타입: t2.micro 고정

구축하려는 RDS의 목적에 맞는 적당한 템플릿을 선택한 후 세부 설정을 진행합니다.

설정, 인스턴스 클래스, 스토리지, 가용성 및 내구성

위 선택한 템플릿에 따라 변화하는 옵션값입니다.

설정에서는 구축하는 RDS 인스턴스의 이름과, 접속 가능한 DBMS 계정 정보를 생성합니다.

암호는 분실시 복구 과정이 번거로우니 잘 기억해두는 것이 좋습니다.

DB 인스턴스 클래스 에서는 구성할 RDS의 인스턴스 타입을 선택할 수 있습니다. DB 인스턴스는 일반적으로 메모리 최적화 클래스를 사용하는 것이 권장되며, 데이터 연산도 고려해야 하는 경우라면 스탠다드 클래스를 적용합니다. 프리티어를 사용할 것이 아니라면 버스터블 클래스는 RDS에 적합하지 않으니 가급적 피하는 것이 좋습니다.

스토리지에서는 사용할 SSD의 성능과 크기를 설정할 수 있습니다. 초기 할당되는 스토리지의 크기는 스토리지 자동 조정 기능을 통해 자동으로 확장할 수 있습니다. 예기치 못한 상황이 발생하기 전에 자동으로 스토리지를 확장하여주니 가급적 자동 조정을 활성화 하는 것이 편리합니다.

가용성 및 내구성 메뉴에서는 다중 AZ 배포(대기 인스턴스를 생성하여, 장애 발생시 다른 가용 영역에 있는 대기 인스턴스를 메인 인스턴스로 자동 전환)기능을 설정할 수 있습니다. 클라우드 환경에서는 매우 드물지만 특정 가용 영역 전체에 장애가 발생할 수 있으니, 빠른 대응을 위해 대기 인스턴스를 다른 가용영역에 만들어두는 것이 좋습니다.

연결 및 추가 구성

연결 메뉴에서는 VPC를 포함해 서브넷, 보안그룹 설정을 진행할 수 있습니다. 또 인스턴스가 배치될 메인 가용 영역을 지정할 수 있습니다. 경우에 따라 DBMS 권장 포트인 3306 포트 대신 다른 포트를 사용하고자 하는 경우 ‘추가 구성’ 버튼을 눌러 다른 포트로 지정할 수 있습니다.

추가 구성

RDS와 온프레미스 DB서버간 가장 큰 차이점으로 볼 수 있는 데이터베이스 설정 옵션이 있는 메뉴입니다. 각각의 항목은 아래의 역할을 수행합니다.

  1. 초기 데이터베이스 이름: RDS가 생성되면 자동으로 생성될 첫 Database의 이름을 지정합니다. 이름을 공란으로 둘 경우 RDS는 DBMS 필수 테이블 외에 다른 테이블을 생성하지 않습니다.
  2. DB 파라미터 그룹: DB에 적용할 파라미터의 설정값입니다. AWS에서 각 DBMS 버전 별로 기본 파라미터 설정 파일이 제공되며, 해당 버전에서 처음 RDS를 생성하는 경우 디폴트로 AWS 제공 설정이 선택되어 있습니다.
    1. DB 파라미터 그룹에는 character_set을 포함해 collation_connection 등 DBMS에서 DB를 처음 생성할때 전달하는 파라미터 값들이 포함되어 있습니다.2. 일반적으로 my.cnf 파일에서 설정하는 대부분의 값들이 파라미터 그룹에 포함되어있다고 생각하면 좋습니다. binlog_cache_size , log-bin, max_heap_table_size
  3. 옵션 그룹: RDS에서 제공하는 보안 강화 옵션입니다. 일반적인 DBMS에서 설정하는 값이 아닌 RDS에 적용하는 보안 특성값입니다. RDS에 익숙하지 않은 경우 옵션 그룹은 디폴트 값을 이용하는 것이 권장됩니다.
  4. 백업: 자동 백업을 설정하여 매 정해진 시간마다 백업파일을 생성하고, 언제든지 백업본으로 돌아갈 수 있도록 합니다.
    1. 백업 보존 기간: 백업 파일을 보관할 기간을 설정합니다.2. 백업 기간: 백업을 수행할 시간을 지정합니다. 유저 방문이 적은 새벽 시간대를 활용합니다.
  5. 모니터링: CPU 모니터링을 활성화 하여 RDS의 상태를 조회하기에 더욱 간편하도록 설정합니다.
  6. 로그 내보내기: 각각의 이벤트에 대한 로깅 여부를 설정합니다. 로깅을 설정하면 CloudWatch Logs로 각각의 이벤트가 발생할 때 알림을 받을 수 있습니다.
    1. 에러 로그와 느린 쿼리 로그(슬로우 쿼리)를 활성화 하면 DB 운영간 발생하는 쿼리 이슈를 실시간으로 팔로업 할 수 있습니다.
  7. 유지 관리: RDS의 DBMS 버전을 자동으로 업그레이드 할지, 유지 관리 기간을 설정할지 결정합니다. 자동 업그레이드는 유지 관리 기간 동안 수행하며, 유지 관리 기간을 설정하지 않으면 RDS가 임의로 사용자가 적은 시간대에 유지 관리를 수행합니다.
  8. 삭제 방지: 실수로 RDS를 종료하여 데이터베이스를 삭제하는 일을 막아줍니다.

추가 구성까지 모든 정보를 입력하면 이제 RDS 인스턴스를 실행할 수 있습니다. RDS 최초 실행 시 최대 10분 정도 설치 및 설정 시간이 소요되며, 완료되면 바로 DB에 접속할 수 있습니다.

운영중인 RDS 접속/변경하기

RDS가 작동하기 시작하면, RDS 이름을 클릭하여 세부 화면에 접속할 수 있습니다. AWS가 생성해준 내 RDS의 엔드포인트를 host로 사용하여 연결할 수 있습니다. MariaDB/MySQL 인 경우 아래 명령어로 위 DB에 접속할 수 있습니다.

mysql -u root --host=yonggill-rds.cwneh6dacift.ap-northeast-2.rds.amazonaws.com -p

RDS가 운영중인 경우, 모든 변경 사항은 즉시 적용과 유지 관리 기간에 적용 중 선택할 수 있습니다. 운영중인 데이터베이스라면 유지 관리 기간에 적용을 권장합니다.

파라미터 그룹을 이용해 RDS를 실행한 경우, RDS를 시작할 때 적용한 파라미터 그룹을 먼저 수정한 뒤 RDS 메뉴의 수정 버튼을 클릭하여 불러올 수 있습니다. 수정 작업에서는 기존에 등록된 데이터의 변조/가공이 이루어지지 않으며, 마찬가지로 유지 관리 기간에 파라미터 그룹을 갱신하도록 지정할 수 있습니다.

RDS 돌아보기.

RDS는 온프레미스 서버를 이용하던 개발팀/조직에게는 큰 거부감이 드는 구조로 보여질 수 있습니다. 단순히 my.cnf 파일을 변경한후 DBMS를 재부팅해주기만 하면 모두 적용되던 기존 방식과 다르게, 즉시 적용하기 불안하고, my.cnf 파일 대신 콘솔의 설정파일을 수정하며, 실제로 적용이 된건지 아닌지 바로 확인하기도 어렵습니다.

그럼에도 불구하고 RDS에 적용하고 나면 많은 일들을 알아서 해주는 그 기능과, 온프레미스 또는 EC2에 설치된 DB에 비해 월등히 빠른 속도와 유지관리 기능으로 인해 자신만의 매력을 갖고 있습니다. 이제 시작하는 서비스라면 비용이 조금 부담되더라도 처음부터 RDS를 셋팅하는 것이 좋을 것입니다. 향후 서비스가 갑작스레 커졌을때 RDS 덕분에 큰 고민 없이, 엄청난 시간을 들이는 dump, import 과정없이 버튼 클릭 몇번으로 자유로운 확장이 가능하니까요.

Categorized in:

개발,

Tagged in: