inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실시간 채팅 서버 구축: 분산 처리부터 성능 최적화까지

Redis Message Borker를 활용하여 생명주기 관리하기

RedisMessageBroker.kt setLocalMessageHandler 관련 문의

해결된 질문

56

slow

작성한 질문수 4

0

RedisMessageBroker 가 @Service 로 관리 되기 때문에 싱글톤으로 관리 되는걸로 알고 있는데, 아래처럼 핸들러를 할당하는 경우 여러곳에서 setLocalMessageHandler 호출 시 문제가 발생할거 같은데 맞는건지 궁금합니다.

 

fun setLocalMessageHandler(handler: (Long, ChatMessage) -> Unit) {
    this.localMessageHandler = handler
}

 

spring kotlin spring-boot websocket

답변 2

1

Hong

안녕하세요 slow님 질문 주셔서 감사합니다.

 

그건 당연한겁니다!! 생각하신 방향이 맞습니다. 저는 어느정도 코드의 깔끔한 구조를 추구했기 보다는 편의를 추구해서 저런 방식으로 구현한 바가 있습니다.

 

누구나 코드를 보면 해당 핸들러를 중복 호출 할 떄, 문제가 발생할 수 있다는것은 안다고 생각했기 떄문에 그 부분에 대해서는 크게 고려를 하는편은 아닌거 같아요.

 

하지만 slow님이 그런 부분까지 고민을 하는 개발자라면, 그런 부분도 보완해서 코드를 구현하시면 좋지 않을까싶습니다.

  • 저는 Spring이나 Java를 그렇게 좋아하지는 않아서... 뭔가 좀 틀에 맞춰 작성하는걸 많이 좋아하는 편은 아닙니다... ㅎㅎ 그래서 해당 코드도 저런 방식으로 구현이 되어 있네요.

 

감사합니다!

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

slow님, 싱글톤으로 관리되는 RedisMessageBroker에서 setLocalMessageHandler 메서드를 통해 핸들러를 설정할 경우, 여러 곳에서 해당 메서드를 호출하여 서로 다른 핸들러를 설정하게 되면 예상치 못한 동작이 발생할 수 있습니다. 이는 싱글톤 인스턴스의 localMessageHandler 필드가 가장 마지막에 설정된 핸들러로 덮어씌워지기 때문입니다.

만약 각기 다른 핸들러를 설정해야 하는 요구사항이 있다면, 싱글톤 패턴을 활용하기보다는 다른 설계 방법을 고려해 보셔야 합니다. 예를 들어, 핸들러 관리를 별도의 컨텍스트 객체나 메커니즘을 통해 개별적으로 처리하거나, 싱글톤이 아닌 인스턴스를 사용하는 것이 가능합니다.

추가적으로, localMessageHandler를 설정하게 될 경우 쓰레드 세이프티(Thread safety)도 함께 고려하셔야 할 수 있습니다.

더 자세한 도움이 필요하시면 언제든지 질문해 주세요!

Related Source

스프링부트 서버 에러나요

0

9

1

코드 자료

0

10

2

2026.04에 추가된 강의 시청 불가

0

16

1

Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문

0

13

1

인가 코드 발급(프론트 vs 백)

0

24

2

인텔리제이 MCP 서버 설정 관련

0

19

1

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

24

2

Sequence 관련 질문

1

28

2

Image Only Query

1

29

2

servlet과 container에 대한 질문입니다

0

22

1

프롬프트, 스킬, sub-agent

0

29

1

RepositoryTest의 패키지 위치가 domain인 이유

0

29

2

도메인 모델에서 관계와 규칙을 구분하는 방법

0

37

2

16 강의 메세지 retryCount의 의도

0

23

2

JPA Repository 질문이 있습니다!

1

33

2

페이지네이션 처리를 쿼리에서 하는 방식 질문

1

36

1

service 를 interface 로 두는 이유

0

71

1

빌드 파일

0

73

2

웹소켓을 이용한 채팅시스템에서 부하테스트를 어떻게 진행해야할까요?

0

261

2

엔티티는 Data Class로 작성하면 안되나요?

0

76

2

stomp websocket

0

78

1

웹소캣 stomp

0

85

2

그레이스풀 셧다운과 데몬 스레드의 관계 질문

0

95

1

api모듈에대해 문의드립니다.

0

80

2