키-값 데이터베이스는 간단한 키-값 메서드를 사용하여 데이터를 저장하는 비관계형 데이터베이스 유형으로, NoSQL 데이터베이스라고도 합니다. 키를 고유한 식별자로 사용하는 키-값 페어의 컬렉션으로 데이터를 저장합니다. 단순한 객체에서 복잡한 객체에 이르기까지 무엇이든 키와 값이 될 수 있습니다. 키-값 데이터베이스(또는 키-값 스토어)는 분할성이 커서 다른 유형의 데이터베이스로는 불가능한 수준까지 수평 확장을 가능하게 합니다.

키-값 데이터베이스의 장점은 무엇인가요?

기존 관계형 데이터베이스(SQL 데이터베이스)는 행과 열이 포함된 테이블 형식으로 데이터를 저장합니다. 데이터에 엄격한 구조를 적용하므로 모든 사용 사례에 적합하지는 않습니다. 반면, 키-값 데이터베이스는 NoSQL 데이터베이스입니다. 특정 사용 사례에 맞게 유연하게 데이터베이스 스키마를 사용하고 규모에 맞게 성능을 개선할 수 있습니다. 키-값 스토어의 장점은 다음과 같습니다.

확장성

모든 사용자 쿼리에는 데이터 상호 작용이 필요하기 때문에 데이터베이스가 애플리케이션 성능의 병목 현상이 되는 경우가 많습니다. 복제 및 샤딩과 같은 여러 가지 문제 해결 전략은 애플리케이션 코드의 복잡성을 가중시킵니다. 많은 키-값 데이터베이스가 고급 확장 기능을 기본적으로 지원합니다. 수평적으로 확장하고 서버 간에 데이터를 자동으로 분산하여 단일 서버에서 병목 현상을 줄입니다.

사용 편의성

키-값 데이터베이스는 개발자가 실제 객체를 소프트웨어 객체에 직접 매핑할 수 있는 객체 지향 패러다임을 따릅니다. Java와 같은 여러 프로그래밍 언어도 동일한 패러다임을 따릅니다. 엔지니어는 코드 객체를 여러 기본 테이블에 매핑하는 대신 코드 객체와 일치하는 키-값 페어를 만들 수 있습니다. 따라서 개발자는 보다 직관적으로 키-값 스토어를 사용할 수 있습니다.

성능

키-값 데이터베이스는 오버헤드가 낮은 서버 직접 호출을 통해 지속적인 읽기-쓰기 작업을 처리합니다. 따라서 지연 시간이 개선되고 응답 시간이 단축되어 규모에 맞게 성능이 향상됩니다. 상호 관련된 여러 테이블이 아닌 단순한 단일 테이블 구조를 기반으로 합니다. 관계형 데이터베이스와 달리 키-값 데이터베이스는 리소스를 많이 사용하는 테이블 조인을 수행할 필요가 없으므로 속도가 훨씬 빠릅니다.

키-값 데이터베이스의 사용 사례는 무엇인가요?

키-값 데이터베이스 시스템을 애플리케이션의 기본 데이터베이스로 사용하거나 틈새 요구 사항을 처리하는 데 사용할 수 있습니다. 아래에 키-값 데이터베이스 사용 사례의 예시가 나와 있습니다.

세션 관리

웹 애플리케이션과 같은 세션 지향 애플리케이션은 사용자가 애플리케이션에 로그인할 때 세션을 시작하고 사용자가 로그아웃하거나 세션의 시간이 초과될 때까지 활성화된 상태로 있습니다. 그 사이 애플리케이션은 모든 사용자 세션 속성을 주 메모리 또는 데이터베이스에 저장합니다. 사용자 세션 데이터에는 대체로 프로필 정보, 메시지, 개인 설정 데이터 및 테마, 권장 사항, 사용자 대상 판촉 및 할인이 세션 데이터에 해당됩니다.

각 사용자 세션에는 고유 식별자가 있습니다. 세션 데이터는 기본 키 이외의 다른 키에 의해 쿼리되지 않으므로 속도가 빠른 키-값 저장소가 세션 데이터에 더 적합합니다. 일반적으로 키-값 데이터베이스는 관계형 데이터베이스에 비하여 페이지당 제공하는 오버헤드가 적습니다.

장바구니

연말연시 쇼핑 시즌에 전자 상거래 웹사이트에는 수 초 만에 수십억 개의 주문이 들어올 수 있습니다. 키-값 데이터베이스는 분산 처리 및 저장을 통해 한꺼번에 수백만 명의 사용자에게 서비스를 제공하는 동시에 대량의 데이터 처리와 매우 많은 양의 상태 변경 작업을 처리할 수 있습니다. 또한 키-값 스토어는 기본 제공 이중화를 통해 스토리지 노드의 손실을 방지합니다.

