본문으로 바로가기
본문으로 바로가기

OLAP이란 무엇입니까?

OLAP은 Online Analytical Processing의 약자입니다. 이는 기술적 관점과 비즈니스 관점, 두 가지 관점에서 볼 수 있는 포괄적인 용어입니다. 하지만 매우 높은 수준에서 보면, 이 세 단어를 거꾸로 읽어 보면 됩니다:

Processing : 어떤 소스 데이터가 처리되고...

Analytical : ...이를 통해 분석 보고서와 인사이트를 생성하고...

Online : ...이 모든 것이 실시간으로 이루어집니다.

비즈니스 관점에서의 OLAP

최근 몇 년 사이에 비즈니스 담당자들은 데이터의 가치를 인식하기 시작했습니다. 데이터를 기반으로 살펴보지 않고 감에 의존해 의사결정을 내리는 기업은 대개 경쟁에서 뒤처지게 됩니다. 성공적인 기업의 데이터 기반(data-driven) 접근 방식은 비즈니스 의사결정에 조금이라도 유용할 수 있는 모든 데이터를 수집하도록 만들며, 이를 제때 분석할 수 있는 체계가 필요하게 합니다. 여기에서 OLAP 데이터베이스 관리 시스템(DBMS)이 등장합니다.

비즈니스 관점에서 OLAP은 기업이 운영 활동을 지속적으로 계획하고, 분석하고, 보고할 수 있도록 하여 효율성을 극대화하고, 비용을 절감하며, 궁극적으로 시장 점유율을 확보하도록 합니다. 이는 사내 시스템에서 구현할 수도 있고, 웹/모바일 분석 서비스, CRM 서비스 등의 SaaS 제공업체에 아웃소싱할 수도 있습니다. OLAP은 많은 BI(비즈니스 인텔리전스) 애플리케이션의 기반이 되는 기술입니다.

ClickHouse는 도메인 특화 데이터를 분석하기 위한 이러한 SaaS 솔루션의 백엔드로 상당히 자주 사용되는 OLAP 데이터베이스 관리 시스템입니다. 그러나 일부 기업은 여전히 자사 데이터를 서드파티 제공업체와 공유하는 것에 부담을 느끼기 때문에, 사내 데이터 웨어하우스 시나리오 또한 여전히 유효한 선택지입니다.

기술적인 관점에서의 OLAP

모든 데이터베이스 관리 시스템은 두 그룹으로 분류할 수 있습니다: OLAP (Online Analytical Processing)과 OLTP (Online Transactional Processing)입니다. 전자는 대량의 과거 데이터를 기반으로 한 보고서를 생성하는 데 중점을 두며, 이 작업을 아주 자주 수행하지는 않습니다. 반면 후자는 일반적으로 현재 데이터 상태를 지속적으로 변경하는, 끊임없이 이어지는 트랜잭션 스트림을 처리합니다.

실제로는 OLAP과 OLTP가 완전히 분리된 범주라기보다는 스펙트럼에 가깝습니다. 대부분의 실제 시스템은 보통 둘 중 하나에 중점을 두지만, 반대 유형의 워크로드도 필요할 경우 이를 위한 일부 해결책이나 우회 방안을 제공합니다. 이러한 상황 때문에 여러 개의 스토리지 시스템을 통합하여 운영해야 하는 경우가 많고, 이는 결코 작은 부담이 아니며 시스템 수가 늘어날수록 유지 관리 비용도 커집니다. 그래서 최근의 트렌드는 HTAP (Hybrid Transactional/Analytical Processing)으로, 단일 데이터베이스 관리 시스템이 두 종류의 워크로드를 모두 동일하게 잘 처리하도록 하는 것입니다.

DBMS가 순수 OLAP 또는 순수 OLTP로 시작했더라도, 경쟁력을 유지하기 위해서는 HTAP 방향으로 나아갈 수밖에 없습니다. ClickHouse도 예외가 아닙니다. 처음에는 가능한 한 빠른 OLAP 시스템으로 설계되었고, 지금도 완전한 트랜잭션 지원은 제공하지 않지만, 일관된 읽기/쓰기와 데이터 갱신/삭제를 위한 뮤테이션(mutations)과 같은 기능은 추가해야 했습니다.

OLAP과 OLTP 시스템 간의 근본적인 트레이드오프는 여전히 존재합니다:

  • 분석 보고서를 효율적으로 생성하려면 컬럼을 개별적으로 읽을 수 있어야 하므로, 대부분의 OLAP 데이터베이스는 열 지향(columnar)입니다.
  • 반면 컬럼을 분리하여 저장하면, (시스템이 어떤 이벤트의 모든 세부 정보를 혹시 몰라 수집하려 할 경우 컬럼 수가 매우 커질 수 있으므로) 행 단위의 추가나 제자리 수정 같은 연산 비용이 컬럼 수에 비례하여 증가합니다. 따라서 대부분의 OLTP 시스템은 데이터를 행 단위로 구성해 저장합니다.