
본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 기반으로 작성되었습니다.
실습 위주의 이해를 목표로 하기 때문에 다소 과장이 많고 생략된 부분이 많을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 대해 유의하시기 바랍니다.
또한, 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 에 대해서는 별도로 참고자료를 찾아보시기를 권장드립니다.
감사합니다 해당 포스트 시리즈를 쭉 따라가며 부족한 부분들을 배워보도록 하겠습니다