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)도 함께 고려하셔야 할 수 있습니다.
더 자세한 도움이 필요하시면 언제든지 질문해 주세요!
실무 내용 문의드려요
0
20
2
코드 질문
0
25
1
To-Do App
0
27
1
twitterdb 연결이 안돼요
1
26
2
Kafka Cluster 구성도 질문
0
21
1
SingletonService가 JVM이 뜰 때 생성되는게 맞나요?
0
29
1
시큐리티 필터 설정 질문입니다!
2
43
1
강의가 싱크가 안맞는것 같아요..
0
28
1
임포트 오류
0
33
2
답을언제쯤받아볼수있나요
0
49
2
형 책 어떻게 받아?
1
59
1
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
33
2
mvc 패턴 - 적용 강의에서 회원가입할 때 redirect가 아닌 forward인 이유가 궁금합니다.
0
29
1
프로젝트가 없어요..
0
56
2
JpaCursorItemReader의 정렬 조건 부재의 영향
1
46
2
소스코드 빈 파일 문의드려요
0
42
2
service 를 interface 로 두는 이유
0
91
1
빌드 파일
0
85
2
웹소켓을 이용한 채팅시스템에서 부하테스트를 어떻게 진행해야할까요?
0
300
2
엔티티는 Data Class로 작성하면 안되나요?
0
102
2
stomp websocket
0
88
1
웹소캣 stomp
0
99
2
그레이스풀 셧다운과 데몬 스레드의 관계 질문
0
107
1
api모듈에대해 문의드립니다.
0
88
2





