Amazon Web Services 한국 블로그
Amazon Quantum Ledger Database(QLDB) – 서버리스 원장 데이터베이스 정식 출시
다양한 데이터 유형, 쿼리 모델, 인덱싱 옵션, 확장성에 대한 기대치 및 성능 요구 사항을 고려할 때, 데이터베이스는 절대 획일적으로 적용 가능한 제품이 아닙니다. AWS에는 다양한 AWS 데이터베이스 선택 옵션이 있으며 각 서비스는 서로 다른 유형의 애플리케이션 요구 사항을 충족하도록 특별히 설계되었습니다.
이 중에서도 AWS 데이터베이스 제품군의 신규 멤버인 Amazon Quantum Ledger Database(QLDB)는 작년 리인벤트에서 처음 발표되어 미리 보기 형태로 공개하였습니다. 이제 Amazon QLDB를 정식 출시합니다.
Amazon QLDB 소개
원장 데이터베이스인 Amazon QLDB는 저장된 데이터에 대한 신뢰할 수 있는 데이터 원본(레코드 시스템이라고도 함)을 제공하도록 설계되었습니다. QLDB에는 커밋된 모든 데이터 변경 사항의 완전하고 변경 불가능한 기록이 유지되며 이러한 기록은 업데이트, 변경 또는 삭제가 불가능합니다.
QLDB는 기록 데이터에 대한 PartiQL SQL 쿼리를 지원하며 기록의 정확성 및 적법성을 암호로 확인하는 데 사용할 수 있는 API도 제공합니다.
이러한 기능 덕에 QLDB는 뱅킹 및 금융, 전자상거래, 교통 및 물류, HR 및 급여, 제조와 정부 애플리케이션을 비롯하여 저장된 데이터의 무결성 및 기록을 유지해야 하는 다른 많은 사용 사례에 적합합니다.
QLDB 주요 개념
자세한 내용으로 들어가기 전에 가장 중요한 QLDB 개념을 검토하겠습니다.
- 원장(Ledger) – QLDB 원장은 완전하고 변경 불가능한 테이블 변경 기록을 유지하는 일련의 QLDB 테이블 및 저널로 구성됩니다. 원장에는 이름이 지정되며 태그를 지정할 수 있습니다.
- 저널(Journal) – 저널은 이전 블록에 암호 체인으로 연결되어 변경 사항을 확인할 수 있는 블록 시퀀스로 구성됩니다. 블록에는 테이블의 실제 변경 사항이 효율적인 검색을 위해 인덱싱된 상태로 포함됩니다. 이 추가 전용 모델에서는 이전 데이터를 편집하거나 삭제할 수 없으며 원장이 변경 불가능한 상태로 유지됩니다. QLDB에서는 저널의 일부 또는 전부를 S3로 내보낼 수 있습니다.
- 테이블(Table) – 테이블은 원장 내에 존재하며 문서 수정 버전의 컬렉션이 포함됩니다. 테이블은 문서 필드에 대한 선택적 인덱스를 지원합니다. 인덱스를 사용하면 등호(
=
) 조건자를 사용하는 쿼리의 성능을 개선할 수 있습니다. - 문서(Document) – 문서는 테이블 내에 존재하며 Amazon Ion 형태여야 합니다. Ion은 JSON의 상위 집합으로, 데이터 유형, 유형 주석 및 설명이 추가됩니다. QLDB는 중첩된 JSON 요소가 포함된 문서를 지원하며 이러한 요소를 참조하고 포함하는 쿼리를 쓸 수 있는 기능을 제공합니다. 문서는 특정 스키마를 준수하지 않아도 되므로 변경 사항에 따라 쉽게 조정 가능한 애플리케이션을 유연하게 구축할 수 있습니다.
- PartiQL – PartiQL은 특정 데이터 원본에 종속되지 않으면서 관계형, 반 구조화 및 중첩된 데이터에 대한 SQL 호환 액세스를 지원하는 새로운 개방형 표준 쿼리 언어입니다. 자세한 내용은 PartiQL 발표: 모든 데이터에 사용할 수 있는 단일의 쿼리 언어를 참조하십시오.
- 서버리스(Serverless) – 용량 프로비저닝이나 읽기 및 쓰기 처리량 구성에 대해 걱정할 필요가 없습니다. 원장을 생성하고 테이블을 정의하면 QLDB가 애플리케이션의 요구 사항에 맞게 자동으로 크기 조정을 수행합니다.
Amazon QLDB 시작하기
AWS 관리 콘솔, AWS CLI(명령줄 인터페이스), CloudFormation 템플릿에서 QLDB 원장 및 테이블을 생성하거나 QLDB API를 호출하여 QLDB 원장 및 테이블을 생성할 수 있습니다.
여기서는 QLDB 콘솔을 사용하고 Getting Started with Amazon QLDB의 단계를 따르도록 하겠습니다. 우선 AWS 관리 콘솔을 열고 [Start tutorial]을 클릭하여 시작합니다.
[Getting Started] 페이지에 처음 3개 단계가 나옵니다. [Create ledger]를 클릭하여 계속합니다(새 브라우저 탭에서 열림).
원장 이름(vehicle-registration)을 입력하고 [Create ledger]를 다시 클릭하여 계속합니다.
원장은 [Creating] 상태에서 시작되어 1~2분 내에 [Active] 상태로 전환됩니다.
[Getting Started] 페이지로 돌아가서 원장 목록을 새로 고치고 원장을 선택한 다음 [Load sample data]를 클릭합니다.
1~2초 후에 테이블 4개와 인덱스 6개가 생성됩니다.
CREATE TABLE
, CREATE INDEX
및 INSERT INTO
같은 PartiQL 문을 사용하여 이 작업을 완료할 수도 있습니다.
테이블, 인덱스 및 샘플 데이터가 로드되었으니 [Editor]를 클릭하고 첫 번째 쿼리(단일 테이블 SELECT
)를 실행합니다.
단일 행이 반환됩니다. VIN
필드에서 인덱스를 활용할 수도 있습니다. 테이블 2개를 조인하는 더 복잡한 쿼리를 실행할 수도 있습니다.
여기의 쿼리를 사용하여 문서의 ID를 가져온 다음 문서를 업데이트할 수 있습니다.
특정 범위 내의 수정 및 특정 문서의 수정을 찾는 기능을 사용하면 테이블 또는 테이블의 특정 문서에 대한 변경 기록을 쿼리할 수 있습니다(자세한 내용은 Querying Revision History 참조). 다음은 VehicleRegistration
테이블의 모든 문서에 대한 수정 기록(이 게시물을 작성한 날 수정된 내용)을 반환하는 단순한 쿼리입니다.
보시다시피 각 행은 구조화된 JSON 객체입니다. 원하는 행을 선택한 다음 [View JSON]을 클릭하면 추가 검사를 수행할 수 있습니다.
앞서, PartiQL로 중첩된 데이터를 처리할 수 있다고 했습니다. VehicleRegistration
테이블에는 다음과 같은 소유권 정보가 포함되어 있습니다.
PartiQL에서 “.” 표기법을 사용하여 중첩된 데이터를 참조할 수 있습니다.
원장의 저널에 저장된 문서의 무결성을 확인할 수도 있습니다. 이 작업은 Verify a Document in a Ledger에 모두 설명되어 있으며 암호화 방식 확인의 기능과 가치를 보여주는 좋은 예입니다. 각 QLDB 원장에는 연결된 다이제스트가 있습니다. 다이제스트는 어떤 시점을 기준으로 원장의 전체 문서 수정 버전 기록을 고유하게 표현하는 256비트 해시 값입니다. 다이제스트에 액세스하려면 원장을 선택하고 [Get digest]를 클릭합니다.
[Save]를 클릭하면 원장을 확인하는 데 필요한 모든 정보가 포함된 짧은 파일이 콘솔에 표시됩니다. 이 파일을 안전한 위치에 저장하고 원장의 문서를 확인할 때 사용합니다. 확인할 시기가 되면 파일을 가져온 다음 왼쪽 탐색 창에서 [Verification]을 클릭하고 확인을 수행하는 데 필요한 값을 입력합니다. 여기에는 문서 수정 버전의 블록 주소와 문서의 ID가 포함됩니다. 앞서 저장한 다이제스트도 선택하고 [Verify]를 클릭합니다.
QLDB는 해시를 다시 계산하여 문서가 몰래 변경되지 않았는지 확인한 다음 확인을 표시합니다.
프로덕션 환경에서는 QLDB API를 사용하여 다이제스트를 주기적으로 다운로드하고 문서의 무결성을 확인합니다.
QLDB로 애플리케이션 구축하기
Amazon QLDB Driver for Java를 사용하여 원장 데이터베이스에 액세스하고 데이터베이스를 조작하는 코드를 작성할 수 있습니다. 이 Java 드라이버를 사용하면 세션을 생성하고 트랜잭션 범위 내에서 PartiQL 명령을 실행하고 결과를 검색할 수 있습니다. 다른 언어에 대한 드라이버는 현재 작업 중이며 곧 추가 정보를 알려드릴 것입니다.
정식 출시
이제 Amazon QLDB를 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오레곤), EU(아일랜드) 및 아시아 태평양(도쿄) 지역에서 사용할 수 있습니다. 요금은 다음 요인을 기준으로 부과되며 Amazon QLDB 요금 페이지에 몇 가지 실제 예제와 함께 자세히 설명되어 있습니다.
- 쓰기 작업
- 읽기 작업
- 저널 스토리지
- 인덱싱된 스토리지
- 데이터 전송
— Jeff