본문 바로가기
BackEnd/Project

[BigData] Ch09. Kafka 활용 서비스 설계

by 개발 Blog 2024. 9. 16.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

현대의 많은 서비스들은 대용량 데이터를 실시간으로 처리하고, 분석하여 사용자에게 빠르고 정확한 정보를 제공하는 것이 핵심이다. 특히 비즈니스 요구사항에 맞추어 실시간으로 데이터를 처리하고, 이를 바탕으로 사용자 행동을 분석하는 능력은 서비스의 경쟁력을 높이는 중요한 요소이다.

 

Kafka는 이러한 요구를 충족시킬 수 있는 대표적인 분산 스트리밍 플랫폼으로, 대용량 데이터 처리, 실시간 데이터 흐름 관리, 시스템 간의 느슨한 결합을 가능하게 한다. 본 글에서는 Kafka를 기반으로 한 UseCase에 대한 서비스 요구사항 및 품질 요건을 정의하고, 이를 통해 효율적이고 안정적인 서비스 구축 방법을 살펴본다.

 

UseCase에 기반한 Kafka 서비스 요구사항 정의

Kafka를 활용한 서비스 설계에서 핵심은 각 서비스가 처리해야 할 데이터를 명확히 정의하고, 해당 데이터를 실시간으로 처리하는 방안을 수립하는 것이다. 아래에 제시된 UseCase는 실시간 데이터 수집, 처리, 그리고 재발행에 대한 구체적인 요구사항을 다루고 있으며, Kafka를 적용할 수 있는 다양한 시나리오를 보여준다.

1. 서비스 명: 프로모션 노출 로직 실시간 변경 서비스 - 실시간 프로모션 구매 포션 확인 서비스

서비스 요구사항 정의

  1. 요구사항: 프로모션 구매 실적 수집 및 Processing
  2. 요구사항 설명: 모든 구매내역 중 프로모션을 통해 구매된 제품의 구매로그를 실시간으로 수집하여 재발행
  3. 중요도: 상
    난이도: 중

세부 요구사항

  • 구매이력 중 판매된 상품의 프로모션 해당 여부: promotion click 여부를 user behavior topic에서 확인 가능
  • 구매 Transaction 발생 후 데이터 재발행 시간: 2초 이내
  • 재발행 데이터 포맷 및 Topic 정보: JSON, PromotionLogic topic
  • 구매내역에 포함되어야 할 attribute: 구매자, 구매시각, 결제방법 등
  • 실시간 구매로그의 추가 활용 여부: 연령별 프로모션 반응도 분석에 사용 가능
  • 저장공간 문제 발생 시 데이터 보관기간: 5일
  • 이력 전달 방식: API, LogFile, Kafka
  • 노출되지 않아야 할 개인정보: ID, 카드정보

→ 모든 정보들에 대한 추가, 수정 후 PromotionLogic topic으로 데이터 전송

 

2. 서비스 명: 프로모션 노출 로직 실시간 변경 서비스 - 실시간 프로모션 구매 포션 확인 서비스

서비스 요구사항 정의

  1. 요구사항: 프로모션 구매 실적 수집 및 Processing
  2. 요구사항 설명: 모든 구매내역 중 프로모션을 통해 구매된 제품의 구매로그를 실시간으로 수집하여 재발행
  3. 중요도: 상
    난이도: 중

세부 요구사항

  • 구매이력 중 판매된 상품의 프로모션 해당 여부: promotion click 여부를 user behavior topic에서 확인 가능
  • 구매 Transaction 발생 후 데이터 재발행 시간: 2초 이내
  • 재발행 데이터 포맷 및 Topic 정보: JSON, PromotionLogic topic
  • 구매내역에 포함되어야 할 attribute: 구매자, 구매시각, 결제방법 등
  • 실시간 구매로그의 추가 활용 여부: 연령별 프로모션 반응도 분석에 사용 가능
  • 저장공간 문제 발생 시 데이터 보관기간: 5일
  • 이력 전달 방식: API, LogFile, Kafka
  • 노출되지 않아야 할 개인정보: ID, 카드정보

→ 모든 정보들에 대한 추가, 수정 후 PromotionLogic topic으로 데이터 전송

 

