백엔드 테스트 코드 MockRestServiceServer.expect(requestTo(expectedUrl))검증 단


AssertionError가 발생하며 테스트 실패expectedUrl)을 "?query=에러나는책 과 같이 사람이 읽을 수 있는 평문 한글로 하드코딩해서 설정함RestTemplate은 내부적으로 UriTemplateHandler를 통해서 Non-ASCII 문자(한글 등)가 포함된 URI를 안전하게 전송하기 위해 자동으로 UTF-8 기반의 퍼센트 인코딩(Percent-encoding)을 수행함.RestTemplate은 인코딩된 문자열(%EC%97… )을 던졌기 때문에 두 URL이 일치하지 않는다고 판단해서 테스트가 실패하게 됨디버깅 및 조치 내용
expectedUrl을 정의할 때, 한글 파라미터 부분을 RestTemplate의 내부 동작과 동일하게 명시적으로 인코딩하도록 수정// AS-IS (실패)
String expectedUrl = naverBookSearchUrl + "?query=에러나는책";
// TO-BE (성공)
String encodedQuery = URLEncoder.encode("에러나는책", StandardCharsets.UTF_8);
String expectedUrl = naverBookSearchUrl + "?query=" + encodedQuery;
결과 및 느낀점
RestTemplate이나 WebClient 등의 컴포넌트가 내부적으로 데이터를 어떻게 직렬화/인코딩 하는지 이해하는 계기가 되었음