본문 바로가기
IT

[PostgreSQL] Citus란? (개념, 장단점, 면접 대비)

by 유나니나노 2024. 3. 26.
반응형

 

Citus

Citus는 PostgreSQL을 기반으로 한 분산 데이터베이스 확장입니다. 이는 PostgreSQL의 기능을 확장하여 대량의 데이터를 처리할 수 있게 해 주며, 높은 확장성과 병렬 처리 기능을 통해 빅 데이터 분석과 트랜잭션 처리에 적합합니다. Citus는 오픈 소스 버전과 엔터프라이즈 버전을 모두 제공합니다.

 

주요 개념

  • 분산 데이터베이스: Citus는 여러 노드에 걸쳐 데이터를 분산시켜 저장하고 처리합니다. 이는 데이터의 샤딩(Sharding)을 통해 이루어지며, 각 샤드는 PostgreSQL의 표준 테이블로 구성됩니다.
  • 확장성: 데이터와 쿼리를 여러 머신에 분리함으로써, 데이터베이스의 성능과 용량을 수평으로 확장할 수 있습니다.
  • 실시간 분석: 분산된 데이터에 대한 병렬 집계 쿼리를 실행하여 실시간으로 분석할 수 있습니다.
  • 멀티테넌트 애플리케이션: 각 테넌트의 데이터를 별도의 샤드에 저장하여, 다수의 테넌트를 효율적으로 관리할 수 있습니다.

데이터 샤딩(Datat Sharding)

  • 정의: 데이터 샤딩이란 대규모 데이터셋을 작은 파편(샤드)으로 나누어 여러 서버(노드)에 분산 저장하는 기술입니다. 이를 통해 데이터 관리의 복잡성을 줄이고, 쿼리 응답 시간을 단축할 수 있습니다.
  • 동작 방식: Citus에서는 하나의 샤드가 PostgreSQL의 표준 테이블로 구성되며, 각 샤드는 별도의 노드에 할당됩니다. 사용자는 샤딩 키(Sharding Key)를 기준으로 데이터를 샤드에 할당하며, 이 키는 데이터를 일관되게 분배하는 데 사용됩니다.

병렬 처리(Parallel Query Execution)

  • 정의: 실시간 분석은 데이터가 생성되는 즉시 분석을 수행하는 기술로, 최신 데이터에 기반한 인사이트를 신속하게 얻을 수 있습니다.
  • 동작 방식: Citus는 분산된 데이터에 대해 복잡한 집계 쿼리를 신속하게 수행할 수 있습니다. 이를 통해 대규모 데이터셋에 대한 실시간 분석이 가능하며, 사용자는 최신 데이터를 기반으로 빠른 의사 결정을 내릴 수 있습니다.

멀티테넌트 아키텍처(Multi-tenant Architecture)

  • 정의: 멀티테넌트 아키텍처는 하나의 인스턴스(소프트웨어 또는 서버)가 여러 사용자(테넌트)의 애플리케이션을 동시에 지원하는 구조입니다.
  • 동작 방식: Citus는 각 테넌트의 데이터를 별도의 샤드에 저장하여, 테넌트 별로 데이터 격리를 제공합니다. 이를 통해 여러 테넌트가 하나의 데이터베이스 클러스터를 공유하면서도, 각각의 데이터 보안과 격리를 유지할 수 있습니다.

 

Citus의 이러한 개념들은 PostgreSQL의 기능을 확장하여 대규모 데이터셋을 효율적으로 관리하고, 높은 성능의 분산 데이터 처리를 가능하게 합니다. 이는 대규모 온라인 트랜잭션 처리(OLTP) 시스템, 실시간 데이터 분석, 멀티테넌트 SaaS 애플리케이션 등 다양한 용도에 적합하게 만듭니다. 

 

 

활용 사례

 

