정리에 앞서..
대규모 트래픽 관련 강의주차에 접어들면서 트래픽 증가 시에 반드시 알아야 할 Kafka의 개념과 활용, 그리고 실습 간 깨달았던 점들을 정리하고자 한다.
🔍 왜 Kafka를 사용해야 하는가?
일반적으로 서버의 요청 및 처리과정은 아래와 같다.
사용자 요청 -> 서버 -> DB/Redis 저장 / 조회
그러나 트래픽이 급격하게 증가하게 되는 경우 다음과 같은 문제가 발생하게 된다.
- 서버는 모든 요청을 즉시 처리 해야한다.
- 요청이 증가하면 서버는 쉬지 않고 요청을 즉시 처리해야하며, 그 범위를 넘어서는 경우 장애가 발생할 수 있음.
- DB / Redis 는 동시에 많은 요청을 처리할 수 없다.
- DB / Redis 의 처리 가능량을 초과하면 병목현상이 발생하게 됨.
- 사용자의 행동 데이터는 매우 빠르게 쌓인다.
- 페이지 조회 / 상품 클릭 / 장바구니 추가 등 데이터를 서버가 즉시 처리하는 방식은 부담이 커지게 됨.
Kafka는 위와 같은 문제를 해결하기 위해 요청을 잠시 쌓아두는 큰 통(버퍼) 역할을 수행하게 된다.
내용을 정리하면 크게 3가지로 볼 수 있는데
1. 버퍼(Buffer) 역할 → API 서버가 죽지 않음
- 실제 처리는 Consumer가 진행하게 되며, API 서버가 무거운 일을 하지 않기 때문에 증가한 트래픽을 버텨낼 수 있음.
2. 비동기 처리 → 안정적으로 처리 가능
- 데이터 유실이 발생하지 않고, 처리된 메시지는 즉시 삭제되는 것이 아닌 설정된 보관 기간에 따라 삭제됨.
3. 파티션 기반 병렬 처리 → 처리량이 폭발적으로 증가
- Kafka는 파티션이라는 병렬 처리 다누이를 제공함으로서 각 파티션을 여러 Consumer가 병렬로 처리할 수 있도록 한다.
✅ Kafka의 활용 범위는 어떻게 되는가?
실시간 인기 카테고리
- 사용자 클릭/조회 이벤트를 Kafka에 저장한다.
- Consumer 가 Kafka 이벤트를 읽어 Redis 점수를 업데이트한다.
- 인기 순위는 Redis에서 즉시 조회할 수 있다.
개인화 추천 기능
- 사용자가 어떤 카테고리를 많이 눌렀는지 Kafka에 저장한다.
- Kafka → Redis에 사용자별 점수를 반영한다.
- 추천 API에서 사용자 맞춤 카테고리를 제공한다.
☑️ Kafka란 그래서 무엇인가?
Kafka는 이벤트를 순서대로 저장해두는 큰 창고라고 볼 수 있다.
API 서버는 발생한 이벤트를 Kafka에 넣기만 하며
Kafka는 들어온 모든 메시지를 순서대로 차곡차곡 저장하고
Consumer는 저장된 메시지를 하나씩 꺼내어 처리하게 된다.
→ 이로 인해 Kafka는 이벤트를 실시간으로 처리하지 않아도 되도록 도와주는 중간 저장서 역할을 수행하게 되는 것.

✅ Kafka의 핵심 구성 요소
Producer(프로듀서) - Kafka로 메시지를 보내는 역할
API 서버가 Producer 역할을 수행한다.
- 이벤트 생성 → Topic(토픽)에 전달

Consumer(컨슈머) - Kafka에서 메시지를 읽는 역할
Consumer는 Kafka에 쌓인 이벤트를 하나씩 읽어 처리

Topic(토픽) - 메시지를 넣어두는 폴더
Topic은 Kafka에서 메시즈를 종류 별로 분리하는 단위

Partition(파티션) - 통을 나눈 칸 (병렬 처리의 핵심)
Topic을 여러 칸으로 나눈 것이 Partition
- 파티션이 필요한 이유?
- 여러 개의 메시지를 동시에 처리할 수 있도록 하기 위해
- 파티션의 핵심 특징
- 하나의 파티션은 한 시점에 오직 하나의 Consumer만 처리할 수 있음
- 파티션은 늘릴 수 있지만, 이미 존재하는 파티션을 줄일수는 없음
- 한번에 많이 생성한다기보다는 운영과 현황에 맞추어 추가 증설을 진행하는 편


Consumer Group(컨슈머 그룹) - 일하는 팀
Consumer Group은 여러 Consumer(컨슈머)를 팀으로 묶어 메시지를 효율적으로 나누어 처리
→ 컨슈머 그룹은 팀에 소속된 컨슈머가 어떤 파티션을 담당할지 지정해준다
- 파티션 수 = 컨슈머 수 가 가장 최고의 효율을 낼 수 있으며
- 컨슈머가 많으면 : 일을 하지 않고 노는 Consumer가 발생
- Consumer가 적으면 : 1개의 Consumer가 2개 이상의 Partition을 담당해서 처리해야 함




Offset - 메시지 번호 (어디까지 읽었는지 기록)
Consumer는 Offset을 보고 어디까지 읽었는지 기억한다.
그로 인해 서버가 재시작해도 이어서 읽을 수 있고, 메시지가 순서대로 안전하게 처리된다.
✅ Kafka에 대해 착각할 수 있는 점
1. Consumer를 늘린다고 하여 무조건 빨라지는 것이 아님
- 병렬 처리는 파티션 수에 의해 결정된다.
2. Kafka는 DB가 아니다.
- Kafka는 저장은 하지만 조회용은 아니다.
- 조회가 빠른 것은 Redis
- 저장/재처리/순서 보장은 Kafka
3. Kafka는 이벤트를 실시간 처리하는 것이 아니다.
- 실시간 처리를 하는 것처럼 보이지만, 실제로는 이벤트를 저장해두었다가 순서대로 처리할 수 있게 해주는 구조
'Spring > 백엔드 기초' 카테고리의 다른 글
| [개념정리] Kafka 클러스터 구조 이해하기 (0) | 2026.01.05 |
|---|---|
| [개념정리] Kafka - Broker와 Consumer Group (0) | 2026.01.05 |
| [백엔드 기초] Redis 기초 개념 정리 (0) | 2025.12.08 |
| [개념정리] WebSocket 과 STOMP (0) | 2025.12.02 |
| [백엔드 기초] 데이터베이스 기초 (0) | 2025.11.13 |