본 포스트에서는 Spring Framework를 사용하여 웹 소켓 채팅 서버를 구축하는 방법을 알아보겠습니다.
1. Spring 프로젝트 설정
먼저, Spring 프로젝트를 설정해야 합니다. 다음과 같은 의존성을 가지는 Maven 프로젝트를 생성합니다.
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter WebSocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
</dependencies>
2. WebSocketConfiguration 클래스 생성
WebSocketConfiguration 클래스를 생성하여 웹 소켓 설정을 정의합니다. 이 클래스는 @Configuration
어노테이션을 추가하여 Spring의 설정 클래스임을 명시합니다.
@Configuration
@EnableWebSocket
public class WebSocketConfiguration implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(chatWebSocketHandler(), "/chat").setAllowedOrigins("*");
}
@Bean
public WebSocketHandler chatWebSocketHandler() {
return new ChatWebSocketHandler();
}
}
위의 예제에서는 /chat
엔드포인트에 웹 소켓 핸들러를 등록하고, 모든 오리진에 대해 허용하도록 설정합니다. ChatWebSocketHandler
클래스는 실제로 웹 소켓 요청을 처리하는 핸들러입니다.
3. WebSocketHandler 구현
WebSocketHandler를 구현하기 위해 TextWebSocketHandler
클래스를 상속받는 ChatWebSocketHandler
클래스를 생성합니다.
public class ChatWebSocketHandler extends TextWebSocketHandler {
private final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
for (WebSocketSession sess : sessions) {
sess.sendMessage(message);
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions.remove(session);
}
}
위의 예제에서는 연결이 성립된 후에 웹 소켓 세션을 저장하고, 수신한 메시지를 접속한 모든 클라이언트에게 다시 전송합니다. 연결이 종료되면 세션은 제거됩니다.
4. Spring Boot 실행
이제 Spring Boot를 실행하여 웹 소켓 채팅 서버를 구동할 수 있습니다. Spring Boot 애플리케이션의 메인 클래스를 생성하고, @SpringBootApplication
어노테이션을 추가합니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5. 웹 소켓 테스트
웹 소켓 채팅 서버가 정상적으로 구동되었는지 확인하기 위해 클라이언트 측에서 테스트를 수행해볼 수 있습니다.
let socket = new WebSocket("ws://localhost:8080/chat");
socket.onopen = function(event) {
console.log("WebSocket 연결 성공");
};
socket.onmessage = function(event) {
console.log("받은 메시지: " + event.data);
};
socket.onclose = function(event) {
console.log("WebSocket 연결 종료");
};
// 메시지 전송
socket.send("Hello, WebSocket!");
위의 예제에서는 ws://localhost:8080/chat
에 접속하여 웹 소켓 통신을 수행합니다. 연결이 성공하면 “WebSocket 연결 성공”이 출력되고, 받은 메시지는 “받은 메시지: [메시지 내용]” 형식으로 출력됩니다. 연결이 종료되면 “WebSocket 연결 종료”가 출력됩니다.
이제 해당 클라이언트 코드를 실행하여 웹 소켓 채팅 서버가 잘 동작하는지 확인할 수 있습니다.
이상으로 Spring Framework를 사용하여 웹 소켓 채팅 서버를 구축하는 방법을 알아보았습니다. 자세한 내용은 공식 문서를 참고하시기 바랍니다.