데이터베이스는 데이터를 체계적으로 저장하고 필요할 때 검색/수정/삭제할 수 있도록 구조화해둔 데이터의 집합이다. 단순히 파일에 텍스트를 쌓아두는 것과 달리 데이터 간의 관계나 규칙을 정의해두고 일관된 방식으로 접근할 수 있게 만든 체계이다.
DBMS(Database Management System)는 데이터베이스를 생성/관리/운영하는 소프트웨어다. 사용자가 직접 파일을 다루는 대신 DBMS를 통해 데이터를 저장하고 질의(쿼리)하면 DBMS가 내부적으로 저장 구조/동시 접근 제어/백업 같은 걸 처리해준다. MySQL, PostgreSQL, Oracle, SQL Server 같은 관계형 DBMS(RDBMS)와 MongoDB, DynamoDB 같은 NoSQL DBMS로 크게 나뉜다.
RDS(Relational Database Service)는 AWS가 제공하는 완전관리형 관계형 데이터베이스 서비스다. MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Amazon Aurora 중 원하는 엔진을 선택해서 쓸 수 있고 서버 프로비저닝/OS 패치/백업/장애 복구 같은 운영 작업을 AWS가 대신 처리해준다. 직접 EC2에 데이터베이스를 설치해서 운영하는 것과 비교하면 인프라 관리 부담 없이 데이터베이스 자체에만 집중할 수 있다는 차이가 있다.
RDS 인스턴스는 용도에 따라 몇 가지 계열로 나뉜다.
인스턴스 클래스를 고를 때는 EC2와 마찬가지로 워크로드의 성격(상시 고부하인지, 간헐적인지)에 따라 계열을 먼저 정하고, 그 안에서 크기를 조정하는 방식으로 접근하면 된다.
장점
단점
RDS를 쓰는 기본 흐름은 이렇다.
데이터베이스 엔진 선택 → 인스턴스 클래스/스토리지 설정 → 네트워크(VPC/서브넷 그룹)와 보안 그룹 구성 → 인스턴스 생성 → 엔드포인트로 애플리케이션에서 접속
생성 시 다중 AZ 여부, 백업 보존 기간, 퍼블릭 접근 허용 여부도 함께 설정한다. 생성이 끝나면 RDS가 발급하는 엔드포인트(DNS 주소)로 애플리케이션에서 접속하면 되고, 이후 필요에 따라 읽기 전용 복제본을 추가하거나 인스턴스 크기를 조정할 수 있다.
관계형 데이터베이스와 달리, 키와 값의 쌍으로 데이터를 저장하는 NoSQL 방식도 있다. AWS에서는 대표적으로 두 가지를 제공한다.
DynamoDB는 완전관리형 키밸류/문서 데이터베이스다. 스키마를 미리 엄격하게 정의하지 않아도 되고, 트래픽에 따라 자동으로 확장되며, 응답 속도가 한 자릿수 밀리초 단위로 빠른 게 특징이다. 세션 정보, 사용자 프로필, 게임 리더보드처럼 빠른 조회가 중요하고 데이터 구조가 유연해야 하는 경우에 적합하다.
ElastiCache는 완전관리형 인메모리 캐싱 서비스로, Redis나 Memcached 엔진을 지원한다. 데이터를 디스크가 아니라 메모리에 두기 때문에 조회 속도가 매우 빠르고, 보통 RDS나 DynamoDB 앞단에 캐시 레이어로 두어 자주 조회되는 데이터를 미리 담아두는 용도로 쓴다. 매번 데이터베이스까지 가지 않고 캐시에서 먼저 응답하게 해서 데이터베이스 부하를 줄이고 응답 속도를 높이는 구조다.
관계형 데이터베이스(RDS)가 데이터 간의 관계와 트랜잭션 일관성이 중요한 경우에 적합하다면, 키밸류 데이터베이스는 단순한 구조의 데이터를 빠르게 읽고 쓰는 데 최적화되어 있다는 차이가 있다.
📍 참고 자료: AWS 공식 문서, 패스트캠퍼스 강의 <실전 DevOps의 모든 것>, 책 <그림으로 이해하는 AWS 구조와 기술>