본문 바로가기

분류 전체보기

(166)
[230822] Jmeter에서 SSE 에러 실패로 표시하기 Jmeter에서 SSE 에러 실패로 표시하기 💬 Jmeter에서 서버에서 보내는 에러가 받아지는 것을 확인했습니다. 이제는 그 에러를 가지고 메시지를 출력해주려고 합니다. 결과를 실패로 변경해야 합니다. ✔ 첫 번째 시도 💬 JSR223 Sampler에 작성한 스크립트에서 발생하는 에러를 JSR233 Assertion에서 받아서 실패로 처리해주려고 했습니다. 두 작업 간에 데이터를 공유시켜 줄 수 있는 내장 변수 객체 vars를 사용하기로 했습니다. 💢 공유할 데이터가 vars에 업데이트가 되지 않았습니다. 원인은 EventHandler 클래스 같은 외부 라이브러리에서 Jmeter 내장 객체 vars를 사용할 수 없기 때문이었습니다. ✔ 두 번째 시도 💬 vars를 사용할 수 없다면 그것을 대체할 수 있..
[230821] 서버에서 클라이언트로 SSE 예외 전달하기 서버에서 클라이언트로 SSE 예외 전달하기 💬 Jmeter에서 데이터가 수신이 되는 것까지 확인되었습니다. 이후 테스트에서 실패 케이스를 잡아내야 하기 때문에 에러까지 수신이 되는지 확인해야 했습니다. ✔ 서버에서 예외를 던졌을 경우 문제 💢 서버에서 SSE 연결이 끊어져 Throw를 던질 경우 프로젝트에서 클라이언트로 데이터를 전송하는 For문에서 벗어나게 됩니다. 이것 때문에 받아야 할 다른 클라이언트는 데이터를 전송받지 못하는 문제가 발생했습니다. 이것을 Jmeter로 여러 번의 요청을 테스트하다가 발견했습니다. for(CustomSseEmitter sendEmitter : sendEmitters) { try { sendEmitter.sseEmitter() .send(SseEmitter.event(..
[ 230820 ] 36주차 회고 일주일 간 진행한 내용 1. 성능 테스트 기준 선정 2. 서버에서 성능 테스트 성능 테스트 기준 선정 [진행] 기능 구현이 끝나고 나서 성능 테스트를 하기 위해서 기준을 선정해야 했다. 우리가 넣어놓은 데이터의 숫자를 기준으로 하기로 했다. 일반적인 트래픽, 인기 있고 자주 사용되는 기능의 트래픽을 분리하기로 했다. 일반적인 트래픽은 유저 10만 건을 기준으로 1분에 활성 유저를 2~5%(2,000~5,000명) 정도로 잡았다. 인기 있고 자주 사용되는 기능의 트래픽의 경우 일반적인 트래픽 10배(20,000~50,000명)으로 했다. 급격하게 몰릴 경우 배수로 급증하는 것을 고려해봐야 할 것 같아서다. 우리가 이뤄보고 싶은 목표가 담겨 있기도 했다. [생각] 성능 테스트 기준을 정하는 것은 쉽지 않았..
[230819] Jmeter SSE 테스트 데이터 전송 받지 못하는 문제 테스트 시 SSE 데이터 전송받지 못하는 문제 💬 Jmeter에서 SSE 테스트 스크립트가 정상적으로 데이터를 받지 못하는 문제가 발생했습니다. 테스트를 진행하기 위해 이 문제를 해결해야 했습니다. ✔ 원인 분석 💬 원인을 알아보기 위해 연결, 종료, 데이터를 전송받을 때 메시지를 출력해 봤습니다. 어느 지점에서 문제가 일어나는지 확인하기 위해서였습니다. ➡ 연결이 정상적으로 이루어지는 메시지 출력 ( O ) ➡ 연결 완료되었을 때 전송되는 메시지 출력 ( O ) ➡ 연결이 종료되었을 때 전송되는 메시지 출력 ( O ) 💬 모든 메시지가 정상적으로 출력이 되는 것을 확인했습니다. 그런데 이걸 확인하는 과정에서 이상한 패턴이 확인할 수 있었습니다. 연결, 연결 메시지, 종료 이 과정에 4~5초 안에 이루어..
[230818] Jmeter SSE 테스트 Jmeter SSE 테스트 💬 서비스에서 가장 핵심이 되는 경매 입찰 기능이 SSE로 구현되어 있습니다. Jmeter에서 SSE 테스트 환경을 구성을 해야 합니다. ✔ 스크립트 작성 💬 Jmeter에서 SSE 테스트 환경을 구성하기 위해서는 JSR223 Sampler에 Groovy 언어로 스크립트를 작성을 해야 합니다. 스크립트에 EventSource 라이브러리를 사용해 SSE 테스트 기능을 작성했습니다. import com.launchdarkly.eventsource.EventSource import com.launchdarkly.eventsource.EventHandler import com.launchdarkly.eventsource.MessageEvent import java.net.URI imp..
[230817] Header에서 Authorization 추출이 안되는 안되는 문제 Header에 담겨있는 토큰이 추출 안 되는 문제 💬 Front에서 Header에 담겨 있는 토큰 값을 추출할 수 없다고 했습니다. 요청에 대한 응답에는 담겨 있었지만, React에서 추출하려고 하면 문제가 되는 것이었습니다. ✔ 원인 💬 Front에서 Cookies, Authorization headers, TLS Client Certificates 같은 자격증명을 위해 사용하는 withCredential 옵션을 True 사용해서 요청을 보내고 있었습니다. 이 옵션이 활성화되어 있는 경우 Access-Control-Allow-Origin에는 와일드 카드(*)을 사용하지 못합니다. ✔ 해결 💬 해결 방법은 두 가지라고 MDN에서 설명을 해주고 있었습니다. 첫 번째는 Front에서 withCredentia..
[230816] Jmeter 아이디어 업데이트 성능 테스트 수정 테스트 💬 성능 테스트 기준이 되는 트래픽과 지표를 가지고 수정 기능을 Jmeter를 통해서 테스트 해보기로 했습니다. ✔ multipart/form-data 적용 💬 수정 기능에는 이미지 파일도 같이 전송이 되어야 했기 때문에 multipart/form-data을 사용했습니다. ➡ HTTP Request에서 Use multipart/form-data 체크 ➡ Parameters에 Json으로 전달할 데이터 입력 ➡ File Upload에 전송할 파일 정보 입력 1. Use multipart/fomr-data 체크 & Json 데이터 입력 2. 전송 파일 정보 입력 ✔ 아이디어 ID와 권한 있는 JWT 토큰 적용 💬 아이디어 ID와 권한 있는 JWT 토큰 데이터는 삭제 테스트를 할 때 만들어진 CS..
[230815] Jmeter 아이디어 삭제 기능 테스트 삭제 테스트 💬 성능 테스트 기준이 되는 트래픽과 지표를 가지고 삭제 기능을 Jmeter를 통해서 테스트 해보기로 했습니다. ✔ 랜덤 아이디 부여 💢 삭제 테스트의 경우 하나의 아이디어를 지우면 다음 요청부터 아이디어가 존재하지 않는 문제가 발생합니다. ✅ Jmeter에서 제공하는 Random Variable을 사용했습니다. 정해진 범위 안에서 랜덤 한 값을 제공해 주기 때문에 요건에 충족했습니다. ✔ 유저 부여 💢 랜덤 하게 정해진 아이디어를 사용할 경우, 하나의 유저만 사용하면 아이디어의 권한이 없는 요청을 하는 문제가 발생합니다. 💬 유저 정보는 JWT 토큰에 담겨있기 때문에 각 아이디어 삭제 권한이 있는 JWT 토큰을 제공하면 됩니다. ✅ 아이디어 권한이 있는 유저 정보와 JWT 토큰을 만드는 부..