inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 websocket handler presend 질문 있습니다.

166

정충효

작성한 질문수 8

0

public Message<?> preSend(Message<?> message, MessageChannel channel) {
		log.info("presend 실행은 되는지");
	    StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
	    log.info("테스트{}",accessor.getCommand());
//	    // 메시지의 구독 명령이 CONNECT인 경우에만 실행
	    if (StompCommand.CONNECT.equals(accessor.getCommand())) {
	      StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(message);
	      log.info("구독 명령이 떨어졌어{}",headerAccessor.getNativeHeader("test"));
	    }

	    return message;
	  }

위 코드처럼 실행했을 시 accessor.getCommand()가 connect거나 disconnect면

log.info("presend 실행은 되는지");
	    StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
	    log.info("테스트{}",accessor.getCommand());

이것이 2번 씩 출력되는데 원래 이런건지 아니면 제가 코딩을 잘못했는지 질문있습니다.

spring websocket

답변 1

0

인프런 AI 인턴

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

Spring에서 WebSocket을 사용할 때 preSend 메소드가 예상치 못하게 두 번 호출되는 경우가 있을 수 있습니다. 이는 Spring의 내부 동작 방식에 따라 결정되는 부분이기도 하고, 코드나 구성에 따라 발생할 수도 있습니다. preSend 메소드는 메시지가 실제로 전송되기 전에 호출되며, 메시지를 수정하거나 다른 작업을 수행할 수 있는 후크 포인트를 제공합니다.

이중으로 로그가 출력된다면, 일단 두 가지 가능성을 살펴볼 수 있습니다.

  1. 클라이언트 쪽에서 CONNECT 및 DISCONNECT 프레임이 의도치 않게 두 번 전송되고 있을 수 있습니다. 이 경우에는 네트워크 트래픽을 캡쳐하거나 클라이언트 측 로직을 검토하여 확인할 수 있습니다.

  2. 서버 측에서 어떠한 이유로 같은 메시지에 대해 preSend를 두 번 호출하는 것일 수도 있습니다. 이 경우에는 서버의 코드 또는 구성을 재검토하여 문제가 되는 부분을 찾아야 합니다.

preSend가 두 번 호출되는 것이 의도된 행동인지 혹은 버그인지를 확인하려면 디버깅을 통해 추가적인 정보를 수집하고 분석해야 할 것입니다. preSend에서 같은 메시지에 대해 두 번의 호출이 일어나는 상황을 디버그해서 어떤 경로로 메소드가 실행되는지, 그리고 그 원인이 무엇인지를 확인해 보세요. Spring Framework의 rich WebSocket support 문서를 참고하면 preSend와 관련된 더 자세한 정보를 확인할 수 있습니다.

추가적으로, ‘spring-boot-starter-websocket’ 모듈의 자동 구성과 관련된 자세한 내용은 Spring Boot Reference Documentation의 WebSockets 절에서 찾아볼 수 있습니다. 이 문서에서는 Spring Boot가 제공하는 WebSocket 관련 자동 구성 및 설정에 대한 정보를 제공하고 있으니 이를 참고하시면 좋을 것 같습니다.

만약 문제가 지속된다면 더 자세한 로그 정보, 사용된 구성, 클라이언트 및 서버 측 코드의 나머지 부분 등을 함께 제공해주시면 문제 해결에 더 도움이 될 것입니다.

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

0

5

1

servlet과 container에 대한 질문입니다

0

20

1

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

0

17

1

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

0

34

2

16 강의 메세지 retryCount의 의도

0

19

2

UserService, CertificationService 책임 분리 기준 질문

0

23

1

spring initialiser 어떤걸 선택해야될지 모르겠어요

0

31

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

47

2

Json 요청 처리

1

28

2

로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.

0

25

2

Build 관련 문제 (테스트 관련 문제)

0

36

1

job, step execution 관련 질문 드립니다.

0

27

2

이미지 업로드와 db 트랜잭션 묶는법

0

40

1

sdk 설정 오류

0

46

2

Orchestration SAGA 패턴 보상에 대한 질문입니다.

0

49

2

[건의][6장][작전1] deprecated 메소드

1

44

2

[예제][3장][작전2] windows 에서 마지막 예제

0

37

1

NaverBookRepository.class 의 위치에 따른 모듈간의 의존성에 대해 질문드립니다.

1

29

2

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

45

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

27

1

패키지 vs 모듈 선택 기준

0

49

2

오탈자 - @Transactional

0

53

1

타입스크립트

0

43

1

인덱스 관련 질문 있습니다.

0

64

2