실시간 채팅 서비스는 WebSocket으로 요청하여 WebSocket으로 응답 받는다.
경매의 실시간 입찰 서비스는 Http로 요청하여 WebSocket으로 응답 받는다.
이 두 서비스의 요청과 응답을 어디서 확인 해볼 수 있을까 고민했다.
요청과 응답을 받아보려면 프론트 코드를 작성하여 확인하는 방법 뿐이라고 생각했다.
(실제로 튜터분들이나 현직자 분들께서도 프론트 코드를 작성해서 확인하는 방법뿐이라고...)

그래서 인터넷을 뒤져서 만들어보고 아 ~ 그래도 내가 작성한 코드가 동작은 하는구나..? 를 느꼈다.
근데 부하 테스트는...?
그렇다. WebSocket Stomp를 부하 테스트 하는 것 자체가 문제였다.
어느날 Jmeter로 가능하다는 사실을 알게 되어 테스트를 진행 할 수 있게 되었다.
밑은 미래의 나를 위한 답지입니다.. (경매 입찰 기능, http요청 + webSocket stomp 응답)
1. 우선 Jmeter를 준비한다.
2.

Options -> Plugins Manager를 누른다.

WebSocket을 검색 하면 딱 두개가 뜰텐데 저거 말고

이 친구를 골라서 Apply 시키자.
그럼 이제 Thread Group에 우클릭하고 Add - Sampler 를 누르면 아래쪽에 WebSocket 관련 샘플러들이 생긴다.

웹소켓은 연결 - 구독 - 연결에 대한 응답 - 요청 - 요청에 대한 응답 - 연결 끊기 순서로 Sampler들을 만들어줘야 한다.
(틀릴 수 있음 주의) 그치만 저는 이렇게 하고 해결했습니다. (3일동안 5시간씩 삽질을,,)
블로그들 마다 방법이 다 달라서 교집합을 찾은 느낌..?
일단 나는 ChannelInterceptor를 통해 Connect는 무조건 가로채어 인증객체를 웹소켓 세션에 저장 시켰기에 웹소켓 연결시에 Jwt토큰을 담아서 보내야 했다.
연결(Write Sampler) / 참고로 Comments는 아무거나 적어 넣으셔도 상관 없습니다. / 참참고로 여기서만 Connection에 setup new connection 체크하고 Server URL 적으시고 밑에 샘플러들에서는 use existing connection 누르셔야 합니다.
안그럼 웹소켓 세션 id가 달라집니다.

구독 (응답 받을 경로 구독)

연결에 대한 응답 샘플러입니다. 이거 해줘야 나중에 Read Sampler하나 더 써서 websocket으로 브로드캐스트 해주는거 받아 볼 수 있음
여기에는 그냥 웹소켓에 잘 연결됐다는 ACK이 들어오는 느낌입니다.

요청

저는 요청은 Http로 하고 응답은 웹소켓으로 받는 구조여서 Http Request를 사용했습니다.
Body Data에 ${bidPrice}에 대한 것은 여기서부터 밑으로 4번째 사진 보면 나옵니다.

이런식으로 추가했는데 Counter는 계속 증가시킬 수 있는 변수라고 생각하시면 편합니다.
시작 값은 1000부터 시작, 반복 실행마다 1씩 증가 999999까지 증가. counter는 변수명

http이기 때문에 헤더에 인증정보가 필요합니다.

JSR223 PreProcessor을 생성한다.
"counter"가 위에서 설정한 카운터 변수명
이렇게 해두면 http요청의 body data에서 ${bidPrice}로 끌어다 쓸 수 있습니다.

요청에 대한 응답

연결 끊기 (사실 이거 없어도 알아서 끊기긴 함)

이제 Thread Group에 우클릭 누르고 Add - Listener 누르고 View Result tree와 Aggregate Report나 Summary Report 골라서 테스트 확인하면 됩니다.
View Result tree로 응답 값 확인할 수 있음

이런 느낌
'Spring' 카테고리의 다른 글
STOMP를 사용하여 webSocket 채팅 구현 1 (1) | 2025.05.29 |
---|---|
게시글 조회 시 게시글 조회수 카운팅 Redis vs DB (5) | 2025.03.27 |
대용량 데이터 읽기 속도 개선 (0) | 2025.03.21 |
N+1문제를 해결하고 인덱스를 걸어보자 (3) | 2025.03.07 |
JWT Refresh Token에 대한 생각정리 (0) | 2025.02.10 |