메타데이터 스토리지 엔진

키-값 스토어를 기본 스토리지 계층으로 사용하면 데이터 액세스 수준을 높일 수 있습니다. 예를 들어 실시간 비디오 스트리밍 및 대화형 콘텐츠와 같은 미디어 및 엔터테인먼트 워크로드의 처리량과 동시성을 확장할 수 있습니다. 수백만 동시 사용자의 플레이어 데이터, 세션 기록 및 순위표를 사용하여 게임 플랫폼을 구축할 수도 있습니다.

캐싱

키-값 데이터베이스를 사용하여 데이터를 임시로 저장하면 검색이 빨라집니다. 예를 들어 소셜 미디어 애플리케이션의 경우 뉴스 피드 콘텐츠와 같이 자주 액세스하는 데이터를 저장할 수 있습니다. 또한 인 메모리 데이터 캐싱 시스템은 키-값 스토어를 사용하여 애플리케이션 응답을 가속화합니다.

키-값 데이터베이스는 어떻게 작동하나요?

키-값 데이터베이스는 모든 데이터를 키-값 페어 세트로 구성하는 방식으로 작동합니다. 키는 질문이고 값은 질문에 대한 답으로 생각하면 됩니다. 아래 예에서 프라이머리 키는 Product ID와 Type이라는 키 2개를 합친 것입니다. Product ID는 항목이 저장될 파티션을 설명하는 파티션 키입니다. Type은 항목을 디스크에 저장하는 순서를 결정하는 정렬 키입니다. 파티션 키와 정렬 키의 조합이 고유한 프라이머리 키를 형성하고, 프라이머리 키는 데이터베이스의 단일 값에 매핑됩니다.

이 예제에서 book이라는 데이터 객체에는 title, author, publishing date와 같은 속성이 있습니다. 모든 book 데이터 객체에는 BookID라는 키가 있습니다. BookID를 키-값 스코어에서 관련된 book 객체에 직접 연결할 수 있습니다. 또한 테이블에서 BookID를 조회하여 데이터를 검색할 수 있습니다. 또한 각 항목에 자체 스키마가 있으므로 키-값 스토어는 다양한 구조의 데이터를 매우 유연하게 저장할 수 있습니다.

DynamoDB에 키-값 페어로 저장된 데이터의 예를 보여주는 다이어그램

키-값 데이터베이스의 기능은 무엇인가요?

선택한 솔루션에 따라 키-값 스토어는 다음과 같은 몇 가지 추가 기능을 제공할 수 있습니다.

복잡한 데이터 유형 지원

키-값 스토어는 정수 및 텍스트와 같은 정의된 데이터 유형을 지원합니다. 그러나 이들 중 다수는 배열, 중첩 사전, 이미지, 비디오 및 반구조화된 데이터와 같은 더 복잡한 객체도 지원할 수 있습니다. 데이터베이스에 데이터에 대한 추가 정보를 제공하면 스토리지 및 쿼리 성능을 추가로 최적화할 수 있는 여지가 생깁니다.

테이블 조인 불필요

키-값 데이터베이스는 리소스를 많이 사용하는 테이블 조인을 수행할 필요가 없습니다. 유연성이 뛰어나기 때문에 필요한 모든 정보를 단일 테이블에 저장할 수 있습니다. 이것이 키-값 스토어가 성능이 높은 이유 중 하나입니다.

정렬된 키

키-값 스토어에서 키를 정렬하면 데이터를 체계적으로 저장하고 분할을 구현할 수 있습니다. 예를 들어 키를 다음과 같이 정렬할 수 있습니다.

  • 알파벳순 또는 숫자순
  • 연대순
  • 데이터 크기별

고객의 이메일 주소를 고유 키로 사용하는 키-값 스토어를 예로 들어 보겠습니다. 이메일 주소를 알파벳순으로 정렬하면 A~J 이메일 목록의 모든 데이터는 서버 1에 저장되고 K~S는 서버 2에 저장됩니다.

보조 키 지원

일부 키-값 스토어에서는 둘 이상의 서로 다른 키 또는 보조 인덱스를 정의하여 동일한 데이터에 액세스할 수 있습니다. 예를 들어 주요 이메일 주소 및 주요 전화번호별로 고객 데이터를 저장할 수 있습니다.

복제

많은 키-값 스토어는 여러 스토리지 노드에 데이터를 자동으로 복사하는 기본 제공 복제 지원을 제공합니다. 이렇게 하면 재해 발생 시 자동 복구에 도움이 되므로 서버 장애 시에도 데이터를 유지할 수 있습니다.

