본문 바로가기

Spring

[Spring Boot] 소켓 통신을 위한 Websocket 서버 구성


스프링 부트를 사용한 예제 애플리케이션을 AWS를 통해 모노리식에서 MSA로 MSA에서 다시 컨테이너 오케스트레이션으로 개선해나가는 과정을 모두 담은 강의를 출시하게 되었습니다.
강의 과정에서 15개 이상의 서비스를 사용하게 됩니다.
그래서 클라우드 개발자가 아닌 개발자, 학생 분들도 AWS의 폭넓은 지식을 쉽고 빠르게 습득할 수 있는 기회가 될 수 있다고 생각합니다!
배너를 누르면 강의로 이동됩니다.

블로그를 통해 구매하시는 분들에게만 10%할인 쿠폰을 증정중입니다.
꼭 아래 쿠폰번호를 입력해 주세요!

16861-259843d6c2d7




 
 

spring boot websocket 종속성 추가

 

implementation("org.springframework.boot:spring-boot-starter-websocket")

위가 같이 종속성을 추가하면 사용중인 spring boot의 버전과 호환되는 버전으로 설정된다.
 

websocket 환경설정

 

@Configuration
@EnableWebSocketMessageBroker
class WebsocketConfig(
    private val env: Environment
) : WebSocketMessageBrokerConfigurer {

    override fun configureMessageBroker(config: MessageBrokerRegistry) {
        config.enableSimpleBroker("/topic") //sub
        config.setApplicationDestinationPrefixes("/topic") //pub
    }

    /**
     * /websocket/~ 이후 주소로 엔트포인트 매핑
     * */
    override fun registerStompEndpoints(registry: StompEndpointRegistry) {
        registry.addEndpoint("/websocket/test").setAllowedOrigins("*")
    }
}

 

  • enableSimpleBroker() - "/topic" 접두사가 붙은 url을 구독하는 대상들에 한하여 브로커가 메세지를 전달한다.
  • setApplicationDestinationPrefixes() - "/topic" 접두사가 붙은 url로 발행한 메세지만 핸들러로 라우팅
  • addEndpoint() - websocket에 접근하기위한 Endpoint -> localhost:8000/websocket/test/topic 으로 발행 또는 구독시에만 메세지 발행, 구독이 가능하다.

 

websocket 메세지 발행 및 구독

@RestController
class ChattingController() {


    @MessageMapping("/chatting/pub/{chattingRoomId}")
    @SendTo("/topic/chatting/sub/{chattingRoomId}")
    fun sendNewMessage(
        @DestinationVariable chattingRoomId: String,
        @Payload message: String
    ): String {
		// 발행 전 동작 정의

        return message
    }
}

 

  • @MessageMapping() - 위의 prefix, endpoint 설정을 포함한 입력한 url로 발행된 메세지 구독
  • @SendTo() - 해당 메서드의 return값을 url을 구독하는 클라이언트에게 메세지 발행
  • @DestinationVariable - 구독 및 발행 url 의 pathparameter
  • @Payload - 수신된 메세지의 데이터