TechnologyOctober 22, 2010

데이터 영속성의 개념과 그 중요성

Matt Pfeil
Matt Pfeil
데이터 영속성의 개념과 그 중요성

다양한 데이터 저장소 시스템을 평가하기 위해서는 먼저 영속성의 의미를 이해해야 합니다. 대다수 최신 애플리케이션에서 데이터 저장소는 중요한 요소이며 이에 관해 잘못된 의사결정을 내리면 자칫 막대한 다운타임과 데이터 손실이 발생할 가능성도 있습니다. 이번 포스트에서는 영속성과 데이터 저장소 설계 방식에 대해 알아본 다음 해당 맥락에 관한 Cassandra의 특성을 살펴보겠습니다.

Cassandra 및 기타 NoSQL 데이터베이스의 영속성에 대해 더욱 자세히 알고 싶다면 저희가 준비한 NoSQL에 대한 완벽한 지침서 를 확인해 보세요.

데이터 영속성이란?

영속성은 '원인이 사라진 이후에도 결과가 지속됨'을 뜻합니다. 컴퓨터 시스템에 데이터를 저장하는 상황에서의 영속성이란 데이터를 생성한 프로세스가 종료된 후에도 해당 데이터가 남아 있어야 함을 뜻합니다. 다시 말해 영속성을 갖춘 데이터 저장소란 비휘발성 저장소여야만 합니다.

어떤 데이터 저장소가 영속성을 갖추고 있을까?

영속성을 갖춘 데이터 저장소가 필요하다면 먼저 데이터 저장소 구현 방식 네 가지를 알아야 하며 각 방식이 어떤 식으로 영속성을 제공하는지 이해해야 합니다.

  • Memcached나 Scalaris처럼 영속성이 전무한 순수 메모리 저장소
  • Oracle Coherence나 Redis처럼 주기적 스냅샷을 생성하는 메모리 저장소
  • MySQL ISAM이나 MongoDB처럼 제자리 덮어쓰기를 하는 디스크 기반 저장소
  • 기존의 모든 OLTP 데이터베이스와 같은 커밋 로그 기반의 저장소(Oracle, SQL 서버 등)

메모리 저장 방식은 굉장한 속도를 자랑하지만 비교적 작은 데이터 세트만을 저장할 수 있다는 단점이 있습니다. 대부분의 워크로드에는 비교적 '뜨거운' (활발히 사용되는) 데이터가 부분적으로 존재합니다. 활발히 사용되는 데이터만이 아니라 데이터 세트 전체를 메모리에 저장해야 하는 시스템은 캐시용으로는 적합하지만 그외 대다수의 애플리케이션에는 적합하지 않습니다. 왜냐하면 데이터가 메모리에만 존재하므로 프로세스가 종료되면서 사라지기 때문입니다. 그러므로 메모리 저장소는 영속성을 갖추고 있지 못합니다.

시스템에 영속성 부여하기

메모리 저장식 시스템에 영속성을 부여하는 가장 간편한 방법은 적절한 기간을 설정해 주기적으로 디스크에 스냅샷을 생성하는 것입니다. 이 방식에서는 데이터가 소실되어도 설정된 기간 내의 업데이트 분량만 사라질 뿐입니다.

제자리 덮어쓰기와 커밋 로그 기반 시스템은 항상 비휘발성 저장을 하지만, 커밋 로그 기반 방식만이 성공 이전에 지속된 쓰기를 모두 클라이언트에게 반환하면서 ACID 의 D에 해당하는 지속성(Durability)을 제공합니다.

Cassandra 커밋 로그 기반 영속성 설계, 를 구현하지만 동시에 지속성을 다양한 수준으로 조정할 수 있게 합니다. 이를 바탕으로 사용자는 안전성과 성능 사이에서 균형점을 찾을 수 있습니다. 사용자는 다음과 같은 업데이트 작업이 완료될 때까지 각각의 쓰기 작업을 대기시킬 수 있습니다.

  • 메모리에 버퍼하기
  • 단일 머신의 디스크에 쓰기
  • 여러 머신의 디스크에 쓰기
  • 여러 데이터 센터에 존재하는 여러 머신의 디스크에 쓰기

또는 네트워크에서 완전히 역직렬화되기 전에 쓰기 수신을 즉각 승인하여 쓰기를 최대한 빨리 수락할 수도 있습니다.

데이터 영속성이 중요한 이유

주어진 데이터에 대한 성능과 지속성의 상충관계에서 적절한 균형점을 찾을 수 있는 사람은 결국 사용자 자신뿐입니다. 그 균형점을 찾기 위해서는 반드시 각 데이터 저장 기술을 정확히 이해하고 그에 기반한 의사결정을 내려야 합니다. Cassandra는 상충 관계를 조정할 수 있는 다양한 옵션을 제공하므로 지속성과 성능을 모두 갖춘 데이터 저장소가 필요한 시스템에 아주 적합합니다.

Discover more
Architecture
Share

One-stop Data API for Production GenAI

Astra DB gives JavaScript developers a complete data API and out-of-the-box integrations that make it easier to build production RAG apps with high relevancy and low latency.