티스토리 뷰

kotlin으로 WebSocket 설정을 추가한다.


학부생일 때 java websocket으로 간단한 채팅 프로그램을 만들어본 기억이 있는데

그 때는 책을 기반으로 그대로 작성한거라 기억나는건 웹소켓이 어떻게 이뤄지고, 네트워크 통신이 어떤식으로 처리되는지에 대한 이해 정도로 마무리 했던 것 같다. 이번에 사이드하면서 다시 상기해야겠다.

 

WebSocketConfig.kts

설정을 하긴 했는데 아래가 뭐하는지 잘 모르겠어서 찾아보면서 정리한다.

WebSocketMessageBrokerConfigurer, 일단 보기만해도 웹소켓 메시지에 대한 브로커 설정을 한다는 것은 알 수 있다.

근데 이게 어떤 것을 지원하고 뭘 하기 위한 것인지 좀 더 찾아본다.

import org.springframework.context.annotation.Configuration
import org.springframework.messaging.simp.config.MessageBrokerRegistry
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker
import org.springframework.web.socket.config.annotation.StompEndpointRegistry
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer

@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfig : WebSocketMessageBrokerConfigurer {

// registerStompEndpoints : Websocket 연결을 위한 엔드포인트를 지정한다.
    override fun registerStompEndpoints(registry: StompEndpointRegistry) {
        registry.addEndpoint("/chat-backend").setAllowedOrigins("*").withSockJS()
    }

// setApplicationDestinationPrefixes : 서버가 목적지 일때(Client -> Server 메시지 전송시 Endpoint)
//enableSimpleBroker : 클라이언트가 Subscribe 할떄(Server -> Client 메시지 전송 시 Endpoint)
    override fun configureMessageBroker(registry: MessageBrokerRegistry) {
        registry.setApplicationDestinationPrefixes("/app")
        registry.enableSimpleBroker("/topic")
    }
}

 

특이사항

java.lang.NoClassDefFoundError: io/r2dbc/spi/ValidationDepth

기본 설정 후 실행되는지 확인하는데 위 오류가 보여서 찾아봤더니 기본경로 말고 그 하위에 생성하라고 확인했다.

너무 오랜만에 프로젝트 세팅을 처음부터 시작해서 그런지 헷갈리는데 왜 스프링 부트 메인 앱이 src/main/kotlin이 아닌 kotlin/package에 있어야 실행되는건지 확인이 필요하다.

업무할 때도 프로젝트 설정을 코틀린으로 했었는데 그 때는 아마 spring initializr로 전부 설정 후 최초 기본설정까지는 프로젝트 생성과 동시에 했던 터라 이 문제가 당시에는 확인이 안되었던 것 같다.

 

mongoDB 연결하기

server:
  port: 8080

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/db
      username: username
      password: password

profiles:
  active: local
Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

datasource가 없어서 발생하는데 없어도 되는것 같은데 왜 이게 발생할까..🥹

싶어서 찾아보니 Application 실행 시 DataSourceAutoConfiguration class 를 실행하게 되고 이 안에 있는 DataSourceProperties class 에서 문제가 발생한다.

해당 클래스에서 기본 prefix를 spring.datasource로 설정하고 있고, 어플리케이션 실행 시 해당 설정이 없기 때문에 찾지 못한다는 오류가 확인되는 것이다.

그래서 어플리케이션이 실행될 때 datasorce를 실행하지 않도록 제외 시키는 것으로 해결할 수 있다고 확인했다. 

 

참고 블로그

최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함