본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.
또한, SpringBoot 기반의 Backend 위주의 설명을 포함하고 있으니
Frontend 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.
'SpringBoot로 WebSocket, STOMP 실시간 채팅 구현'에 들어가기에 앞서,
WebSocket
이 무엇인지, STOMP
가 무엇인지 간단하게 짚고 넘어가겠습니다.
다음은 WebSocket 위키백과에 기재된 WebSocket
의 정의입니다.
웹소켓(WebSocket)은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다.
간단히 정리하면, 다음과 같습니다.
서버-클라이언트 간에 단일 TCP 커넥션을 이용해서 양방향 통신을 제공한다.
특징으로는
WebSocket
은 HTTP 요청
기반으로 Handshake
과정을 거쳐 커넥션을 생성한다.WebSocket Handshake 요청
은 추가적인 방화벽 설정없이,80, 443
포트를 사용하여 양방향 통신
이 가능하다.HTTP 인증
, CORS
등을 동일하게 적용할 수 있다.STOMP(Simple Text Oriented Messaging Protocol)는 pub/sub(발행/구독)
을 기반으로 동작한다. 메세지 송신/수신에 대한 처리를 명확하게 정의할 수 있고, WebSocketHandler를 직접 구현할 필요 없이, @MessageMapping 어노테이션을 사용해, 메세지 발행 시 엔드포인트를 별도로 관리할 수 있다.
즉,
pub/sub(발행/구독)
을 기반으로@MessageMapping
을 통해,
메세지를 더 효율적으로 처리할 수 있는 프로토콜
Spring
에서의 WebSocket STOMP
를 간단하게 정리하면 위와 같습니다.
본격적으로 실습에 들어가기에 앞서 전체 구조에 대해 알아보겠습니다.
기본적으로 MVC 패턴
을 따라갈 것이며, 채팅로그 기록을 위해 MySQL
을 사용합니다.
MVC 패턴에 대해 모른다면 본 Velog의 'MVC 패턴 시리즈'를 확인하시기 바랍니다.
MDN(Mozila Developer Network) Web Docs의 정의에 따르면 다음과 같습니다.
MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공합니다. MVC 에 기반을 둔 몇 가지 다른 디자인 패턴으로 MVVM (모델-뷰-뷰모델), MVP (모델-뷰-프리젠터), MVW (모델-뷰-왓에버) 가 있습니다. - MDN Web Docs -
├── config
│ └── WebSocketConfig.java
├── domain
│ ├── ChatRoom.java
│ └── ChatMessage.java
├── dto
│ ├── ChatRoomRequestDto.java
│ ├── ChatRoomResponseDto.java
│ ├── ChatMessageRequestDto.java
│ └── ChatMessageResponseDto.java
├── repository
│ ├── ChatRoomRepository.java
│ └── ChatMessageRepository.java
├── service
│ ├── ChatRoomService.java
│ └── ChatMessageService.java
├── controller
│ ├── ChatRoomRestController.java
│ ├── ChatMessageRestController.java
│ └── LiveChatController.java
본 시리즈에서는 위의 MVC 패턴 구조를 사용할 것입니다.
여러 경로로 조사해본 결과, 추후 DB를 적용한다하고 Map
이나 HashSet
등을 통해
임시로 Repository
를 생성하거나 Repository
자체를 생략하고 바로 Service
단에서
기능을 구현하는 등 임시방편으로 DB를 대체하는 방식의 설명글이 주를 이루는 경우가 많았습니다.
본 시리즈는 채팅로그 기록을 위한 DB적용 등 실무에 가깝게 MVC 패턴을 따르기 위해
Entity
, Repository
등 Database 부분을 포함한 WebSocket 기능구현에 대해 설명하고 있습니다.
RESTful API를 적용한 Controller 구현을 목표로 하고 있습니다.
생각보다 SpringBoot
기반의 WebSocket
, STOMP
를 활용한
실시간 채팅 기능에 관해 잘 정리된 글이 없는 것 같습니다.
본 시리즈는 SpringBoot
기반의 WebSocket
, STOMP
실시간 채팅기능 구현을 목표로
최근 트렌드와 함께 WebSocket
, STOMP
의 정형화된 기초개념을 정립하기 위해 작성되었습니다.
WebSocket을 찾아 헤매는 모든 이들에게 이 글을 바칩니다.
본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.
또한, SpringBoot 기반의 Backend 위주의 설명을 포함하고 있으니
Frontend 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.
감사합니다 해당 포스트 시리즈를 쭉 따라가며 부족한 부분들을 배워보도록 하겠습니다