Spring WebSocket과 Kafka, SockJS, StompJS를 활용하여 양방향 통신 프로그램을 만들어보았습니다.
프로젝트 기획의도
- 채팅프로그램에서 채팅 메세지들을 카프카 브로커 1대에 주키퍼가 관리하도록 하여 데이터를 분산시켜 처리하여 서버과부하를 막고, 서버안정성을 높이기 위한 방안 중 하나인 Kafka에 대해 알아보고자 만들어보았습니다.
- AWS 프리티어 할당문제로 카프카 브로커는 1대만 올렸습니다.
- Spring WebSocket, Kafka, SockJS, StompJS를 함께 사용해봅니다.
개발목표
- AWS EC2 에 AML 환경을 통해 Kafka와 Zookeeper를 배포시킵니다.
- Spring Kafka를 Java Configuration으로 연동합니다.
- Spring Kafka와 WebSocket을 연동합니다.
개발과정
- Kafka란 무엇인가?에 대하여 알아보고자 Kafka 레퍼런스를 참조했습니다.
- Kafka를 Spring FrameWork with Java Configuration 환경에서 실행해보고자 Spring-Kafka QuickTour 레퍼런스를 참조하여 구현해보았습니다.
- WebSocket with STOMP, SOCKJS 같은경우 이전에 구현경험이 있어 구현했습니다.
- AWS의 인바운드, 아웃바운드 설정을 통해 서버에 접속할 수 있습니다.
- AWS에서 Kafka 실행시 접속포트, 접속IP 설정(config)파일, Zookeeper 실행시 접속포트, 접속IP 설정(config)을 통해 서버에 접속할 수 있습니다.
WebSocket & Kafka 구성도
- WebSocket With Stomp와 Kafka가 함께 사용될때의 구성도입니다.
카프카 구성도
- 카프카 구성도입니다. AWS 프리티어로 1대로 구현했습니다.
프론트엔드 기술스택은 다음과 같습니다.
- HTML/CSS, JAVASCRIPT
백엔드 기술스택은 다음과 같습니다.
- java 1.8
- Spring Framework 5.0.7
- Spring WebSocket (TCP Connection)
- SockJS (WebSocket Emulation)
- STOMPJS (Message Broker)
- Kafka 1.0 (Message Broker)
인프라 구조는 다음과 같습니다.
- Spring Framework with Github Actions
- AWS EC2 AML, Kafka, ZooKeeper
[step 0].WebSocket 양방향 통신 확인을 위한 브라우저 크롬 1개, Internet Explorer 1개를 킵니다.
[step 1].메세지를 보내고자 하는자가 “Message Check! I am sending it!”라고 발송합니다.
[step 2].두개에 같은 메세지가 뜨는지 확인합니다.
[step 3]. Kafka에 값이 올바르게 들어갔는지 확인합니다.



