실시간 채팅을 구현하기 위해 웹소켓과 STOMP를 이용하여 구현하였다.
1. 웹소켓의 통신 과정
웹소켓의 연결
(1) 클라이언트 요청: 클라이언트가 웹소켓 연결을 시작하기 위해 서버에 HTTP 요청을 보낸다.
(2) 서버 응답: 서버는 클라이언트의 HTTP 요청(웹소켓 업그레이드 요청)을 수신하고, 이를 확인한 후 웹소켓 연결을 수락한다. 서버는 HTTP 응답을 보내며, 이는 웹소켓 업그레이드를 승인하는 내용을 포함하게 된다.
(3) 프로토콜 업그레이드 완료: 이러한 과정을 거치면 HTTP에서 웹소켓 프로토콜로 업그레이드가 완료되며, 지속적인 연결을 통해 양방향 통신이 활성화된다.
데이터 전송
클라이언트와 서버는 텍스트 또는 바이너리 메시지를 주고받게되는데, 이 과정에서 각 메시지는 웹소켓 프레임으로 캡슐화되어 전송된다.
연결 종료
클라이언트 또는 서버가 연결 종료 요청시 통신이 종료되고, 웹소켓 연결이 닫힌다.
2. 웹소켓 의존성 추가
build.gradle파일에 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-websocket'
3. WebSocket연결
WebSocketChatHandler 파일 생성
@Component
public class WebSocketChatHandler extends TextWebSocketHandler {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
String input = message.getPayload();
TextMessage textMessage = new TextMessage("웹소켓 테스트. 연결완료~");
session.sendMessage(textMessage);
}
}
WebSocket 메시지를 처리하는 핸들러.
클라이언트로부터 텍스트 메시지를 수신하면, 응답 메시지를 클라이언트에게 전송한다.
WebSocketConfig 파일 생성
@Configuration
@EnableWebSocket
@RequiredArgsConstructor
public class WebSocketConfig implements WebSocketConfigurer {
private final WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*");
}
}
WebSocket 설정.
WebSocketConfigurer를 구현하여 /ws/chat 엔드포인트에 webSocketHandler를 등록하고, setAllowedorigins("*")을 통해 모든 도메인에서의 접근을 허용한다.
연결테스트
chrome 확장 프로그램인 Simple Web Socket Client를 이용해서 웹소켓 연결을 테스트 해볼 수 있다.
'SpringBoot' 카테고리의 다른 글
[Springboot] #2 spring security와 jwt로 인증구현하기 (0) | 2024.06.11 |
---|---|
[Springboot] #1 spring security와 jwt로 인증구현하기 - spring security 사용하기 (0) | 2024.05.13 |
[Springboot] swagger 사용하기- 의존성 추가 및 jwt 인증 추가하기 (0) | 2024.05.13 |
[Springboot] api 컨트롤러에서 json형식의 데이터와 MultipartFile 동시에 받기 (0) | 2024.05.13 |