23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요, SK텔레콤에서 데이터 서비스를 개발하고 있는 도넛입니다.
저희 팀에서는 고객 여정 데이터를 기반으로 사내 서비스를 제작하고 있습니다.
하지만 데이터량이 정말로 어마어마하다보니, 초기 기획 후 실제 개발까지의 시간 대부분이 DB를 어느 것으로 할 것인가에 대한 시행착오가 대부분이었습니다.
[2억 건 가량 되는 데이터를 10초 내로 쿼리해야 한다.]
처음에는 익숙한 ElasticSearch로 시작했다가, 검색 성능 때문에 PostgreSQL도 써봤는데 둘 다 수억 건의 고객 행동 데이터를 실시간으로 쿼리하기에는 한계가 명확했습니다.
여러 DB를 조합해서 쓰다 보니 시스템 복잡도는 올라가고, 성능은 여전히 아쉽고...
그러던 중 ClickHouse를 도입했는데, 정말로 성능이 뛰어나서 놀랐습니다. 기존에 5분 넘게 걸리던 집계 쿼리가 수 초 단위로 끝났습니다.
몇 번의 테스트 끝에, 지금은 실제로 고객 여정 서비스의 핵심 DB로 잘 사용하고 있습니다. (물론 성능 이슈로 분석 환경에서는 샘플링한 데이터를 사용하고 있긴 합니다.)
그렇다면 ClickHouse DB는 왜 빠른걸까요?
마침 제가 데보션 내에서 참여하고 있는 'AI 서비스 개발을 위한 대규모 시스템 설계' 오픈랩에서 '데이터 중심 애플리케이션 설계' 책을 읽으며
컬럼 지향 저장소의 동작 방식과, 그래서 도대체 왜 빠른지에 대해 알아볼 수 있었습니다.
[컬럼 지향 저장소의 동작 방식, 데이터 중심 애플리케이션 설계]
컬럼별로 나뉘어 저장된 데이터는 비슷한 값들끼리 모여있어서 압축률이 정말 좋습니다.
예를 들어 product_sk 컬럼에 69, 69, 69, 31, 31 이런 식으로 같은 값이 반복되면, 비트맵 인덱스나 런렝스 인코딩으로 "69가 3번, 31이 2번 나온다." 이와 같이 압축해서 저장합니다.
그래서 쿼리할 때도 압축을 풀면서 병렬로 빠르게 처리가 가능한 거죠.
아래 예시로 한 번 확인해보겠습니다.
상황: 1억 건의 주문 데이터에서 "product_id=69인 상품의 총 매출액" 구하기
1개 컬럼 당 1GB의 데이터라고 가정
일반 DB (PostgreSQL - 행 지향)
디스크 저장: 날짜, 상품ID, 매장, 프로모션, 고객, 수량, 가격, 할인가격 한 줄씩
문제점: 상품ID와 가격만 필요한데도 모든 컬럼을 다 읽어야 함
결과: 8개 컬럼 전체 = 8GB 데이터 읽기
ClickHouse (컬럼 지향)
상품ID 파일: [69, 69, 69, 31, 31, 69, ...]
가격 파일: [13.99, 14.99, 2.49, 0.99, ...]
장점: 필요한 2개 컬럼만 읽음 + 압축으로 인해 추가적인 최적화
결과: 2GB만 읽고, 컬럼 지향 DB의 압축 덕분에 실제로 읽는 데이터는 200MB 정도
이게 바로 컬럼 지향 DB의 위력입니다!
하지만 여기서 함정이 하나 있습니다.
ClickHouse는 CRUD 중에서 R(Read)에만 최적화되어 있다는 점입니다.
C(Create) - 삽입: 배치 삽입에는 좋지만, 실시간으로 한 건씩 INSERT하는 건 비효율적입니다. 컬럼마다 따로 저장하다 보니까요.
U(Update) & D(Delete): 여기가 가장 큰 한계입니다. 컬럼 지향 구조상 특정 행을 수정하거나 삭제하려면 여러 컬럼 파일을 다 건드려야 해서 엄청 시간이 오래 걸립니다.
그래서 보통 업데이트 대신 새로운 데이터를 삽입하고 나중에 병합하는 방식을 씁니다.
복잡한 JOIN: 여러 테이블 조인도 행 지향 DB보다 느려요. 애초에 OLAP(분석) 용도로 만들어진 DB이기 때문입니다.
그래서 실시간 업데이트가 많은 서비스나 복잡한 트랜잭션 처리가 필요한 OLTP에는 부적합합니다.
저희같은 경우에는 데이터가 일일 배치로 들어와서 괜찮았지만, 추후 실시간 데이터가 들어오게 된다면 일부 데이터는 PostgreSQL를 함께 사용하는 방안을 고민해보려고 합니다.
현재 AI 서비스는 대량의 피처 데이터를 실시간으로 처리해야 합니다.
머신러닝 모델 학습을 위한 특성 추출, 실시간 추론을 위한 피처 스토어, 모델 성능 모니터링까지 모든 과정에서 컬럼 지향 저장소의 장점이 극대화됩니다.
AI 학습 데이터 생성: 수십억 건의 로그에서 특정 피처만 선택적으로 빠르게 추출
실시간 피처 스토어: 최신 사용자 행동 데이터를 즉시 집계해 AI 모델 입력으로 제공
모델 성능 분석: A/B 테스트 결과와 모델 예측 성능을 실시간 대시보드로 모니터링
MyScaleDB같은 벡터 데이터베이스도 ClickHouse 기반으로 개발되어, SQL과 벡터 검색을 동시에 지원하는 AI 특화 솔루션으로 활용되고 있습니다.
네이버는 ClickHouse를 글로벌 통합 지표 시스템의 핵심으로 사용하고 있습니다.
수십억 건의 사용자 행동 로그를 실시간으로 집계하고, 다양한 서비스별 KPI를 빠르게 산출하는 데 활용합니다.
저희 팀에서 ClickHouse를 도입하는 데 있어서 네이버 사례를 많이 참고했습니다.
카카오는 여러 데이터 분석 도구를 비교 검토한 결과, ClickHouse가 빠른 쿼리 속도와 노드 증설의 용이함 측면에서 가장 뛰어나다고 평가했습니다.
대규모 사용자 행태 분석, 광고 성과 측정, 서비스 최적화 등에 핵심적으로 활용하고 있습니다.
관련 링크는 아래에 공유드릴게요!
네이버 사례 : 네이버
카카오 사례 : 카카오
ClickHouse는 Apache 2.0 라이선스 기반의 오픈소스로, 상업적 목적을 포함해 누구나 자유롭게 사용할 수 있습니다.
혹시라도 방대한 데이터로 인해 쿼리가 어렵거나, AI 서비스 개발 중 난항을 겪고 계시다면, 한 번 ClickHouse DB를 사용해보시는 게 어떨까요?
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.