대규모 온라인 트랜잭션 처리(OLTP)

  • 적용 방식: Citus는 분산 데이터베이스 구조를 통해 대규모 트랜잭션 데이터를 효율적으로 처리할 수 있도록 합니다. 데이터 샤딩을 통해 데이터를 여러 노드에 분산시키고, 각 노드에서 병렬 처리를 수행함으로써, 높은 트랜잭션 처리 성능과 응답 속도를 달성할 수 있습니다.
  • 이점: 이는 웹 애플리케이션, 전자 상거래 사이트, 실시간 게임 서버 등 실시간 데이터 처리가 중요한 시스템에서 특히 유용합니다.

실시간 데이터 분석

  • 적용 방식: Citus는 복잡한 집계 쿼리와 분석 작업을 실시간으로 처리할 수 있는 능력을 제공합니다. 이는 분산 쿼리 실행 엔진을 통해 가능하며, 대용량 데이터셋에 대한 신속한 분석을 지원합니다.
  • 이점: 마케팅 분석, 금융 거래 분석, IoT 데이터 분석 등 다양한 분야에서 실시간 데이터 분석 요구를 충족시킬 수 있습니다. 사용자는 최신 데이터에 기반한 인사이트를 빠르게 얻을 수 있으며, 데이터 기반 의사 결정을 신속하게 내릴 수 있습니다.

멀티테넌트 SaaS 애플리케이션

  • 적용 방식: 멀티테넌트 아키텍처를 지원함으로써, Citus는 SaaS(Software As a Service) 애플리케이션 개발에 이상적인 환경을 제공합니다. 각 테넌트의 데이터를 별도의 샤드에 저장하고, 데이터 격리와 보안을 유지하면서도 하나의 데이터베이스 인스턴스를 여러 테넌트가 공유할 수 있습니다.
  • 이점: 이는 리소스 활용도를 극대화하고, 운영 비용을 절감할 수 있게 합니다. CRM, ERP, 프로젝트 관리 도구와 같은 다양한 SaaS 애플리케이션에서 Citus의 멀티테넌트 아키텍처를 활용할 수 있습니다.
더보기

*SaaS (Software as a service)

- 소프트웨어를 서비스 형태로 제공하는 것

- 사용자가 소프트웨어를 로컬에 설치하거나 유지 관리할 필요 없이 웹을 통해 인터넷에 연결된 기기에서 사용할 수 있도록 함

- 사용자는 구독 형태로 서비스를 이용하며, 소프트웨어 제공자는 서버에 소프트웨어를 호스팅 하고 관리

- 일반적으로 웹 브라우저를 통해 엑세스되며, 사용자는 필요한 만큼의 기능을 사용하고 구독 요금을 지불

- 이메일 서비스, 워드 프로세서, 프로젝트 관리 도구 등

확장성과 유연성

  • 적용 방식: Citus는 데이터의 수평적 확장을 지원합니다. 사용자는 시스템의 성능 요구사항이 증가함에 따라 추가 노드를 쉽게 추가할 수 있으며, Citus는 자동으로 데이터를 재분배합니다.
  • 이점: 이러한 확장성은 특히 데이터 양이 지속적으로 증가하는 애플리케이션에서 중요합니다. 사용자는 물리적인 서버 제한 없이 애플리케이션을 확장할 수 있으며, 높은 성능과 데이터 처리량을 유지할 수 있습니다.

고가용성

  • 적용 방식: Citus는 분산 쿼리 플래너와 실행 엔진을 통해 복잡한 쿼리를 자동으로 최적화합니다. 데이터의 위치와 쿼리의 특성을 고려하여, 쿼리 실행 계획을 세우고, 필요한 경우 쿼리를 다시 작성하여 성능을 향상시킵니다.
  • 이점: 이는 개발자와 데이터 분석가가 복잡한 쿼리 최적화에 많은 시간을 소비하지 않고도, 빠른 쿼리 실행 속도를 달성할 수 있게 해 줍니다. 데이터 과학, 비즈니스 인텔리전스, 대규모 보고서 작성 등의 작업에서 효율성을 극대화할 수 있습니다.

