728x90
트러블 슈팅 TMAP 204 NO_CONTENT 오류
Tmap POI 검색 API 호출 시 특정 키워드(강남 등)를 검색하면 HTTP 204 No Content 가 반환되었다. ttps://apis.openapi.sk.com/tmap/pois?version=1&format=json&searchKeyword=강남.. 이렇게 접속하면 정상적으로 응답이 내려왔다.
우선 TMAP API 를 사용할 때 204에러가 뜨면 다음과 같은 문제가 발생한 것이다.

에러 코드는 티맵 사이트에서 확인 가능하다
https://tmapapi.tmapmobility.com/main.html#webservice/guide/webserviceGuide.guide11
Guide | T MAP API
tmapapi.tmapmobility.com
🚨원래 코드
String url = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("version", 1)
.queryParam("format", "json")
.queryParam("searchKeyword", keyword)
.queryParam("page", 1)
.queryParam("count", 5)
.queryParam("searchType", "all")
.queryParam("searchtypCd", "A") // 원래 파라미터명으로 복원
.queryParam("reqCoordType", "WGS84GEO")
.queryParam("resCoordType", "WGS84GEO")
.queryParam("appKey", apiKey) // API 키를 쿼리 파라미터로 이동
.toUriString();
원인 분석
- Spring에서 URL을 만들 때 UriComponentsBuilder 사용.
- 이때 build(true)(기본값)으로 동작하여 자동 인코딩이 적용됨.
- 이미 "강남" → %EA%B0%95%EB%82%A8 으로 인코딩된 문자열이 다시 %25EA%25B0... 처럼 이중 인코딩(double encoding) 되어 서버에서 검색어를 인식하지 못함.
- 그 결과, Tmap 서버는 검색 결과가 없다고 판단 → 204 No Content 응답.
Spring의 UriComponentsBuilder 는 내부적으로 기본 encode() 처리를 하기 때문에, 이미 %EA%B0%95%EB%82%A8 로 변환된 상태에서 또 한 번 %25EA%25B0%2595%25EB... 이런 식으로 변환돼 버려서 서버가 인식을 못했던 것이다. 그래서 결과가 없다고(204) 내려왔던 것.
⭐수정 코드
String url = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("version", 1)
.queryParam("format", "json")
.queryParam("searchKeyword", keyword)
.queryParam("page", 1)
.queryParam("count", 5)
.queryParam("searchType", "all")
.queryParam("searchtypCd", "A") // 원래 파라미터명으로 복원
.queryParam("reqCoordType", "WGS84GEO")
.queryParam("resCoordType", "WGS84GEO")
.queryParam("appKey", apiKey) // API 키를 쿼리 파라미터로 이동
.build(false)
.toUriString();
build(false) vs encode()
- build(false) → 인코딩 건드리지 않음 (직접 인코딩한 문자열 그대로 사용).
- build(true) (default) → 자동 인코딩 적용 (이중 인코딩 위험이있다.) 키워드 처리
- 만약 keyword 를 직접 인코딩(URLEncoder.encode) 했다면 → 반드시 build(false) 와 같이 써야 한다.
정리
- 이중인코딩으로 204 에러 발생
- UriComponentsBuilder.build(false) 로 수정하면 해결됨.
728x90
'{Troubleshooting}' 카테고리의 다른 글
| [트러블슈팅] Git merge conflict 처리 방법 (3) | 2025.07.28 |
|---|---|
| [트러블 슈팅] AWS SDK와 Multer-S3 호환성 문제 발생 (0) | 2025.03.03 |
| [트러블 슈팅] Prisma mode: "insensitive" 옵션의 MySQL 미지원 문제 (0) | 2025.03.03 |
| [트러블 슈팅] AWS s3 이미지 깨지는 현상 (0) | 2025.03.03 |