분할

분할은 노드 간에 데이터를 분배하는 방법입니다. 대부분의 키-값 데이터베이스는 기본 분할 옵션을 제공합니다. 일부는 파티션에 대한 입력 파라미터를 정의하는 옵션도 제공합니다. 예를 들어 숫자 키를 1,000개의 그룹으로 분할할 수 있습니다. 또한 고급 키-값 데이터베이스는 여러 지리적 위치에 키-값 데이터베이스를 배포하기 위한 자동 지원을 제공합니다. 이렇게 하면 사용자 위치와 가까운 곳에서 쿼리에 응답할 수 있으므로 애플리케이션의 가용성과 신뢰성이 향상됩니다.

ACID 지원

원자성, 일관성, 격리성 및 내구성(ACID)은 모든 상황에서 데이터의 정확성과 신뢰성을 보장하는 데이터베이스 속성입니다. 예를 들어 데이터를 순차적으로 여러 번 변경하는 경우 원자성을 위해서는 모든 변경 사항이 순서대로 적용되어야 합니다. 변경 사항 1개가 실패하면 모든 것이 실패합니다.

고급 키-값 데이터베이스는 ACID에 대한 서버측 지원을 기본적으로 제공합니다. 따라서 개발자는 테이블 내에서 그리고 전체 테이블에서 여러 항목을 모두 변경하거나 전혀 변경하지 않는 조정된 변경 작업을 간편하게 수행할 수 있습니다. 개발자는 트랜잭션 지원을 통해 규모, 성능 및 엔터프라이즈 이점을 광범위한 미션 크리티컬 워크로드 세트로 확장할 수 있습니다.

키-값 데이터베이스의 한계는 무엇인가요?

모든 종류의 기술을 선택할 때와 마찬가지로 키-값 데이터베이스도 몇 가지 절충이 필요합니다.

복잡한 쿼리의 부재

키-값 데이터베이스는 복잡한 쿼리를 지원하지 않으므로 개발자는 코드에서 이 문제를 해결해야 합니다. 데이터 작업은 주로 가져오기, 넣기, 삭제와 같은 간단한 쿼리 언어 용어를 통해 이루어집니다. 데이터에 액세스하기 전에 데이터를 필터링하고 정렬할 수 있는 양에 제한이 있습니다.

스키마 관리 부실

키-값 스토어 설계는 개발자에게 스키마를 강요하지 않습니다. 누구나 데이터베이스 프로그램에서 스키마를 수정할 수 있습니다. 장기적인 문제를 피하려면 개발 팀에서 데이터 모델을 체계적으로 계획해야 합니다. 엄격한 스키마가 없다는 것은 애플리케이션에 사용되는 데이터를 애플리케이션이 적절하게 해석해야 한다는 의미이기도 합니다. 이를 'Schema On Read(읽을 때 스키마가 정의됨)'라고도 합니다.

AWS는 키-값 데이터베이스 요구 사항을 어떻게 지원하나요?

Amazon DynamoDB는 규모와 상관없이 고성능 애플리케이션을 실행하도록 설계된 가장 인기 있는 키-값 데이터베이스 중 하나입니다. 완전관리형 다중 리전, 다중 활성 데이터베이스로, 다음과 같은 기능을 제공합니다.

  • 0까지의 규모를 조정을 포함하여 무한한 확장성과 10밀리초 미만의 일관된 지연 시간을 제공합니다.
  • 서버리스이므로 버전 업그레이드, 유지 관리 기간, 서버 또는 소프트웨어 관리가 불필요합니다.
  • 99.999%의 가용성을 제공하도록 설계되었습니다. DynamoDB 글로벌 테이블은 액티브-액티브 복제를 제공하므로 로컬 읽기 성능으로 전 세계에 분산된 애플리케이션을 구축할 수 있습니다.
  • 기본으로 제공되는 저장 시 암호화, 시점 복구, 온디맨드 백업 및 복원 등을 통해 향상된 보안과 신뢰성을 제공합니다.
  • Amazon DynamoDB Accelerator(DAX) 호환성, Amazon S3에서 대량 가져오기/내보내기, Amazon Kinesis Data Streams, Amazon Cloudwatch를 포함한 많은 AWS 서비스와 통합하여 쉽게 사용할 수 있습니다.

NoSQL 테이블 생성 및 쿼리에 대한 이 단계별 자습서를 통해 10분 내에 DynamoDB를 가동하고 실행할 수 있습니다. 지금 무료 계정을 생성하여 AWS에서 키-값 데이터베이스를 시작하세요!

Amazon DynamoDB 소개
Amazon DynamoDB 데이터 모델링