Spring, chatting 프로그램 만들기, websocket
채팅 서비스 구현하기
팀원들과 velog를 클론코딩하기로 했다. 큰 도메인은 게시물, 개인페이지였고 팀원은 백엔드 개발자 세명이여서 일 분배가 어려웠다. 따라서 나는 그 동안 구현 해보고 싶었던 채팅 서비스를 구현해서 붙여보기로 했다.
- 일반적인 http통신을 하는 서버들과 달리 채팅 서버는 socket통신을 하는 서버가 필요하다.
http통신
- client의 요청이 있을 때만 서버가 응답하고 연결을 종료하는 단방햔 통신 이다.
- 따라서 client가 server에 접속해 콘텐츠를 요청하고 결과를 받아 소비하는 구조의 서비스에서 많이 사용된다.
socket통신
- server와 client가 특정 port를 통해 지속적으로 연결유지 하여 실시간으로 양방향 통신을 하는 방식
- 주로 채팅 같은 실시간성을 요구하는 서비스에서 많이 사용된다.
Websocket
- Websocket은 기존의 단방향 HTTP프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜
- 일반 Socket통신과 달리 HTTP 80 port를 이용하므로 방화벽에 제약이 없다
- 접속까지는 HTTP 프로토콜을 이용하고 그 이후의 통신은 자체적인 Websocket 프로토콜로 통신하게 된다.
실습
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-websocket'
WebSocketChatHandler
@Slf4j
@Component
public class WebSockChatHandler extends TextWebSocketHandler {
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception{
String payload = message.getPayload();
log.info("payload {}", payload);
TextMessage textMessage = new TextMessage("Welcome chatting server !!");
session.sendMessage(textMessage);
}
}
WebSockConfig
@RequiredArgsConstructor
@Configuration
@EnableWebSocket
public class WebSockConfig implements WebSocketConfigurer {
private final WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*");
}
}