ErrorLog

[JMeter] URL 인코딩 하지 않아 에러율 증가

Ella_K 2022. 11. 24. 21:11

JMeter로 성능테스트를 하는데 아래와 같이 오류가 많이 발생했다. 오류는 부하를 많이 발생할 때 한계치를 측정하는 지표일 텐데.. 부하가 크지 않는데 에러가 많이 발생한다는 것은 뭔가 이상하다. 🤔

그래서 오류의 이유를 알기 위해서 결과 트리를 확인해 보았다. 응답 Body에 오류 내용을 볼 수 있다는 것을 알게 되었다. 🤗

요청 시 URL에 파라미터 값들이 깨져서 들어간다. 이는 URL인코딩을 해주지 않았기 때문이다. 아래의 이유로 URI는 인코딩을 해주어야 한다!!

URL 인코딩이란 URL에서 URL로 사용할 수 없는 문자 혹은 URL로 사용할 수 있지만 의미가 왜곡될 수 있는 문자들을 '%XX'의 형태로 변환하는 것을 말한다.
URL 인코딩이 필요한 이유는 다음과 같다.
1) 인터넷을 통해 전송할 수 있는 문자는 오로지 ASCII 문자이기 때문이다. 따라서 ASCII 문자가 아닌 문자는 인터넷을 통해 전송할 수 있는 형태로 변환해줘야 한다. 
2) ASCII 문자라 하더라도 예약된 의미를 가지고 있는 문자의 경우, 그 문자 자체의 의미를 전달하고 싶은 경우에는 이스케이프 처리가 필요하기 때문이다.
이러한 문자의 대표적인 예시로는 '/', '&', '=' 등이 있다. '/'은 URL의 각 레벨을 구분해주는 역할을 맡고, '&'는 쿼리 파라미터들을 구분해주는 역할을 맡으며, '='은 쿼리 파리미터의 값을 지정해주는 역할을 맡는다. 이처럼 이러한 문자들은 ASCII 문자이지만 URL 내에서 특별한(예약된) 의미를 가지고 있다. 따라서 이러한 문자들을 문자 그 자체의 의미로서 전달하고 싶다면 이스케이프 처리가 필요하다.

https://it-eldorado.tistory.com/143 참고

URL을 인코딩해서 쿼리 파라미터 값을 구분해주고, 인터넷을 통해 전송할 수 있는 형태로 변형해주어야 한다. 따라서 파라미터 설정 시 URL 인코딩을 체크해 주었고

encoding해서 들어간다

짜잔 오류 0% 😇

그러나 성공한 요청의 응답 바디를 확인해 보니 

위와 같이 응답 Body에 글자가 깨져서 나온다. 이는 encoding이 일치하지 않기 때문이다. jmeter.properties 파일에서 아래와 같이 encoding을 지정해주고 JMeter를 껐다가 다시 실행해줘야 한다. 

글자가 깨지지 않는다.