티스토리 뷰
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를 실행하지 않도록 제외 시키는 것으로 해결할 수 있다고 확인했다.
참고 블로그
'tech > Backend' 카테고리의 다른 글
kotlin, spring boot로 sse구현하기(1) - gradle 설정 (0) | 2024.06.30 |
---|---|
[Spring Boot] Automatically generate OpenAPI3 documentation with Kotlin and Spring Boot 3 (0) | 2023.03.18 |
MySQL Installation with MacOS (0) | 2023.03.12 |
- 알고리즘
- mysql_secure_installation
- 프로그래머스
- gradle
- SSR
- Prettier
- springboot
- open api3
- binary search
- svelte
- maven
- swagger
- WebSocket
- Java17
- Front
- algorithm
- spring boot3
- Kotlin
- 아키텍트
- CSR
- 이진탐색
- sw아키텍처
- routing
- swagger3
- 8.0.32
- eslint
- mysql
- sveltekit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |