Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Upstash Kafka와 MongoDB 커넥터로 구축하는 초저지연 세그먼트 플랫폼 설계 가이드

소개

세그먼트 플랫폼은 고객, 제품 및 기타 주요 데이터를 이해하고 분류하는 데 핵심적인 역할을 합니다. 세그먼테이션(Segmentation)이란 특정 기준에 따라 하나의 큰 집단을 더 작고 동질적인 하위 그룹으로 나누는 작업을 의미합니다.

예를 들어, 이커머스 분야에서의 고객 세그먼테이션은 개인화된 마케팅 전략 수립, 타깃 프로모션 운영, 더욱 맞춤화된 쇼핑 경험 제공 등 다양한 방식으로 활용됩니다.

목차

  1. 요구 사항 이해
  2. 기본 아키텍처
  3. 아키텍처 구성 요소
  4. 설계 과제
  5. 제안 솔루션
  6. 마무리

1. 요구 사항 이해

이커머스 환경에서 고객 세그먼트를 위한 저지연 세그먼트 플랫폼을 설계하려면 실시간 처리, 사용자 경험, 그리고 끊임없이 변화하는 고객 행동 패턴과 관련된 여러 도전 과제에 직면하게 됩니다. 대표적인 과제는 다음과 같습니다.

대규모 동적 데이터셋

  • 이커머스 플랫폼은 고객 프로필, 상품 카탈로그, 거래 이력 등 방대하고 지속적으로 변화하는 데이터를 다룹니다.
  • 낮은 지연 시간을 유지하면서 이러한 대규모 데이터를 실시간으로 관리하고 처리하는 것은 큰 난제입니다.

확장성

  • 변동하는 워크로드에 대응하려면 확장성 있는 설계가 필수적입니다. 지연 시간을 희생하지 않으면서 처리 유닛을 추가하는 수평 확장이 가능하도록 하려면 신중한 아키텍처 계획이 필요합니다.

비동기 처리

  • 비동기 처리를 활용하면 컴포넌트 간 결합도를 낮추고 시스템 전반의 응답성을 높일 수 있습니다. 다만 복잡성이나 지연을 유발하지 않고 비동기 통신을 관리하려면 세심한 설계가 요구됩니다.

데이터 흐름과 파이프라인

  • 저지연 시스템에서는 효율적인 데이터 흐름과 처리 파이프라인 설계가 매우 중요합니다.
  • 컴포넌트 간 데이터 전송 시간을 최소화하고 처리 단계의 순서를 최적화하면 전체 지연 시간에 큰 영향을 줄 수 있습니다.

마이크로서비스 아키텍처

  • 마이크로서비스 아키텍처를 도입하면 확장성과 유연성이 향상됩니다. 그러나 서비스 간 통신에서 지연이 발생하지 않도록 하는 것은 쉽지 않습니다.
  • 효율적인 API 설계와 서비스 간 통신 관리가 성공의 열쇠입니다.

2. 기본 아키텍처

세그먼트 플랫폼은 크게 세 가지 하위 시스템으로 구성됩니다.

  1. 컴퓨트 서비스(오프라인 배치 연산 / 온라인 연산):
    • Spark 잡을 사용하여 원시 데이터로부터 사용자 세그먼트를 추출합니다.
    • Spark 잡은 데이터 레이크에서 데이터를 조회하고 정제·검증합니다.
    • 결과 데이터는 서빙(serving) 하위 시스템으로 전달됩니다.
  2. 수집(Ingestion) 서비스:
    • 컴퓨트 서비스에서 계산된 세그먼트를 세그먼트 서비스로 전송합니다.
    • 세그먼트 내 사용자의 포함 및 제외를 관리합니다.
  3. 세그먼트 서비스(서브 계층):
    • 사용자 서비스나 할인 서비스 등의 요구 사항에 맞춰 사용자 세그먼트를 제공합니다.
    • 할인 서비스는 사용자 ID를 기준으로 조회하여 적용 가능한 할인을 계산합니다.

세그먼트 서비스가 다루는 대표적인 데이터 형태는 다음과 같습니다.

사용자 ID세그먼트 ID생성 일시
2521Segment X2023년 12월 3일
2788Segment Y2023년 12월 3일
3943Segment Z2023년 12월 3일

3. 아키텍처 구성 요소

세그먼트 플랫폼은 다음과 같은 주요 컴포넌트로 구성됩니다.