사용의 용이성

  • 적용 방식: Citus는 PostgreSQL과 호환되므로, 기존의 PostgreSQL 애플리케이션과 쉽게 통합할 수 있습니다. 또한, PostgreSQL의 강력한 기능과 풍부한 에코시스템을 그대로 활용할 수 있으며, SQL을 통한 직관적인 데이터 조작이 가능합니다.
  • 이점: 이는 개발자가 새로운 기술을 배우는 데 소요되는 시간과 비용을 절약할 수 있게 해 주며, 기존 시스템을 쉽게 확장하거나 마이그레이션 할 수 있게 해 줍니다. 스타트업부터 대기업까지 다양한 규모의 조직에서 빠르게 도입할 수 있습니다.

 

장점

  • PostgreSQL과의 호환성: Citus는 PostgreSQL 위에 구축되어 있어, PostgreSQL의 기능을 그대로 사용할 수 있으며, 대부분의 PostgreSQL 도구와 호환됩니다.
  • 수평 확장성: 데이터와 쿼리를 여러 머신에 분산시킴으로써 높은 확장성을 제공합니다. 이를 통해 데이터 증가에 따른 성능 저하 문제를 해결할 수 있습니다.
  • 실시간 분석: 대량의 데이터에 대한 실시간 분석과 집계가 가능합니다.
  • 유연성: 다양한 유형의 애플리케이션에 적용할 수 있는 유연성을 제공합니다. 멀티테넌트 SaaS 애플리케이션, 실시간 분석, IoT 애플리케이션 등 다양한 분야에서 사용될 수 있습니다.

단점

  • 복잡성: 기존의 단일 인스턴스 PostgreSQL에 비해 설정과 관리가 복잡할 수 있습니다. 엔터프라이즈 버전의 경우 라이선스 비용도 고려해야 합니다.
  • 비용: 여러 머신에 데이터를 분산시키므로, 하드웨어 및 운영 비용이 증가할 수 있습니다. 엔터프라이즈 버전의 경우 라이선스 비용도 고려해야 합니다.
  • 학습 곡선: Citus의 효율적인 사용을 위해서는 분산 데이터베이스의 원리와 PostgreSQL에 대한 깊은 이해가 필요합니다.

