Armeria로 WebSocket 서비스 만들기
Armeria 1.24.0 버전이 얼마 전에 릴리즈되었습니다. 해당 버전에서는 웹소켓 지원이 추가되었는데요. 새롭게 추가된 기능을 소개하고 웹소켓 프로토콜을 사용한 간단한 에코 서버를 만들어보면서 배운 것들을 정리해보았습니다.
PR을 보고 사용법 알아내기
아직 추가된지 얼마 되지 않은 기능이라 따로 문서가 없어 먼저 WebSocket PR을 통해 어떻게 사용하는지 알아보았습니다. Armeria의 PR은 Motivation - Modifications - Result 절로 나누어 내용을 정리하기 때문에 쉽게 이 PR이 만들어진 배경, 어떤 수정을 했는지 그리고 결과까지 쉽게 알 수 있습니다. 그 중 Modifications를 보면 다음과 같이 정리되어있습니다.
- Add
WebSocketService
andWebSocketHandler
to implement the WebSocket service using back pressure. - Add
WebSocketFrame
that represents the web socket frames. - Add
RequestLogBuilder.responseCause(cause)
to set the cause while sending a normal response. - Forked
HttpServerCodec
from netty to support WebSocket upgrade. - Forked WebSocker encoder and decoder from Netty to use it without channels.
총 5개의 항목이 있는데요. 먼저 1번의 서비스와 핸들러라는 단어를 봤을 때 WebSocketService
를 이용해 Armeria 서버에 웹소켓 서비스를 추가하고 해당 서비스로 들어오는 요청은 WebSocketHandler
로 구현할 수 있음을 알 수 있습니다. 2~5번 내용도 흥미롭지만 일단 일차적인 목적은 웹소켓을 지원하는 서버를 만드는 것이므로 더 자세한 코드 분석은 미뤄두었습니다. 다음에 다른 글로 쓰면 좋을 것 같네요.
다음으로 PR의 Result 부분에 WebSocketService
와 WebSocketHandler
를 이용해서 만든 예제 코드가 친절하게 적혀있습니다.