채팅 메시지를 저장할 때, db에 저장, nlp 분석, 알림 발송까지 한 트랜잭션 내에서 동기로 처리하고 있었는데, VU, TPS가 늘어나니 병목현상이 발생했습니다. 이를 해결하기 위해 kafka를 도입해 메시지 처리를 비동기 처리했습니다.
이제 api 서버는 메시지를 받으면 kafka에 publish만 하고 응답을 반환합니다. 그 이후 db저장, nlp분석, 알림 발송 같은 구체적인 task는 kafka consumer에게 위임하여 병렬로 처리하도록 구조를 바꿨습니다.
구조를 변경한 이후 동기에 들어오는 요청이 폭증해도 안정적으로 병목을 해결할 수 있게 되었습니다. 실제 부하테스트에서도 TPS가 200수준이었지만 2000이상으로 확장 가능해졌습니다.
RabbitMQ같은 다른 메시지 큐도 고려할 수 있었지만, 다른 메시지큐와는 다르게 kafka는 디스크에 로그 기반으로 저장하는 구조기 때문에 채팅처럼 트래픽이 몰리는 환경에 적합하며 메시지를 소비하면 사라지지 않고 로그가 보존됩니다. 또한, 토픽/파티션 기반 구조이기 때문에 컨슈머 그룹을 늘리면 수평확장이 가능해 추후에 더 유저수나 트래픽이 늘어나게 되더라도 안정적으로 대응할 수 있습니다.
'Interview Question' 카테고리의 다른 글
[Interview Question] 프로세스와 스레드의 차이를 설명해주세요 (0) | 2025.08.30 |
---|---|
[Interview Question] 교착상태에 대해서 설명하고, 각 교착상태를 해결하는 방법에 대해서 설명해보세요. (0) | 2025.08.29 |
[Interview Question] 선언형과 명령형 프로그래밍의 차이점은? (1) | 2025.06.10 |
[백엔드 면접 질문 준비] (7) RDB에서 페이징 쿼리의 필요성 (0) | 2025.04.15 |
[백엔드 면접 질문 준비] (6) JVM이란 무엇인가? (0) | 2025.04.05 |