inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

RedisMessageBroker.kt setLocalMessageHandler 관련 문의

해결된 질문

91

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

ArticleReadService 관련 질문

0

3

0

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

17

1

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

14

1

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

22

2

장치 의존성과 CSR

0

22

1

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

11

1

혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?

0

12

1

아무도 모르게 책 내시면 모르실 줄 알고!!

1

40

2

[영한님]Spring Boot 및 프로젝트 생성

0

36

2

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

54

1

스크립트에 대해 질문 있습니다.

1

44

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

37

1

조건 검색 질문

0

31

1

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

45

3

강의 요청 문의

0

37

2

클로드코드 명령어-대화&세션관리 수업 자료

0

37

1

service 를 interface 로 두는 이유

0

106

1

빌드 파일

0

95

2

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

0

349

2

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

0

118

2

stomp websocket

0

104

1

웹소캣 stomp

0

112

2

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

0

118

1

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

0

100

2