Node.js 와 Socket.IO 를 활용하여 양방향 통신에 성공하였다. 하지만 해당 방식은 클라이언트가 접속하는 경우 바로 연결되는 방식이다. 그렇기 때문에 클라이언트가 해당 페이지를 벗어날 경우 대화 내용이 사라진다. 따라서 채팅방을 개설하고, 개설된 채팅방에 유저를 초대하고, 대화방을 벗어나도 대화의 기록이 저장되어 있게끔 구성하기 위하여 ScyllaDB 를 연결하기로 한다.
1. Kafka 를 사용하는 이유
Socket.IO 만으로도 실시간 양방향 통신이 가능하다. 하지만 Kafka 를 추가로 사용하는 이유는 실시간 통신 외에 데이터의 안정적인 처리, 확장성, 그리고 데이터 보존이 필요하기 때문이다. 즉, 채팅방에서 상대방의 연결이 끊기더라도 채팅 메시지가 유실되지 않고 나중에 다시 접속했을 때 볼 수 있게 Kafka가 중앙 메시지 저장소 역할을 한다.
2. Kafka Connect
Kafka Connect 는 Apache Kafka 와 다른 데이터 시스템 간 데이터를 안정적이고 확장 가능하게 스트리밍할 수 있게 돕는 도구이다. 복잡한 작업을 간소화하여 대규모 데이터를 Kafka 안팎으로 손쉽게 이동할 수 있게 해준다. 즉, 카프카를 사용하여 외부 시스템과 데이터를 주고 받기 위한 오픈소스 프레임워크이다.
위의 그림과 같이 카프카 클러스터를 먼저 구성하고 카프카 클러스터의 양쪽 옆에 배치할 수 있다.
카프카를 기준으로 들어오고 나가는 양방향 커넥트가 존재하게 되는데, 동일한 두 커넥트를 구분하기 위해 Source 방향에 있는 커넥트를 Source Connect, Sink 로 나가는 방향에 있는 커넥트를 Sink Connect 라고 한다.
2.1 용어 정리
- Connect : Kafka와 외부 데이터 시스템 간 데이터 통합을 가능하게 하는 프레임워크
- Connector : 데이터 소스(Source) 또는 싱크(Sink)와의 통합을 담당하는 구성 요소
- Source Connector : 외부 데이터 소스에서 데이터를 읽어와 Kafka 토픽으로 전송하는 Connector
- Sink Connector : Kafka 토픽에서 데이터를 읽어와 외부 데이터 시스템에 저장하는 Connector
- 단일모드 (Standalone mode) : 단일 워커(Worker) 프로세스에서 Kafka Connect를 실행하는 모드
- 분산모드 (Distributed mode) : 여러 워커(Worker) 노드가 분산 클러스터로 동작하는 모드
특정 Connect 에서 문제가 발생하더라도 나머지 Connect 로 처리가 가능
3. Kafka Connect 를 사용하여 ScyllaDB 에 데이터를 저장하는 이유
Kafka 에서 처리한 메시지를 DB 에 저장하는 목적은 다음과 같은 목적을 가진다.
- 데이터 보존 및 조회 가능
- Kafka 는 데이터를 로그 형태로 저장하지만 일반적으로 기간이 지나면 데이터를 삭제한다.
- ScyllaDB 에 데이터를 저장하면 영구적으로 보존할 수 있으며, 사용자별 또는 채팅방 별로 특정 데이터를 빠르게 조회 가능하다.
- 빠른 데이터 검색
- ScyllaDB는 Cassandra와 호환되는 고성능 분산 데이터베이스로, 대량의 데이터를 빠르게 읽고 쓰는 데 최적화되어 있다.
- 데이터 구조화
- Kafka는 데이터를 스트리밍하는 로그 기반 시스템이며, 데이터 모델링(스키마) 개념이 없다.
- ScyllaDB는 데이터베이스로서 스키마를 정의하고 데이터를 구조화하여 저장할 수 있다.
- 데이터 분석
- ScyllaDB에 저장된 데이터를 기반으로 다양한 데이터 분석이 가능하다.
- 다른 시스템과의 연동
- ScyllaDB에 저장된 데이터는 다른 시스템(예: 분석 플랫폼, 관리자 도구)과 쉽게 연동 가능하다.
- 분산 처리로 확장성 제공
- 데이터를 여러 노드에 분산 저장하여 고성능 처리를 지원한다.
즉, Kafka 는 데이터를 일시적으로 보관하며 실시간 스트리밍과 단기적인 데이터 복구에 적합하지만, 장기 데이터 저장 및 조회에는 MongoDB 나 ScyllaDB 와 같은 데이터베이스가 필요하다. Kafka Connect 는 Kafka 와 DB 간의 데이터 파이파라인을 간소화하기 위해 사용된다.
4. Socket.IO 와 Kafka 그리고 Kafka Connect 를 통한 ScyllaDB 의 데이터 흐름
'Project > ST00CK' 카테고리의 다른 글
RKE2 Rancher 설치 실패 및 GCP 무료 크레딧 만료 ... 추후 계획 (2) | 2024.12.16 |
---|---|
GCP VM에 SSH 로 접근하기 (1) | 2024.12.10 |
express + Socket.IO 사용하기 (0) | 2024.12.03 |
GCP VM 설정 및 리소스 설치하기 (0) | 2024.11.28 |
메신저 + 주식 프로젝트 시작 (1) | 2024.11.27 |