[spring] Webclient(1) - 개요: 스트리밍 데이터 처리
회사에서 LLM관련 프로젝트를 진행하면서 스프링부트로 구축한 Was 서버에서 AI 관련 서버로 부터 받은 응답값을 스트리밍으로 클라이언트에 값을 던져줘서 한글자씩 데이터가 출력되도록 보이는 비동기 통신 기능을 개발해야할 일이 생겼었다.
이를 개발하기 위해 가장먼저 떠오른 방법은 Web Socket 이었다. 실시간 채팅 기능 개발을 할 때 사용해 본 적이 있어서 먼저 떠오르긴 했지만 이 방식은 서버의 리소스 소모가 굉장히 심하다란 단점을 가지고 있다.
일단 서버 로그부터 서버와 커넥션 연결관련 로그를 계속 출력하게 되기 때문에 디버깅 관점에서도 물론이고 로그의 용량문제부터 리소스를 아낌없이 쓰게된다.
또한 웹소켓은 버전 관리에서도 어려움을 겪는다. 웹소켓 버전이 바뀌면 수많은 버그와 맞서야한다. (이건 팀장님한테 들은 단점이다.)
이러한 단점을 보완하기 위해 pub/sub 방식을 쓰기도 하지만 이또한 응답값을 보내기에는 너무 무거웠다.
소켓이 아닌 다른 방식을 찾다보니 최신 JDK에서는 이러한 기능을 제공해 주지 않을까란 생각을 하게 되었고 그래서 찾은 것이 WebClient이다.
(우습게도 WebClient는 이전 프로젝트에서 API 통신을 위해 사용한 적이 있었지만 이러한 기능이 있는 지는 몰랐다.)
Webclient는 자바에서 비동기 방식으로 데이터 처리를 할 수 있도록 만들어졌고 아울러 단방향의 스트리밍 데이터 처리도 가능하다란 것도 알게 되었다.
덕분에 기능은 완성하였지만 쓰다보니 처음보는 개념(Mono,Flux)과 완전히 이해하지 못한 채(retrieve, filter,create,builder 등 )로 사용한 기능들이 있었고
앞으로도 자주 사용할 spring의 기능이라 생각해서 따로 정리를 하려고한다.