기존 프로젝트(A) 와 신규 고도화 프로젝트(B) 는 완전히 별개의 시스템이고,
Kafka를 사용하는 비동기 파일 다운로드 프로세스 구조(토픽, 프로듀서-컨슈머 플로우) 만 동일하게 가져가는 거죠.
따라서 신규 프로젝트에서는 Kafka 리소스(토픽, 그룹, ACL 등) 자체를 별도 신규로 신청해야 합니다.
단, 메시지 포맷/로직은 동일하므로 “기존 구조와 동일, 단지 신규 시스템용으로 분리된 구성”으로 작성하면 됩니다.
---
토픽명 그대로 사용시,
기존, 고도화 프로젝트 둘 다 호출
---
토픽명, 그룹명만 변경 (서버, 브로커 그대로 사용)
비교적 쉽게 생성 가능
---
📝 Kafka 신규 신청서 (신규 고도화 프로젝트용 — 별도 시스템)
항목 내용
구분
신규 Kafka Topic 및 Consumer Group 생성
요청자
요청일자
프로젝트명
데이터 다운로드 고도화 프로젝트 (신규 시스템)
요청 사유
기존 시스템과 별도 운영되는 신규 고도화 서비스에서, 동일한 비동기 파일 다운로드 구조를 구현하기 위한 신규 Kafka 구성 요청
비고 기존 Kafka와 구조는 동일하나, 완전히 별도 토픽/그룹으로 분리 운영 예정
---
1️⃣ Topic 정보
항목 내용
Topic 명 (신규)
download.data.event.newproj
기존 Topic 명 (참고)
download.data.event
Partition 수 3
Replication Factor 2
메시지 포맷 JSON
메시지 예시 {"downloadId":12345,"userId":"abc123","status":"SUCCESS"}
전송방식 Producer → Kafka Topic → Consumer 비동기 파일 다운로드 처리
비고 기존 토픽과 동일 구조, 신규 서비스 전용 토픽으로 독립 운영
---
2️⃣ Producer 정보
항목 내용
Producer 시스템명
Data Downloader (신규)
Producer Package 경로 com.newproj.producer.kafka.DownloadProducer
전송 방식 비동기 전송 (KafkaTemplate.send())
메시지 구조 기존과 동일 DTO(DownloadEvent) 사용
비고 기존 Producer와 메시지 구조는 동일하나, 토픽명 분리 예정
---
3️⃣ Consumer 정보
항목 내용
Consumer 시스템명
Data Downloader Receiver (신규)
Consumer Group ID download-consumer-newproj
Consumer Package 경로 com.newproj.receiver.kafka.DownloadReceiver
역직렬화 방식
JsonDeserializer
메시지 매핑
com.newproj.dto.DownloadEvent
비고 기존과 동일한 수신 프로세스 구조, 단 패키지/그룹 완전 분리
---
4️⃣ Kafka 환경 설정 (신규 프로젝트)
spring:
kafka:
bootstrap-servers: broker1:9092,broker2:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
properties:
spring.json.add.type.headers: false # 타입 헤더 제거로 프로젝트 간 결합 방지
consumer:
group-id: download-consumer-newproj
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
properties:
spring.json.trusted.packages: "com.newproj.dto"
spring.json.use.type.headers: false
spring.json.value.default.type: com.newproj.dto.DownloadEvent
listener:
ack-mode: record
concurrency: 3
> 🔹 기존과 구조는 동일하지만, 토픽명/그룹명/패키지명 모두 신규로 생성되므로 브로커 격리 및 모니터링 시 완전 분리됩니다.
---
5️⃣ 요청 요약
구분 항목 내용
신규 생성 Topic
download.data.event.newproj
신규 생성 Consumer Group download-consumer-newproj
신규 생성 Producer com.newproj.producer.kafka.DownloadProducer
신규 생성 Consumer com.newproj.receiver.kafka.DownloadReceiver
공통 유지 메시지 구조
DownloadEvent (JSON)
공통 유지 비동기 구조
Producer → Kafka → Consumer 파일 다운로드 처리
---
6️⃣ 비고
기존 Kafka 리소스와 충돌 방지 위해 토픽/그룹 완전 분리
메시지 구조, 전송/수신 로직은 동일 (테스트 시 기존 메시지로 호환성 확인 가능)
브로커 및 ACL 설정은 신규 서비스용 ID 기준으로 등록 요청
---
🔍 핵심 구분
구분 진짜 Kafka 동작 오해되는 경우
Kafka 브로커 메시지를 “바이트 그대로” 저장하고, Consumer가 요청하면 그대로 전달. 패키지나 클래스 정보엔 전혀 관심 없음. ❌ 패키지를 기억하거나, Receiver를 자동 호출하지 않음
Spring Kafka Consumer 메시지를 꺼내서 역직렬화(Deserialize)할 때 Jackson 등을 이용함 ✅ 메시지 안/헤더에 이전 프로젝트의 FQCN(패키지명)이 들어있으면, 그걸 기준으로 클래스를 찾으려 함
결과 Consumer 코드에 그 클래스가 없으면 ClassNotFoundException “기존 패키지 Receiver가 호출된다”고 착각하기 쉬움
---
[Producer]
|
| 메시지 발행(send)
▼
[Kafka Broker Cluster]
├─ Topic: download.data.event (Partition 0, 1, 2 ...)
└─ Topic: user.signup.event
|
| 메시지 소비(poll)
▼
[Consumer]
'skill > Etc' 카테고리의 다른 글
| ChatGPT 등장 배경 및 LLM 이해 정리 (1) | 2026.01.20 |
|---|---|
| msa project (0) | 2025.08.07 |
| [JPA] Lazy Loading 사용 할때 성능 문제 : N+1 (0) | 2025.03.10 |
| [php] 목록 제목 검색 글자 색 다르게 표기 (0) | 2024.06.04 |
| [javascript] 목록 검색 글자 색 다르게 표기 (0) | 2024.06.03 |