데이터 레이크 — S3

  • S3는 데이터 레이크로 널리 채택되는 검증된 선택지입니다. 확장성과 내구성을 갖춘 오브젝트 스토리지 덕분에 다양한 유형의 대용량 데이터를 효율적으로 저장하고 관리하기에 적합합니다.
  • S3를 데이터 레이크로 활용하면 견고한 저장·조회·관리 기능을 그대로 누릴 수 있어, 데이터 중심 애플리케이션과 아키텍처에서 인기 있는 선택입니다.

트랜잭션 데이터베이스 — MongoDB

  • MongoDB의 문서 지향 모델은 트랜잭션 용도에 적합합니다. JSON과 유사한 형식으로 복잡한 데이터 구조를 저장할 수 있어, 시간이 지나면서 데이터 구조가 진화하는 애플리케이션에서 특히 유용합니다.

Upstash Kafka 클러스터

  • 웹 애플리케이션의 트래픽(클릭) 이벤트를 Upstash Kafka로 스트리밍한 뒤, 추가 처리를 위해 데이터 레이크에 저장할 수 있습니다.
  • Upstash Kafka는 최초의 서버리스 카프카 서비스입니다. 요청당 과금(pay-per-request) 모델을 적용해 수백 달러의 비용 없이 완전 관리형 Kafka 클러스터를 운영할 수 있습니다. 무료 티어에서는 신용카드 등록 없이 몇 초 만에 Kafka 클러스터를 생성할 수 있으며, 가용성, 유지보수, 스케일링, 업그레이드 등 번거로운 작업은 Upstash 팀이 대신 처리해 줍니다.

Upstash MongoDB 소스 커넥터

  • MongoDB 소스 커넥터는 Apache Kafka Connect 같은 데이터 통합·스트리밍 플랫폼에서 MongoDB 데이터베이스에 연결해 변경 사항이나 이벤트를 실시간으로 캡처하는 컴포넌트입니다.
  • Upstash MongoDB 소스 커넥터는 MongoDB에서 다른 시스템이나 플랫폼으로 데이터를 원활하게 이동시켜, 끊김 없는 데이터 통합과 분석을 가능하게 합니다.

Apache Spark

  • Apache Spark는 단일 노드 머신 또는 클러스터에서 데이터 엔지니어링, 데이터 사이언스, 머신러닝을 실행할 수 있는 멀티 언어 엔진입니다.
  • Upstash가 기본 제공하는 Upstash Kafka와 Apache Spark의 통합을 활용하면, 웹 애플리케이션의 트래픽(클릭) 이벤트를 Upstash Kafka로 스트리밍하고 이를 실시간으로 분석할 수 있습니다.
  • Apache Spark는 사용자 세그먼트 갱신을 처리하는 역할을 담당하며, 갱신된 결과는 Upstash Kafka에 기록된 후 전파되어 데이터베이스를 업데이트합니다.

4. 설계 과제

세그먼트 엔진의 채택과 사용이 늘어날수록 시스템에는 다음과 같은 과제가 발생할 수 있습니다.

  • 쓰기 QPS 병목: 더 많은 세그먼트와 더 큰 세그먼트가 생성될수록 초당 쓰기 쿼리(QPS)에서 병목이 발생하여 세그먼트 생성 대기 시간이 길어질 수 있습니다.
  • 초저지연 요구: 특정 커뮤니케이션 발송, 특히 사용자가 특정 세그먼트에 속하는지 판별하는 작업에서는 매우 낮은 지연 시간 확보가 필수적입니다.

읽기 지연 시간

  • 플랫폼이 발전함에 따라 읽기 지연 시간 50ms 미만이라는 목표를 충족하더라도, 일부 서비스와 향후 사용 사례에는 충분하지 않을 수 있다는 예측이 있습니다.
  • 예를 들어 알림 서비스는 커뮤니케이션을 발송하기 전에 사용자의 세그먼트 소속 여부를 빠르게 확인해야 합니다. 요청마다 지연이 증가하는 상황은 향후 감수하기 어려울 것입니다.

Kafka 인프라 관리

  • 트랜잭션 소스에서 분당 수백만 건의 이벤트를 처리하는 것은 Kafka 인프라 운영에 상당한 부담을 주며, 이러한 높은 처리량을 효과적으로 관리하려면 다양한 요소를 신중하게 고려해야 합니다.
  • 높은 처리량의 Kafka 인프라를 유지하려면 정기적인 성능 테스트와 최적화가 핵심입니다.

