

데이터(data)는 어떤 이론을 세우는 데 기초가 되는 자료로, 문자와 숫자, 그림, 영상 등의 형태로 된 단위이다. 데이터는 원시적인 자료에 불가할 뿐 특정한 의미와 가치는 없다. 이런 데이터를 특정 목적에 따라 가공하고 이론을 세워 의미와 가치를 부여한 결과를 정보라고 한다.
데이터베이스는 데이터를 하나에 모아 두는 것을 의미한다. 데이터 베이스는 간단히 데이터를 모아 두는 집합이라고 정의할 수 있다. 또한 데이터 베이스를 관리하는 시스템을 DBMS(DataBase Management System)라고 하며, DBMS는 데이터에 대해 사용자의 논리적 명령을 해석하고 필요한 데이터를 찾아 주는 시스템이라고 정의할 수 있다.

데이터베이스는 구조, 운영, 저장 방식에 따라 크게 계층형(hierarchical), 네트워크형, 관계형(relational), 객체 지향형(object-oriented) 모델 유형으로 구분할 수 있다.
계층형 데이터베이스 모델은 트리(tree) 구조를 기반으로 하며, 데이터는 1:N으로 상하 종속 관계 구조로 되어 있다. 데이터에 빠르게 접근이 가능하지만, 구조 변경에 대한 유연성이 부족하다는 단점이 있다.
네트워크형 데이터베이스 모델은 계층형 데이터베이스의 정형화된 구조를 해결하기 위해 1:N뿐 아니라 1:1, N:N 형태의 구조를 가질 수 있다. 하위 개체는 다수의 상위 개체를 가질 수 있어 형태가 좀 더 자유롭다. 다만 다양한 개체 간 연결에 따라 복잡성은 높아지기 때문에 데이터베이스 전반의 구조를 이해하는 데 어려움이 따를 수 있다.
관계형 데이터베이스 모델은 데이터의 논리적 관계를 초점으로 특정 개체 정보를 이용하여 열(column)과 행(row)으로 된 테이블(table)이라는 최소 단위로 구성된다. 앞서 계층형과 네트워크형 데이터베이스 모델은 데이터가 변화하면 상관관계에 따라 모든 데이터를 변경해야 하지만, 관계형 데이터베이스 모델은 데이터가 변화하면 쉽게 적용할 수 있다는 장점이 있다. 하지만 시스템 자원을 많이 차지해서 상대적으로 느리다는 단점이 있다. 물론 하드웨어가 발전하면서 느린 동작은 점점 해소되고 있는 편이다. 관계형 DBMS는 현재 가장 많이 사용하는 데이터베이스 모델이며, SQL(Structured Query Language)이라는 프로그래밍 언어를 사용하여 손쉽게 데이터베이스를 읽고 쓰고 해석한다.
객체 지향형 데이터베이스 모델은 모든 데이터를 테이블 형태로 구성하는 관계형 데이터베이스 모델과 다르게 객체(object)라는 형태의 최소 단위로 표현한다. 객체 집합을 정의하고 연결 구조를 확립하여 복잡한 객체 구조도 즉각적으로 표현할 수 있으며, 사용자 정의 데이터, 멀티미디어 등 비정형 데이터도 지원한다. 하지만 보편적으로 사용하는 관계형 데이터베이스의 호환성 문제와 복잡성에 따른 문제도 있다. 현재 객체 지향형 데이터베이스 모델은 특수한 전문 분야가 아니면 잘 쓰지 않는다.

DBMS와 연계되는 다양한 응용 프로그램에서 요구하는 데이터의 형식과 구조를 정의하는 기능으로, 테이블이나 관계의 구조를 정의하는 목적에 따라 CREATE, ALTER, DROP 등의 명령어가 있다.
데이터 검색, 삽입, 삭제 등을 처리하는 인터페이스를 제공하는 기능으로 SELECT, INSERT, UPDATE, DELETE 등의 명령어가 있다.
데이터 무결성 유지와 접근 권한 및 다수의 사용자 데이터베이스에 정확하게 접근하는 기능으로 GRANT, DENY, REVOKE 등 명령어가 있다.
다양한 회사에서 만든 DBMS 제품들이 있는데, 대표적으로 Oracle, MySQL, MS-SQL, PostgreSQL 등이 있다.
인기도 확인: https://db-engines.com/en/ranking
AWS 에서는 사용자 요구 사항에 따라 관계형 데이터베이스 서비스, 키-값 데이터베이스, 인-메모리 데이터베이스 등 다양한 데이터베이스 서비스를 제공한다.
Amazon RDS(Relational Database Service)는 클라우드 환경에서 관계형 데이터베이스를 간편하게 설정하고 운영할 수 있는 서비스이다. 원하는 성능 요구에 따라 다양한 데이터베이스 인스턴스 유형을 선택할 수 있다. Amazon Aurora, PostgreSQL, MariaDB, Oracle Database, SQL Server 등 관계형 데이터베이스 엔진을 선택할 수 있다.
Amazon RDS는 관계형 데이터베이스 모델 유형으로, 테이블 구조에 행과 열로 구성된다. 또한 Amazon RDS는 관계형 데이터베이스 엔진을 사용하기 때문에 SQL 언어 기반으로 데이터베이스를 손쉽게 제어할 수 있다.
Amazon RDS는 사용 편의성이 높고, 모니터링 및 지표와 이벤트 알람을 이용하여 높은 관리 효율성을 보장하며, 비용도 상대적으로 매우 저렴하다. 또한 간편한 복제 기능을 이용하여 워크로드의 가용성과 확장성을 확보할 수 있다.
Multi-AZ 복제 방식은 기본적으로 액티브-스탠바이(active-standby) 형태로 동작한다. Primary DB가 액티브(활성) 상태이며, 보조의 Standby Replica가 스탠바이(대기) 상태이다. Primary DB에 문제가 발생하면 Standby Replica를 Primary DB로 승격하여 동적으로 유지한다.
이런 Multi-AZ 복제 방식은 데이터 정합성을 유지하는 것이 가장 중요하다. 데이터 정합성이란 데이터가 서로 일관되게 일치하는 것으로, 이를 위해 동기식 복제(synchronous replica)로 다른 가용 영역에 있는 데이터베이스와 데이터를 동기화한다. 여기에서 동기식 복제는 데이터에 변화가 일어나면 원본 데이터를 복제해서 전달하여 동기화하는 것을 의미한다.

