Language : Java
Spring Boot : 3.1.5
Project : Gradle - Groovy
Packaging : Jar
Java : 17
Dependencies
docker-compose.yml 설정
services:
mongodb:
image: mongo
container_name: mongo_db
ports:
- 27017:27017
volumes:
- mongo:/data
environment:
- MONGO_INITDB_ROOT_USERNAME=sung
- MONGO_INITDB_ROOT_PASSWORD=sung
mongo-express:
image: mongo-express
container_name: mongo_express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=sung
- ME_CONFIG_MONGODB_ADMINPASSWORD=sung
- ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
mongo: {}
spring:
data:
mongodb:
username: sung
password: sung
host: localhost
port: 27017
database: chat_app
authentication-database: admin
server:
port: 8088
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/user","/topic");//일대 다? 일때 topic을 사용
registry.setApplicationDestinationPrefixes("/app");// 바로 브로커로 가지 않고 핸들러로 라우팅 되도록 함
registry.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws")
.withSockJS();
}
@Override
public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setObjectMapper(new ObjectMapper());
converter.setContentTypeResolver(resolver);
messageConverters.add(converter);
return false;
}
}
@EnableWebSocketMessageBroker
WebSocket 서버를 활성화하려면 이 애노테이션을 사용한다.
WebSocketConfig implements WebSocketMessageBrokerConfigurer
WebSocketMessageBrokerConfigurer 인터페이스를 구현하여 WebSocket 서버를 구성한다.
configureMessageBroker(MessageBrokerRegistry registry)
메시지 브로커 옵션을 설정하는 메서드
enableSimpleBroker: 클라이언트로 메시지를 전달하는 간단한 메시지 브로커를 활성화한다.
setApplicationDestinationPrefixes: 서버에서 클라이언트로부터의 메시지를 처리하는데 사용된다. 이 경로로 시작하는 메시지는 @MessageMapping이 붙은 메서드로 라우팅된다.
setUserDestinationPrefix: 사용자별로 메시지를 구분하기 위한 접두사를 설정한다.
registerStompEndpoints(StompEndpointRegistry registry)
클라이언트가 웹소켓 서버에 연결하는데 사용할 웹소켓 엔드포인트를 등록하는 메서드, 여기서는 SockJS를 사용하여 웹소켓을 지원하지 않는 브라우저에서도 대체 통신 옵션을 사용할 수 있도록 설정.
configureMessageConverters(List<MessageConverter> messageConverters)
메시지 변환을 위한 컨버터를 설정하는 메서드, 여기서는 JSON 메시지를 처리하기 위해 Jackson 라이브러리를 사용한 컨버터를 추가하였다. 클라이언트와 서버 사이에서 데이터를 전송할때 그 데이터를 변환하는데 사용되는 메시지 컨버터이다. MappingJackson2MessageConverter를 사용하여 JSON 형식의 메시지를 객체로, 객체를 JSON 형식의 메시지로 변환할 수 있도록 설정하고 있다.