[시행착오] 대화형 AI와 백엔드가 소통하는 경우 WebSocket, SSE 중 무엇을 사용해야할까?

박상민·2024년 9월 5일
0

Project, 시행착오

목록 보기
2/6
post-thumbnail

서론

SSL(스스Law)라는 "법률 상담, 서류 생성/첨삭 서비스" 프로젝트를 진행하고 있다.
이번 글에서는 스스Law 프로젝트를 초기 설계하면서 했던 고민 중 하나에 대해서 작성하려고 한다.


고민 사항

프로젝트의 기능 중 '법률 지식을 학습한 AI와 법률 상담을 하는 기능'이 있다.
실시간 통신 기능을 구현해본 적 없었기에 실시간 통신에 사용되는 WebSocket, SSE 중 어떤 것을 사용해야할지 고민이 됐다.

!초기 설계시 노션에 정리했던 글!
회원과 GPT가 대화를 한다고 생각해서 양방향 통신이라고 생각했지만, 이 경우 회원의 대화 상대는 항상 GPT로 고정된다.
그러므로 양방향 통신을 할 이유가 없다고 생각해서 찾아봤더니 이미 GPT API에서 SSE로 단방향 실시간 처리를 만들어뒀다.
SSE를 공부해서 테이블 구조 변경 예정

  • Server-Sent Events(SSE)

    💡 생각이 짧았다.
    SSE는 위에서 설명한 것처럼 일방적으로 서버에서 클라이언트로 데이터를 전송하는 것이다. 즉, 클라이언트에서 서버로는 데이터를 전송하지 못한다.
    챗봇은 클라이언트 질문을 날리고 답변을 받고 질문을 받고 ~ 하는 과정이 반복되기 때문에 클라이언트에서 서버로 데이터를 전달할 수 있어야한다.
    즉, SSE가 아닌 WebSocket로 구현해야한다.

최종적으로 선택한 것은 WebSocket이고, 현재도 WebSocket과 Message Broker로 Redis를 사용해서 법률 상담 서비스를 개발했다.

처음 글을 작성했던 5월에서 4개월이 지난 지금의 생각은 아래와 같다.
현재의 생각

  • 현재 SSL에서 WebSocket을 사용해서 법률 상담 서비스를 개발했고, 또 다른 프로젝트 '게임을 접목한 대학교 커뮤티니 프로젝트'에서 채팅, 알림 기능을 구현하기 위해서 WebSocket, SSE를 모두 사용했다.
    결론적으로 대화형 AI의 구현에서는 WebSocket을 사용하는 것이 맞다.
  • SSE(Server-Sent Events)의 경우에는 단방향 통신을 지원한다. 서버가 클라이언트에게 일방적으로 데이터를 보낼 수 있지만, 클라이언트는 서버에게 데이터를 보낼 수 없다.
    • 바로 이 부분이 부분이 문제이다. 클라이언트는 서버에게 사용자가 보낸 '질문'을 보내야 하고, 서버는 이를 받아서 외부 AI 서버에 전송해서 질문에 대한 학습된 AI의 답변을 받아서 클라이언트에게 전송해야 한다. 즉, 클라이언트는 서버에게 데이터를 보낼 수 없는 SSE는 요구 사항을 만족하지 않는다.
    • 이는 단방향으로 서버가 클라이언트에게 데이터를 보내는 기능(ex. 알림)에 사용하는 것이 맞다.
  • 클라이언트와 서버와의 양방향 통신이 필요하기 때문에 WebSocket을 사용하는 것이 요구 사항을 만족하는 방법이다.

Chat-GPT 4o의 답변

Q) 대화형 AI와 백엔드가 소통하는 경우 WebSocket, SSE 중 뭐가 맞을까?

A)
대화형 AI와 백엔드가 실시간으로 소통할 때, WebSocket과 Server-Sent Events (SSE)는 각각 다른 상황에서 유용할 수 있습니다. 이 둘은 실시간 통신을 가능하게 하지만, 각각의 장단점과 쓰임새가 다릅니다.
WebSocket

  • 양방향 통신이 가능한 프로토콜입니다. 클라이언트와 서버가 서로 메시지를 주고받을 수 있습니다.
    AI 대화형 시스템에서 자주 사용됩니다. 예를 들어, 사용자가 질문을 하면, 서버가 바로 응답을 줄 수 있고, 추가적으로 클라이언트로부터 더 많은 데이터를 실시간으로 받을 수 있습니다.
    장점: 빠른 응답성, 양방향 소통이 가능해서 더 복잡한 상호작용에 적합.
    사용 예시: AI 채팅 애플리케이션, 온라인 게임, 실시간 협업 도구.

Server-Sent Events (SSE)

  • 단방향 통신을 지원합니다. 서버가 클라이언트에게 일방적으로 데이터를 보낼 수 있지만, 클라이언트는 서버에게 데이터를 보낼 수 없습니다.
    서버가 클라이언트에게 실시간으로 이벤트나 데이터를 푸시해야 할 때 유용합니다.
    장점: 구현이 WebSocket보다 더 간단하고, HTTP 기반이라 방화벽 문제 등이 적습니다.
    사용 예시: 실시간 뉴스 피드, 주식 가격 업데이트, 알림 시스템.

대화형 AI와의 소통에 적합한 선택:
대화형 AI는 주로 양방향 소통이 필요하므로, WebSocket이 더 적합한 경우가 많습니다. 사용자의 입력에 즉각적으로 응답하고, 추가적인 입력을 처리하거나 서버가 클라이언트에게 실시간으로 데이터를 보낼 수 있기 때문이죠. 반면, 단순한 알림이나 결과를 클라이언트에 푸시하는 경우에는 SSE도 사용될 수 있습니다.

2개의 댓글

comment-user-thumbnail
2025년 3월 7일

안녕하세요! 글 잘 읽었습니다 .
저도 챗봇 프로젝트 개발을 위한 기술 조사중인데, 읽다가 궁금한 부분이 생겨서 댓글 남깁니다.

SSE는 단방향 통신이라 챗봇 서비스에는 적합하지 않다고 작성해주셨는데요, 클라이언트에서 서버로 데이터를 보낼 때는 REST API를 사용하고, 서버에서 보내는 스트리밍 응답만 SSE로 처리하는 방식도 가능할 것 같아요. 혹시 WebSocket을 선택하신 다른 이유가 있나요??

1개의 답글