MongoDB 변경 데이터 캡처(CDC)

  • 웹 애플리케이션에서 발생하는 이벤트를 MongoDB 같은 전통적인 트랜잭션 데이터베이스에 저장한 후 데이터 레이크로 밀어 넣는 작업은 생각보다 많은 공수가 들어갑니다.
  • MongoDB가 제공하는 변경 데이터 캡처(CDC) 메커니즘을 활용하거나, 데이터베이스 변경 사항을 캡처하는 커스텀 솔루션을 구현해야 합니다.

5. 제안 솔루션

분산 캐시 Aerospike로 읽기 지연 개선

  • Aerospike에는 사용자의 세그먼트가 저장되며, 사용자 ID가 사용자 세그먼트 조회의 기본 키(primary key) 역할을 합니다.
  • 또한 세그먼트 ID에 보조 인덱스(secondary index)를 구현하면 세그먼트에 속한 사용자를 손쉽게 조회할 수 있어, 세그먼트 사용자를 별도로 저장할 필요가 없어집니다.
  • 이 설계는 지연 시간 요구 사항을 충족하도록 만들어졌으며, 필요하다면 캐시로 동작해 Redis의 역할까지 대체할 수 있습니다.
  • 반면 현재의 Aerospike를 Upstash Redis로 교체하려면 '세그먼트별 사용자'와 '사용자별 세그먼트'라는 두 종류의 데이터를 각각 관리해야 한다는 점을 고려해야 합니다.

서버리스 Upstash Kafka로 인프라 관리 부담 해소

  • Upstash Kafka를 사용하면 완전 관리형 서비스를 이용할 수 있습니다. 서버 프로비저닝, 스케일링, 유지보수 등 Kafka 클러스터 운영에 필요한 모든 기술적 작업을 Upstash가 대신 처리합니다.
  • 인프라 구축, 정상 동작 확인, 장기적인 유지보수에 대한 걱정이 사라집니다.
  • 덕분에 인프라 관리 부담 없이 애플리케이션 품질 향상에 에너지를 집중할 수 있으며, 빠르게 변화하는 개발 환경에서 특히 큰 강점이 됩니다.

Upstash Kafka의 핵심 특징은 다음과 같습니다.

  • 요금이 0까지 확장되는 가격 정책: 진정한 서버리스는 사용하지 않을 때 비용을 청구해서는 안 됩니다. 요청당 과금은 Upstash의 가장 돋보이는 기능으로, 고정 비용을 최소화하도록 처음부터 제품과 인프라가 설계되었습니다. Kafka처럼 무거운 시스템에서 이를 구현하는 것은 매우 어려운 일입니다.
  • 운영 부담 없음: 사용자는 Kafka 토픽을 생성하고 바로 사용하기 시작하면 됩니다. 고가용성, 확장성, 업그레이드, 백업 등 모든 것이 Upstash의 책임입니다.
  • 커넥션리스(Connectionless): 서버리스 함수는 상태를 유지하지 않으므로, 상태 없는(stateless) 연결로 데이터에 접근할 수 있어야 합니다. Upstash Kafka는 Kafka TCP 프로토콜을 지원하므로 모든 Kafka 클라이언트가 호환되며, AWS Lambda나 Cloudflare Workers 같은 커넥션리스 환경을 위한 내장 REST API도 제공됩니다.

Upstash MongoDB 소스 커넥터를 활용한 MongoDB CDC

  • Kafka Connect는 코드 한 줄 없이 Apache Kafka와 다른 시스템 간에 데이터를 스트리밍할 수 있는 도구입니다. Kafka 싱크(Sink) 커넥터를 통해 데이터를 다른 스토리지로 내보낼 수 있고, Kafka 소스(Source) 커넥터를 통해 다른 시스템에서 Kafka 토픽으로 데이터를 가져올 수 있습니다.
  • Kafka 커넥터는 자체 호스팅도 가능하지만, 추가 프로세스와 머신을 설정하고 유지보수해야 하는 부담이 따릅니다. Upstash는 Kafka 클러스터용 호스티드(hosted) 커넥터를 제공하므로, 별도 시스템 유지 부담이 사라질 뿐 아니라 클러스터와 가까운 위치에서 동작하기 때문에 성능 면에서도 유리합니다.

6. 마무리

이번 글에서는 Upstash가 제공하는 기술들을 활용하여 저지연 세그먼트 플랫폼을 설계하는 원칙을 살펴보았습니다. 이 인프라는 수백만 명의 사용자를 원활하게 수용하고, 데이터 레이크에 저장된 테라바이트 규모의 데이터를 처리할 수 있도록 확장성 있게 설계되었습니다.