Blog

Kafka를 활용한 실시간 데이터 처리: 시스템 구조 및 개선 방향 고찰

tag
프로젝트 고찰
날짜
2023/10/28
생성 일시
2023/10/29 11:19
작성자

기존 프로젝트에 카프카 적용 할려던 구조

기존에 생각했던 프로젝트의 구조는 크게 세 부분으로 구성되어 있습니다. 사용자의 요청은 클라이언트 서버를 통해 이루어지고, 이후 카프카 서버를 통해 데이터가 전송되어 백엔드 서버에서 처리됩니다. 처리된 결과는 다시 카프카를 통해 클라이언트 서버로 전송되어 최종적으로 사용자에게 뷰를 반환합니다.

문제 인식 및 고찰

현재의 데이터 처리 과정에서 뷰를 반환하는 방식에 대해 고민이 필요하다고 생각합니다. 특히, 카프카 컨슈머에서 바로 뷰를 반환하는 것이 적절한지에 대한 의문이 있습니다. 카프카는 주로 데이터를 처리하는 역할을 하므로, 뷰를 반환하는 것은 다소 부적절하다는 생각이 듭니다.
더욱이 @KafkaListener 어노테이션을 사용하는 메소드는 비동기로 메시지를 처리하며, 웹 요청을 처리하는 컨트롤러 메소드와는 다르게 작동합니다. 따라서 이 두 로직을 분리할 필요가 있습니다.

개선 방안

데이터를 웹 페이지에 표시하기 위해 고려해볼 수 있는 방법은 다음과 같습니다.
1.
데이터베이스 저장 처리 결과를 데이터베이스에 저장하고, 컨트롤러에서 해당 데이터를 조회하여 사용하는 방법입니다. 하지만 이 방식은 실시간 대규모 트래픽 처리를 필요하는 저희 프로젝트에 적합하지 않습니다.
2.
WebSocket을 이용 프론트 서버와 벡엔드 서버 간에 실시간 연결을 연결하는 방법입니다. 실시간으로 연결을 유지해야 하기에 특정 기간 동안만 대규모 트래픽을 처리하는 저희 프로젝트에는 적합하지 않는 걸로 보입니다.
3.
비동기적 처리 컨슈머에서 요청에 대한 결과가 온다면 비동기적으로 해당 컨트롤러에서 받아서 사용하는 방식입니다. 비동기적으로 사용자에게 신속한 응답을 줄 수 있다는 점과 DB에 따로 저장할 필요가 없다는 점에서 매리트가 있다고 보여집니다. 현재로선 이 방법이 적합해 보입니다.

구조 변경 결과