sgdevcamp2023 / sgwannabe

스마일게이트 개발 캠프 2023 - SG WannaBe
7 stars 1 forks source link

refactor: 스트리밍 MVC 웹소켓을 WebFlux 웹소켓으로 전환하고 카프카 이벤트 발행 코드를 추가합니다. #107

Closed kor-Chipmunk closed 8 months ago

kor-Chipmunk commented 8 months ago

요약 (Summary)

스트리밍 Tomcat & MVC 웹소켓을 Netty & WebFlux 웹소켓으로 전환합니다. 트랙 변화 이벤트를 생성하는 카프카 이벤트 발행 코드를 추가합니다.

배경 (Background)

Tomcat 대신 비동기 I/O 처리에 강한 Netty 를 채택하려고, WebFlux WebSocket 구조로 전환합니다. 트랙 변화 시 차트 서버에서 이용할 이벤트를 발행합니다.

목표 (Goals)

목표가 아닌 것 (Non-Goals)

계획 (Plan)

Web MVC 공통 모듈 대신 Reactive 공통 모듈로 전환합니다.

package com.lalala.streaming

import com.lalala.config.KafkaProducerConfig
import com.lalala.reactive.config.CommonReactiveModuleConfig
import lombok.extern.slf4j.Slf4j
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.context.annotation.Import

@Import(
    CommonReactiveModuleConfig::class,
    KafkaProducerConfig::class,
)
@Slf4j
@SpringBootApplication
class StreamingApplication

fun main(args: Array<String>) {
    runApplication<StreamingApplication>(*args)
}

WebFlux WebSocket 으로 전환합니다.

  1. WsConfig 설정에서 HandlerMapping 빈을 생성하도록 수정
  2. StreamingHandler 핸들러를 WebSocketHandler 인터페이스 구현하도록 수정

Handler 구현 시 기존 코드를 최대한 변경하지 않습니다. handleTextMessage() 메소드가 Flux<HandlerMapping> 를 반환하도록 시그니처를 수정합니다.

fun handleTextMessage(session: WebSocketSession, payload: String): Flux<WebSocketMessage> {
    ...
}

이외 고려 사항들 (Other Considerations)

No response

마일스톤 (Milestones)

3/6 ~ 3/12 : 작업