1편 : https://rhgustmfrh.tistory.com/14
2편에서는 채팅방을 여러개 만들어 채팅을 할 수 있게 구현 해 보겠습니다.
클라이언트들은 개별 웹소켓 세션을 가지게 되고
채팅방에 세션 정보를 mapping 시켜 두면 특정 방으로 메시지를 보낼 수 있습니다.
여러 채팅방을 구현하기 위한 구조는 다음과 같이 구현 하였습니다.
1. 채팅 메시지를 구현합니다.
-. 채팅방 입장
-. 채팅방 메시지 보내기
두가지 상황이 있으므로 enum type으로 선언 합니다.
2. 채팅방 구현
하나의 채팅방은 입장한 클라이언트의 정보를 가지고 있어야 하므로
WebSocketSession 정보 리스트를 멤버 필드로 갖습니다.
채팅방에는 입장하기와 대화하기 두 기능이 있습니다.
3. 채팅 서비스 구현
채팅방을 생성, 조회하고 하나의 세션에 메시지 발송을 하는 서비스를 구현합니다.
채팅방 Map은 서버에 생성된 모든 채팅방의 정보를 모아둔 구조체입니다.
빠른 구현을 위해 HashMap에 저장하는 것으로 구현하였습니다.
4. 채팅 컨트롤러 구현
채팅방 생성 및 조회는 Rest api로 구현합니다.
5. WebSocket Handler 수정
채팅 메시지를 객체로 변환
전달받은 메시지에 담긴 채팅방 id로 발송 대상 채팅방 정보를 조회
해당 채팅방에 입장해 있는 모든 클라이언트에게 타입에 따른 메시지 발송
6. 테스트를 위해 크롬에서 Talend API Tester를 설치합니다.
post 요청으로 채팅방 하나를 만들겠습니다.
채팅방을 사용하기 위해 roomId를 복사합니다.
7. 크롬에서 Web Socket Testing 이라는 확장 프로그램을 사용해 테스트합니다.
다음과 같이 요청하여 채팅방에 입장합니다.
입장하기와 대화하기 기능을 구별하여 위와 같이 메시지를 보낼 수 있습니다.
새창을 띄워 lee 라는 접속자와 대화하는 모습입니다.
다음 시간에는 해당 프로그램을 자세히 분석하여 몰랐던 부분을 개인 공부하는 시간을 갖도록 하겠습니다.
감사합니다.
출처 : https://www.daddyprogrammer.org/post/4077/spring-websocket-chatting/#google_vignette
'스프링부트' 카테고리의 다른 글
스프링 클라우드 데이터 플로우 (SCDF)를 활용한 실시간 대용량 데이터 처리 프로젝트 소개와 경험 공유 (0) | 2023.06.08 |
---|---|
Stomp를 활용한 실시간 채팅 프로그램 구현: 웹소켓 최적화 및 효율적인 메시징 전송 (4) (7) | 2023.02.24 |
스프링의 의존성 주입과 객체간의 결합도 이해: 객체 생성과 관리를 이루는 기본 개념 및 실제 적용 (0) | 2023.02.20 |
Java 자바 스프링 부트 채팅 애플리케이션 코드 해석: 핵심 개념 및 활용 방법 이해하기 (3) (0) | 2023.02.20 |
Java 스프링부트를 이용한 채팅 프로그램 구축하기: 웹소켓 활용, 설정 및 테스트 방법 (1) (0) | 2023.02.20 |
댓글