Read Replica 복제 방식은 원본 데이터를 Primary DB에 두고, 읽기 전용의 복제 데이터를 Read-Replica 데이터베이스에 생성하여 유지한다. 읽기 전용 복제 데이터가 있는 Read Replica 데이터베이스는 확장이 가능하며, 데이터 읽기 처리 속도를 높일 수 있다. Amazon RDS는 최대 다섯 개의 Read Replica 데이터베이스를 복제할 수 있으며, 다른 리전까지 Read Replica 데이터베이스를 가질 수 있다.

AWS 관계형 데이터베이스 서비스는 Amazon RDS를 이용하여 MySQL, PostgreSQL, Oracle 등 데이터베이스 엔진을 주로 사용하다 Amazon Aurora라는 AWS 자체의 클라우드 데이터베이스 엔진을 개발했다. Amazon Aurora는 엔터프라이즈 수준의 관계형 데이터베이스 엔진으로 안정적이고 고성능의 데이터베이스 처리가 가능하다. 또한 오픈 소스를 기반으로 다른 관계형 데이터베이스와 호환성이 우수하며, 비용 효율이 높다는 장점이 있다. 이런 Amazon Aurora 데이터베이스 엔진은 Amazon RDS에서 관리하며 프로비저닝, 패치, 백업, 복원, 장애 복구 등의 작업을 수행한다.
Amazon Aurora 데이터베이스 엔진은 다른 관계형 데이터베이스 엔진보다 스토리지 내결함성이 우수하다. 예를 들어, MySQL 데이터베이스 엔진은 데이터베이스 인스턴스에 EBS 스토리지가 연결되어 서로 다른 가용 영역으로 동기식 복제가 된다. 반면 Amazon Aurora 데이터베이스 엔진은 공유 스토리지를 통해 최소 세 개의 가용 영역에서 두 개씩 총 여섯 개의 복제 데이터를 가지고 있어 더욱 안정적으로 서비스할 수 있다.
Amazon DynamoDB는 비관계형 데이터베이스로, 키-값(key-value) 메소드를 사용하는 키-값 데이터베이스이다. 여기에서 비관계형 데이터베이스는 관계형 데이터베이스와 다르게 데이터가 서로 연결되지 않는 개별 형태로 저장하여 복잡하고 구조화되지 않은 데이터 유형에 적합한 데이터베이스이다. 앞서 관계형 데이터베이스가 SQL 언어를 사용했다면, Amazon DynamoDB는 비관계형 데이터베이스로 SQL 문을 사용하지 않는다. 이런 측면에서 NoSQL 데이터베이스라고도 한다.
Amazon DynamoDB의 데이터베이스 구조는 키와 값으로 된 비관계형 데이터베이스 유형이다. 키를 데이터의 고유한 식별자로 사용하고, 값은 유형의 제한이 없어 단순한 개체(entity)뿐 아니라 복잡한 집합체까지 무엇이든 가능한 비정형 데이터를 입력할 수 있다. 이런 키와 값을 쌍으로 집합해서 저장한다.
키-값 데이터베이스는 데이터베이스 구조가 단순하여 빠른 처리가 가능하다. 이런 특성에 따라 Amazon DynamoDB는 대규모 환경에서도 일관되게 10밀리초 미만의 처리 성능을 제공한다. 그리고 Amazon DynamoDB는 별도 서버를 구축하지 않고 운영되는 서버리스(serverless)로 동작하기 때문에 서버에 대한 프로비저닝, 패치, 소프트웨어 설치가 필요 없고 용량에 따라 테이블을 자동으로 확장 및 축소해서 관리 편의성이 높다.
Amazon ElastiCache는 인-메모리 데이터베이스로, 데이터를 메모리에 젖아하는 형태로 동작한다. 데이터가 메모리상에 위치하여 데이터를 빠르게 처리할 수 있다는 장점이 있지만, 데이터양이 많다면 데이터 처리가 느려질 수 있기 때문에 대용량 데이터에는 적합하지 않고 주로 데이터를 빠르게 자주 접근해야 할 때 사용한다. 이런 Amazon ElastiCache는 Memcached 방식과 Redis 방식 두 가지로 구분된다.
Memcached는 보편적으로 사용하는 메모리 객체 캐싱 시스템으로, 인-메모리 데이터베이스 서비스이다. Amazon ElastiCache for Memcached는 Memcached와 호환하여 자주 접근할 데이터를 메모리에 놓고 빠르게 처리할 수 있다.
Redis는 데이터베이스, 캐시, 메시지 브로커 및 대기열 용도로 사용되는 인-메모리 데이터베이스 서비스이다. Amazon ElastiCache for Redis는 오픈 소스인 Redis 기반으로 구축되고 Redis API와 호환하여 개방형 Redis 데이터 형식으로 저장한다. 실시간 애플리케이션을 지원할 수 있도록 1밀리초 미만의 지연으로 빠른 데이터를 처리할 수 있다.