이와 같은 요구사항 정의를 통해, Kafka 기반의 실시간 데이터 처리가 어떻게 서비스의 다양한 요구를 충족시킬 수 있는지 구체적으로 살펴볼 수 있다.

 

UseCase에 기반한 Kafka 서비스 품질요건 정의

Kafka를 기반으로 하는 서비스 설계에서 품질 요건은 서비스의 안정성과 효율성을 보장하기 위한 필수 요소이다. 이를 통해 서비스가 지속적으로 높은 성능을 유지하며, 효율적으로 운영될 수 있도록 설계되어야 한다. 아래의 항목들은 Kafka 서비스를 안정적이고 효율적으로 운영하기 위한 품질 요건을 정의한 내용이다.

 

1. 가용성 (Availability)

  • 목표 가용성: 99.95% (연간 4.38시간의 다운타임 허용)
  • 구성: 노드 3개로 구성 (노드 1개가 다운될 수 있음)
  • 복구 시간: RTO (복구 목표 시간) 5분, RPO (데이터 손실 허용 시간) 60초
  • 토픽 복제: 노드 1개가 다운되더라도 Pub/Sub에 문제가 없도록 토픽 복제 적용

2. 성능 및 용량

  • 성능 목표: 초당 200 Ops 처리
  • 데이터 처리량:
    • 초당 100개의 구매 이력 발생
    • 초당 100개의 광고 클릭 이력 발생
  • 샘플 데이터: 200바이트 크기의 샘플 데이터가 60초 동안 평균 200개 발생
  • 복제 및 보존 설정:
    • Replica: 1개
    • Retention: 5일
  • 데이터 용량 계산:
    • 200(Byte) * 2 (복제본) * 1440(분) * 5(일) * 200(개) = 약 34.5GB + 5GB의 버퍼 용량

3. 비용

  • 하드웨어 구성:
    • Kafka: 4 Core, 8GB RAM, 1GB Disk의 VM 3개
    • Zookeeper + CMAK: 2 Core, 4GB RAM의 VM 3개
    • MsgService: 2 Core, 1GB Disk의 VM 1개
  • 소프트웨어: 오픈소스 사용
  • 인력: 자체 개발 인력 사용

4. 보안

  • 내부망 사용: 내부망에서만 서비스가 사용되므로 외부 보안 위협은 없음
  • 개인정보 보호: 민감한 개인정보는 노출되지 않도록 보호 조치 필요 (예: 사용자 ID, 결제 정보 등)

5. 효율성

  • 데이터 입력 방법: API와 로그를 통해 데이터 입력이 가능하도록 가이드 제공
  • 유지보수 및 수정 작업: 데이터 입력 및 로그 처리에 대한 명확한 가이드 제공으로 작업 효율성 보장

샘플 데이터 구조 (약 200Byte)

{
  "userid": "gitzhaiek8@shutterfly.com",
  "prodGrpId": "PG0001",
  "prodId": "7d77f2d0-f96c-4d21-b28b-cba83a708b21",
  "price": 27000,
  "purchaseDate": "2022-12-25 01:43:33",
  "payment": "americanexpress"
}

 

서비스 논리 설계 for Kafka

협의 완료 내용

Kafka 서비스 아키텍처

  • Msg Service:
    • 사양: 2 Core, 2 GB RAM
    • 기능: 메시지 처리 및 중개 역할을 수행, Kafka 클러스터로 데이터 전달
  • Kafka Cluster:
    • 사양: 4 Core, 8 GB RAM, 40 GB HDD/SSD
    • 기능: 대량의 데이터 스트림을 처리하고 저장, 데이터의 실시간 분석 및 처리를 위한 중심
  • Zookeeper Ensemble:
    • 사양: 2 Core, 4 GB RAM
    • 기능: Kafka 클러스터의 메타데이터 관리 및 클러스터 상태를 유지, 분산 시스템의 코디네이션 담당

