Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • kibana
  • enum
  • 다이나믹 프로그래밍
  • spring
  • Wil
  • kotlin
  • webflux
  • Android
  • 백준
  • til
  • Docker
  • 문자열
  • rsocket
  • ec2
  • 파이썬
  • grafana
  • 에라토스테네스의 체
  • 레포지토리
  • 우아한테크코스
  • 안드로이드
  • elasticsearch
  • 프리코스
  • 내림차순
  • java
  • SQL
  • MariaDB
  • 코딩테스트
  • 프로그래머스
  • 코틀린
  • 코틀린 인 액션

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

[TIL - 20230428] WebSocket + Stomp 적용기1
TIL

[TIL - 20230428] WebSocket + Stomp 적용기1

2023. 4. 29. 00:48

 

💻문제점

웹소켓+Stomp 사용한 채팅 서버를 구현하고 PostMan으로 테스트 하려고 했는데 영 쉽지 않았다.

Post로 웹 소켓을 연결하고, PostMan의 WebSocket Request를 사용하여 테스트하려고 했다.

 

웹 소켓 연결을 위해 다음과 같이 요청 uri를 작성해서 보냈지만 오류가 발생...


📃시도

시도1. raw에서 socket.io로 변경하여 요청

시도2. uri 변경

ws://localhost:4000/ws-edit/chat/enter

 

시도3. 연결을 POST로 시도, uri 변경

여기서 이제 연결은 http post 요청으로 하는 것임을 알게되었다...!

웹소켓 연결 자체를 웹 소켓으로 하려고 했으니...ㅎㅎ

 

연결했으니 채팅방을 입장하고자 했다.

여러 uri로 테스트 했으나 매번 403 또는 404 에러가 발생...

ws://localhost:4000/ws-edit/pub/chat/enter

ws://localhost:4000/ws-edit

localhost:4000/ws-edit/pub/chat/enter

 

등.......

 

여러가지를 찾아보던 중에 스프링 시큐리티와 JWT를 사용을 위해서는 다른 것을 추가해야 했다.

클라이언트가 WebSocket을 연결하기 전에 헤더에 담긴 토큰을 검증해야 해서, 다음을 추가했다.

@Slf4j
@RequiredArgsConstructor
@Component
public class StompHandler implements ChannelInterceptor {
    private final JwtUtil jwtUtil;

    @Override
    public Message<?> preSend(Message<?> message, MessageChannel channel) {
        log.info("preSend");
        StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
        if (StompCommand.CONNECT == accessor.getCommand()) {
            jwtUtil.validateToken(accessor.getFirstNativeHeader("ACCESS_HEADER"));
        }
        return message;
    }
}

 

WebSockConfig에는 다음을 추가

@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
    registration.interceptors(stompHandler);
}

 

역시나 채팅방 입장할 때 에러가 발생했다...

코드 자체에 문제가 있었을지도 모르고, 스프링시큐리티+JWT가 있는 기반에서 코드를 작성하니 어떤 문제로 인한 것인지 알기 어려웠다. 그래서 다시 깃허브를 pull 해와서 다른 블로그를 참고하여 진행했지만... 웹 소켓 연결 자체에서 부터 연결이 발생하는 등 문제가 많았다... 내일도 이 문제를 해결할 예정이다.

728x90

'TIL' 카테고리의 다른 글

[TIL - 20230430] WebSocket+Stomp 사용자들이 있는 채팅방 찾기  (0) 2023.04.30
[TIL - 20230429] WebSocket + Stomp 적용기2  (0) 2023.04.29
[TIL - 20230428] failed to lazily initialize a collection of role  (0) 2023.04.28
[TIL - 20230427] message properties 사용한 @Valid 메시지 처리  (0) 2023.04.27
[TIL - 20230426] Enum 타입 필드 검증을 위한 커스텀 애노테이션 생성  (0) 2023.04.26
    'TIL' 카테고리의 다른 글
    • [TIL - 20230430] WebSocket+Stomp 사용자들이 있는 채팅방 찾기
    • [TIL - 20230429] WebSocket + Stomp 적용기2
    • [TIL - 20230428] failed to lazily initialize a collection of role
    • [TIL - 20230427] message properties 사용한 @Valid 메시지 처리
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바