인프런 커뮤니티 질문&답변
RedisMessageBroker.kt setLocalMessageHandler 관련 문의
해결된 질문
작성
·
22
0
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)도 함께 고려하셔야 할 수 있습니다.
더 자세한 도움이 필요하시면 언제든지 질문해 주세요!