Kafka 데이터 토픽 및 처리 로직

  1. 실시간 Promotion Reaction Data (User Behavior) Topic: promo_behavior
    • 목적: 사용자 행동 데이터를 실시간으로 수집하여 프로모션의 효과 분석
    • 데이터: 사용자의 모든 행동(클릭, 페이지 뷰, 스크롤 등)을 통해 프로모션 반응을 모니터링
  2. 실시간 구매이력 Data Topic: purchase
    • 목적: 사용자의 구매 이력을 실시간으로 기록하고 저장
    • 데이터: 구매 날짜, 구매 상품, 결제 방법 등 구매와 관련된 모든 데이터 포함
  3. 광고에 관련된 행위의 영향력 파악
    • 처리 로직: 클릭 및 조회와 같은 행위가 구매 결정에 미친 영향을 promotion_affect라는 플래그를 사용하여 기록
    • 플래그 값: 0 (영향 없음), 1 (영향 있음)
    • 재발행 로직: promotion_affect가 1인 경우, 해당 데이터를 promotion 토픽으로 분류하여 재발행, 마케팅 팀에서 추가 분석 용도로 사용 가능

논리적 Data Flow

  1. Kafka 설정 및 기본 구성: Kafka 클러스터 및 관련 환경 설정을 완료하고 기본적인 Pub/Sub 기능을 검증한다.
  2. Kafka Stream을 이용한 Pipeline 구성: Kafka Stream을 활용하여 상태 유지가 필요한 트랜잭션을 처리하는 파이프라인을 구축한다. 이는 복잡한 이벤트 처리(C.E.P)가 필요한 경우에 유용하다.

Kafka가 확장되는 Case

사용자 행동 분석: 사용자가 로그인하고 첫 구매를 결정하기까지 걸리는 시간을 분석한다. 이 정보는 마케팅 전략 수립에 중요한 기초 데이터가 된다.

데이터 스트림

  1. 구매 데이터
    • 필드: userid, purchaseDate, paymentDetail, prodId, price
    • : 사용자가 언제, 어떤 상품을, 어떤 결제 수단으로 구매했는지에 대한 정보를 담고 있다.
  2. 로그인 정보
    • 필드: userid, logInTime, logOutTime
    • : 사용자의 로그인 및 로그아웃 시간을 기록하여, 사용자의 활동 시간을 파악할 수 있다.

처리 과정

  1. Join
    • 두 데이터 스트림(구매 데이터와 로그인 정보)은 userid를 기준으로 결합된다. 이를 통해 사용자가 로그인한 상태에서 어떤 구매 활동을 했는지 상세하게 분석할 수 있다.
  2. Merge
    • 결합된 데이터는 필요에 따라 다른 데이터 소스와 합쳐질 수 있다. 예를 들어, 마케팅 데이터 또는 제품 정보와 결합하여 더욱 풍부한 분석 결과를 도출할 수 있다.
  3. Masking
    • 개인정보 보호를 위해 민감한 정보(예: 결제 상세 정보)는 마스킹 처리된다. 이는 GDPR과 같은 데이터 보호 규정을 준수하기 위해 필수적인 과정이다.
  4. Detecting
    • 특정 패턴이나 비정상적인 행동을 감지하는 로직을 적용할 수 있다. 예를 들어, 비정상적으로 높은 금액의 구매나 짧은 시간에 여러 건의 구매가 이루어진 경우 알림을 생성할 수 있다.

Kafka Topology 및 Stream

Kafka Topology

Kafka Topology는 데이터가 Kafka 내에서 어떻게 흐르는지, 프로세스 및 토픽들이 어떻게 연결되어 있는지 보여주는 구조다. 이 구조는 데이터의 입력부터 처리, 최종 출력까지의 경로를 정의한다.

 

Kafka Stream

Kafka Stream은 실시간 데이터 처리를 위해 사용되는 라이브러리다. 이 라이브러리를 통해 데이터 스트림의 조인, 필터링, 변환 등의 작업을 수행할 수 있다.

 

데이터 처리의 주요 포인트

  • 민감정보 마스킹: 고객 개인정보나 결제 관련 정보는 외부에 노출되지 않도록 마스킹 처리한다.
  • 데이터 표준화: 이름, 시간, 통화 등의 필드명을 표준화하여 데이터 처리의 일관성을 유지한다.
  • 데이터 병합 및 필터링: 관련 데이터를 병합하고 필요한 정보만을 추출하여 분석의 효율성을 높인다.

이러한 설계를 통해 Kafka를 활용한 데이터 처리 및 분석의 기반을 마련하고, 실시간으로 다양한 데이터 소스에서 발생하는 이벤트를 효과적으로 처리할 수 있도록 한다.