쿼리 주도 데이터 모델링

쿼리 주도 데이터 모델링 (Data Modeling)

데이터 모델링은 엔티티와 그 관계를 식별하는 과정이에요. 관계형 데이터베이스에서는 데이터를 정규화된 테이블에 두고, 외래 키로 다른 테이블의 관련 데이터를 참조하며, 애플리케이션이 할 쿼리가 테이블 구조와 조인에 의해 결정돼요.

출처: Cassandra — Data Modeling

Cassandra는 쿼리 주도

Cassandra에서 데이터 모델링은 **쿼리 주도(query-driven)**예요. 애플리케이션의 데이터 접근 패턴과 쿼리가 데이터의 구조와 구성을 결정하고, 그에 맞춰 데이터베이스 테이블을 설계해요.

데이터는 특정 쿼리를 기준으로 모델링됩니다. 쿼리는 단일 테이블에 접근하도록 설계되는 것이 가장 좋아요. 즉, 쿼리에 관여하는 모든 엔티티가 같은 테이블에 있어야 읽기 속도가 빨라져요. 하나의 테이블은 쿼리 하나 또는 쿼리 집합에 가장 잘 맞도록 구성돼요. 엔티티들은 보통 서로 관계를 가지므로, 엔티티 하나가 여러 테이블에 포함될 수 있어요.

관계형과의 차이

관계형 데이터베이스 모델에서는 쿼리가 여러 테이블에서 데이터를 얻기 위해 조인(join)을 사용해요. 하지만 Cassandra는 조인을 지원하지 않아요. 그래서 쿼리에 필요한 모든 필드(컬럼)를 단일 테이블에 함께 모아야 해요.

각 쿼리가 테이블 하나에 의해 뒷받침되므로, 데이터가 여러 테이블에 걸쳐 중복됩니다. 이 과정을 **비정규화(denormalization)**라고 불러요. 읽기 중심의 워크로드에서 빠른 단일 테이블 접근을 보장하기 위해 일부러 데이터를 중복 저장하는 전략이에요.

모델링의 주의점

쿼리 주도 모델링은 어떤 쿼리를 먼저 설계하느냐에 따라 테이블 구조가 크게 달라져요. 접근 패턴을 먼저 파악하고, 그에 맞는 파티션 키와 클러스터링 컬럼을 정하는 것이 중요해요. 파티션 키가 곧 데이터가 저장될 노드를 결정하므로, 파티션 설계가 잘못되면 핫 파티션(hot partition)이나 읽기 성능 저하를 부를 수 있어요.

더 알아보기