WebSocket - 채팅앱 설정

장숭혁·2024년 1월 11일

Language : Java
Spring Boot : 3.1.5
Project : Gradle - Groovy
Packaging : Jar
Java : 17

Dependencies

  • Spring Data MongoDB
  • Spring Web
  • Spring Data MongoDB
  • Lombok

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: {}
  • application.yml
spring:
  data:
    mongodb:
      username: sung
      password: sung
      host: localhost
      port: 27017
      database: chat_app
      authentication-database: admin
server:
  port: 8088


WebSocketConfig 설정

@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 형식의 메시지로 변환할 수 있도록 설정하고 있다.

profile
코딩 기록

0개의 댓글