본문 바로가기
사이드 프로젝트 개발기/메이트캠퍼스

URL Encoding의 중요성

by YellowCow 2023. 3. 10.

메이트캠퍼스에서는 회원가입시 학교명을 입력하게 되어있다

 

학교명은 커리어넷의 학교정보 API를 이용하여 가져온다

 

정확한 학교명 식별을 위해 학교정보 API부터 받아온 학교번호와 학교명이 매치되는지 확인하고 있다

 

증상

학교명만 검색할 때는 문제가 없었는데

 

간혹 학교명을 검색할 때 키워드에 캠퍼스명이 함께 포함되는 경우가 있었고

Ex) 한국폴리텍대학 항공캠퍼스

 

아래와 같이 요청을 보냈더니 에러가 발생하였다

https://www.career.go.kr/cnet/openapi/getOpenApi?apiKey=oooo&svcType=api&svcCode=SCHOOL&contentType=json&gubun=univ_list&searchSchulNm=한국폴리텍대학 항공캠퍼스

Caused by: java.net.URISyntaxException: Illegal character in query at index 168: https://www.career.go.kr/cnet/openapi/getOpenApi?apiKey=ea3d8e66e599ebdbef51186142b8e1a8&svcType=api&svcCode=SCHOOL&contentType=json&gubun=univ_list&searchSchulNm=한국폴리텍대학 항공캠퍼스
	at java.base/java.net.URI$Parser.fail(URI.java:2913)
	at java.base/java.net.URI$Parser.checkChars(URI.java:3084)
	at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3172)
	at java.base/java.net.URI$Parser.parse(URI.java:3114)
	at java.base/java.net.URI.<init>(URI.java:600)
	at java.base/java.net.URI.create(URI.java:881)
	... 125 more

 

 

 

원인

왜 에러가 났는지 생각하다가

위 에러 메세지에서 URISyntaxException이 발생한 것을 보고 

URL에 문제가 있는 지 확인하였고

요청 URL에 공백이 있음을 발견하였다

 

아래 요청 URL에 "한국폴리텍대학 항공캠퍼스"라는 문자열에 공백이 있는 걸 발견했다

https://www.career.go.kr/cnet/openapi/getOpenApi?apiKey=oooo&svcType=api&svcCode=SCHOOL&contentType=json&gubun=univ_list&searchSchulNm=한국폴리텍대학 항공캠퍼스


URL에 공백이나 특수문자가 포함될 떄는 유의해서 사용해야 한다

URL에는 예약어가 존재하기 때문이다

 

해결

API 요청을 보낼 때 학교이름을 URL Encoding 하여 보내도록 수정

 

- 기존

HttpGet httpGet = new HttpGet(collegeSearchUrl + collegeName);

 

- 수정 후

String encodedURL = URLEncoder.encode(collegeName, "UTF-8");
HttpGet httpGet = new HttpGet(collegeSearchUrl+encodedURL);

 

느낀점

이전에 URL Encoding에 대해서 배우긴 했었지만

이번 계기로 인해서 URL Encoding을 왜 해야하는지에 대해서 몸소 깨닫게 되었다 

검색을 좀 더 해보니 URL에는 문법이 존재하였는데

공백과 특수문자 외에도 한글과 같이 아스키코드 문자가 아닌 문자가 포함된 경우도

문제가 될 소지가 있었다

 

앞으로는 요청을 보낼 때 URL 문법에 맞게 보내도록 주의해야겠다

 

*참고자료

https://perishablepress.com/stop-using-unsafe-characters-in-urls/

 

댓글