면접 예상 질문 및 답변

  • Citus를 사용하여 대용량 데이터 조회 API를 개발한 이유는 무엇인가요?
    • Citus를 선택한 주된 이유는 PostgreSQL의 확장성과 성능을 활용할 수 있기 때문입니다. Citus는 PostgreSQL의 분산 데이터베이스 확장으로, 대규모 트랜잭션 처리와 실시간 데이터 분석을 가능하게 합니다. 데이터 샤딩과 병렬 쿼리 처리 기능을 통해 대용량 데이터를 효과적으로 처리할 수 있었습니다. 이는 API 응답 시간을 단축하고, 사용자 경험을 개선하는데 크게 기여했습니다.
  • 대용량 데이터를 처리할 때 성능 최적화를 위해 어떤 전략을 사용했나요?
    • 성능 최적화를 위해 몇 가지 중요한 전략을 사용했습니다. 첫째, 적절한 샤딩 키를 선택하여 데이터를 균등하게 분산시켰습니다. 이는 데이터가 특정 노드에 집중되는 것을 방지하고, 쿼리의 병렬 처리를 최적화했습니다. 둘째로, 자주 사용되는 질의에 대해 인덱스를 생성하여 조회 성능을 향상시켰습니다. 셋째, 데이터 집계와 분석을 위한 롤업 테이블을 사용하여 복잡한 쿼리의 실행 시간을 단축했습니다.
  • 대용량 데이터 조회 API에서 발생한 문제를 어떻게 해결했나요?
    • 한 가지 문제는 특정 쿼리에서 예상보다 높은 지연 시간이 발생한 것이었습니다. 데이터가 특정 노드에 과도하게 집중되어 있어 병렬 처리가 제대로 이루어지지 않는 것으로 확인되었습니다. 이를 해결하기 위해, 샤딩 키를 재검토하고, 더 균등한 데이터 분산을 위해 샤딩 전략을 조정했습니다. 또한 쿼리 성능을 개선하기 위해 쿼리 플랜을 최적화하고, 필요한 인덱스를 추가했습니다.
  • 커스텀 테이블 생성 API를 개발하면서 고려한 데이터 모델링 요소는 무엇인가요?
    • 커스텀 테이블 생성 API를 개발하면서, 데이터 모델링 시 여러 요소를 고려했습니다. 중요한 것은 테이블의 확장성, 데이터의 접근 패턴, 그리고 쿼리 성능이었습니다. 사용자가 정의할 수 있는 커스텀 테이블의 구조를 유연하게 설계하여 다양한 데이터 타입과 복잡한 관계를 지원했습니다. 
  • 데이터 보안을 어떻게 확보했나요?
    • SQL 인젝션과 같은 공격으로부터 보호하기 위해, 입력 데이터에 대한 검증과 적절한 쿼리 파라미터 바인딩을 사용했습니다. 
  • 프로젝트를 진행하면서 가장 어려웠던 점과 그것을 어떻게 극복했나요?
    • 프로젝트에서 가장 어려웠던 점은 복잡한 조인 쿼리에 대한 커스텀 테이블 생성 속도 저하가 문제였습니다. 이를 극복하기 위해 샤딩 키 설정, 쿼리 최적화, 인덱스 재구성 등 여러 방법을 시도했습니다. 하지만 여전히 문제가 발생하여 테이블 생성에 대한 부분을 Livy와 Spark SQL 쿼리를 사용하여 데이터베이스 부하가 없는 곳에서 테이블 생성을 진행했습니다. 이러한 최적화 작업을 통해 시스템의 전반적인 성능을 향상시킬 수 있었습니다.
  • Citus의 주요 특징은 무엇인가요?
    • Citus는 PostgreSQL의 분산 데이터베이스 확장으로 수평 분할과 병렬 처리를 통해 대용량 데이터를 효과적으로 처리할 수 있는 기능을 제공합니다.
  • Citus의 아키텍처는 어떻게 구성되어 있나요?
    • Citus는 코디네이터 노드와 워커 노드로 구성됩니다. 코디네이터는 쿼리를 받아 분석하고, 워커 노드에 분산하여 병렬 처리를 수행합니다.
  • Citus에서 샤딩은 무엇이고 어떻게 작동하나요?
    • Citus는 데이터를 여러 물리적인 노드에 분산시켜 샤딩을 구현합니다. 테이블은 특정 열을 기준으로 여러 파티션으로 나누어집니다.
  • Citus에서 데이터 병렬 처리는 어떻게 이루어지나요?
    • 쿼리가 코디네이터에 도착하면, 코디네이터는 쿼리를 분석하고 작업을 여러 워커 노드에 분산하여 병렬처리를 수행합니다.
  • Citus에서 데이터 노드 간의 통신 방법은 무엇인가요?
    • Citus는 PostgreSQL 내부에서 데이터를 전송하는 기본 통신 메커니즘을 활용하며, 고성능의 내부 통신 프로토콜을 사용하여 워커 노드 간에 데이터를 교환합니다.
  • Citus의 확장성과 성능에 영향을 미치는 주요 요인은 무엇인가요?
    • 데이터의 분산 정도, 클러스터 구성, 쿼리 복잡성 등이 Citus의 확장성과 성능에 영향을 미치는 주요 요인입니다.
  • Citus에서 고려해야 할 보안 및 데이터 무결성 관련 사항은 무엇인가요?
    • Citus는 PostgreSQL의 보안 및 데이터 무결성 기능을 상속받아 사용하며, SSL/TLS를 통한 암호화, 엑세스 제어 및 인증을 통해 데이터 보안을 강화합니다.
  • Citus를 사용할 때 주의해야 할 성능 최적화 방법은 무엇인가요?
    • 테이블 샤딩 및 파티셔닝 전략 선택, 인덱싱 최적화, 병렬 처리 튜닝 등이 Citus를 사용할 때 성능을 최적화하기 위한 중요한 고려 사항입니다.

 

오늘은 Citus에 대해서 알아보았습니다.

NoSQL관련해서 MongoDB도 함께 보시면 좋습니다!

2024.04.02 - [IT] - [NoSQL] MongoDB란? (개념, 특징, 장단점, 면접대비)

 

 

반응형