💡 개요
아래 코드는 정상적으로 동작한다.
@Override
public double[] geocode(String keyword) {
try {
String encodedKeyword = URLEncoder.encode(keyword, "UTF-8");
String requestUrl = API_URL + encodedKeyword;
URL url = new URL(requestUrl);
...
하지만 아래 코드는 잘못된 요청(400)이 뜬다.
@Override
public double[] geocode(String keyword) {
try {
String requestUrl = API_URL + keyword; // 인코딩 X
URL url = new URL(requestUrl);
...
이유가 뭘까..
🛠️ 파라미터 인코딩
400 에러는 요청 형식에 문제가 있을 때 발생하는 HTTP 응답 코드로, 주로 요청의 Body나 쿼리 파라미터가 서버에서 기대하는 형식과 맞지 않을 때 발생한다.
앞서 작성한 코드에서 keyword는 보통 한글, 공백을 포함하는 문자열이다.
URL에 사용되는 쿼리 파라미터은 기본적으로 영어 알파벳, 숫자, 일부 특수 문자만 허용된다.
인코딩을 하지 않으면 영어 이외의 문자(한글, 공백, 특수 문자)는 제대로 전달되지 않거나 요청이 깨지게 된다.
따라서 URLEncoder.encode(keyword, "UTF-8")을 사용해 keyword를 URL에 안전하게 포함될 수 있는 형식으로 인코딩해야 한다.
이 과정을 생략하면 서버는 해당 요청을 올바르게 해석하지 못하고, 결과적으로 400 Bad Request 오류를 반환하게 되는 것이다.