RedisMessageBroker.kt setLocalMessageHandler 관련 문의
RedisMessageBroker 가 @Service 로 관리 되기 때문에 싱글톤으로 관리 되는걸로 알고 있는데, 아래처럼 핸들러를 할당하는 경우 여러곳에서 setLocalMessageHandler 호출 시 문제가 발생할거 같은데 맞는건지 궁금합니다.
fun setLocalMessageHandler(handler: (Long, ChatMessage) -> Unit) {
this.localMessageHandler = handler
}
回答 2
1
안녕하세요 slow님 질문 주셔서 감사합니다.
그건 당연한겁니다!! 생각하신 방향이 맞습니다. 저는 어느정도 코드의 깔끔한 구조를 추구했기 보다는 편의를 추구해서 저런 방식으로 구현한 바가 있습니다.
누구나 코드를 보면 해당 핸들러를 중복 호출 할 떄, 문제가 발생할 수 있다는것은 안다고 생각했기 떄문에 그 부분에 대해서는 크게 고려를 하는편은 아닌거 같아요.
하지만 slow님이 그런 부분까지 고민을 하는 개발자라면, 그런 부분도 보완해서 코드를 구현하시면 좋지 않을까싶습니다.
저는 Spring이나 Java를 그렇게 좋아하지는 않아서... 뭔가 좀 틀에 맞춰 작성하는걸 많이 좋아하는 편은 아닙니다... ㅎㅎ 그래서 해당 코드도 저런 방식으로 구현이 되어 있네요.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다.
slow님, 싱글톤으로 관리되는 RedisMessageBroker에서 setLocalMessageHandler 메서드를 통해 핸들러를 설정할 경우, 여러 곳에서 해당 메서드를 호출하여 서로 다른 핸들러를 설정하게 되면 예상치 못한 동작이 발생할 수 있습니다. 이는 싱글톤 인스턴스의 localMessageHandler 필드가 가장 마지막에 설정된 핸들러로 덮어씌워지기 때문입니다.
만약 각기 다른 핸들러를 설정해야 하는 요구사항이 있다면, 싱글톤 패턴을 활용하기보다는 다른 설계 방법을 고려해 보셔야 합니다. 예를 들어, 핸들러 관리를 별도의 컨텍스트 객체나 메커니즘을 통해 개별적으로 처리하거나, 싱글톤이 아닌 인스턴스를 사용하는 것이 가능합니다.
추가적으로, localMessageHandler를 설정하게 될 경우 쓰레드 세이프티(Thread safety)도 함께 고려하셔야 할 수 있습니다.
더 자세한 도움이 필요하시면 언제든지 질문해 주세요!
@RestControllerAdvice를 사용하지 않은 이유?
0
8
1
service-discovery 프로세스 가동 이유
0
13
1
AWS 배포 성능테스트
0
23
1
퀴즈가 안열려요
0
22
1
예전 로드맵과 현재 강의 순서
0
24
1
7강 보고 있는데요.. 글자가 너무 작아요
0
26
1
트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?
0
26
1
헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.
0
55
2
DLQ의 수동 커밋에 대해서 질문있습니다.
0
49
2
노션링크가 접근되지 않습니다.
0
39
1
h2 database
0
37
2
별첨자료 URL 들어가면 404 떠요..
0
35
2
실무에서 동의어 정의 관련
0
42
2
Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?
0
66
2
소스 코드 좀 올려주세요.
0
37
1
스프링 부트 버전 질문
0
86
2
service 를 interface 로 두는 이유
0
101
1
빌드 파일
0
92
2
웹소켓을 이용한 채팅시스템에서 부하테스트를 어떻게 진행해야할까요?
0
334
2
엔티티는 Data Class로 작성하면 안되나요?
0
109
2
stomp websocket
0
100
1
웹소캣 stomp
0
108
2
그레이스풀 셧다운과 데몬 스레드의 관계 질문
0
115
1
api모듈에대해 문의드립니다.
0
93
2

