Kafka 활용한 채팅 어플리케이션 만들기 - (계획)

600g (Kim Dong Geun)·2021년 7월 22일
1

코드에 대한 복습은 역시 토이 프로젝트 만들어보면서, 익히는게 가장 와닿을 것 같다.

토이 프로젝트로 만들어보면 어떨까 생각

이번 프로젝트의 목표는 다음과 같다.

토이 프로젝트 목표

카프카에 익숙해지기

구현 목표

  1. 분산처리를 할 수 있는 카프카 채팅 어플리케이션 만들기
  2. 소켓은 특정 유저에게만 붙어서, 다른 유저가 데이터를 가로챌 수 없도록 하기 (그러니까 하나의 소켓을 연결하고 프론트에서 데이터 분배하는 야매짓 X)
  3. Local, DEV 환경 분리
  4. 실제로 부하 테스트 해볼 것
    4-2. 가능하다면 ES, 버로우, 그라파나 활용해서 대시보드로 실제로 부하가 얼마나 걸리는지에 대한 대쉬보드까지 만들어보면 행복할듯👨‍💻
  5. 테스트 코드 작성

실제로 서비스를 내 볼 생각은 없기 때문에 Auth, Service Discovery, Load Balancing 등은 생각하지 않는다.

서버에 대한 오류처리는 하지만, 프론트에 대한 오류처리는 염두에 두지 않는다. ex) 소켓 끊김시 재연결 정책 등등

기능

1. 방생성을 하면 실시간으로 사용자에게 방이 생성됨을 알릴 것
2. 방참가를 하면 기존 방에 참여해있던 모든 상대방에게 알릴 것
3. 특정 채팅방에 채팅을 치면 그 방에 존재하는 사용자에게 채팅 내용이 보내질 것
4. 현재 방에 참가한 유저 목록을 띄워줄 것
5. 방을 떠나거나 소켓 연결이 끊기면 참가한 유저 목록에서 해당유저를 삭제할 것

이정도면 될 것 같다.

계획

  1. Docker와 Docker compose 이용해서 kafka 환경 구성
  2. 스프링을 이용한 프로듀서 프로젝트 구현
  3. 스프링을 이용한 컨슈머 프로젝트 구현

카프카 설정

  • 데이터가 사용자에게 언제 도착하는지 등은 중요하지 않기로 여겨서 동적으로 파티션 변경 가능하도록 염두에 두기
  • 일단은 카프카 브로커 3개, 파티션 6개로 구성
  • 커스텀 파티셔너 X, 기본 파티셔너 사용

구조

오 필기좀 제대로 할걸.. 나도 못알아보겠네..

  1. 프로듀서에서 HTTP 요청을 보낸다.
  2. 카프카 큐에 쌓는다.
  3. 소켓으로 사용자에게 실시간으로 알린다.

일단 여기서 얻는 장점은 소켓으로 처리하는 부분은 대부분 consumer에서 처리하기 때문에 (어 잘못그렸네...) 유지보수하기가 간편하다.
아무래도 소켓을 구현하다보면 코드 관리라던지 테스트하기가 까다로운 부분이 존재하는데 이부분을 Consumer Producer에 몰아 넣을 수 있어서 행복캐욤..

  1. 프론트에서 편하게 작업하려면 API GATEWAY 둬야하나, 혹은 Nginx reverse proxy로만 간단하게 구성하던가 해야겠다.

개발기간

내 시간과 내 흥미가 닿는대로...

참고서적

profile
수동적인 과신과 행운이 아닌, 능동적인 노력과 치열함

0개의 댓글