병합 전 로컬에서는 카카오맵 api 호출이 잘 동작 했어서 병합 이후 필터에서 걸린게 아닌가 하는 의문에 security 설정 때문인가 생각했지만 에러가 아닌 403 코드가 나왔어야 했다. 또한 “api/tutors/**” 에 대한 permitAll() 설정을 해 두었기 때문에 security 의 문제는 아니라고 판단했다.

executeOpen 이라는 메서드를 찾을 수 없다고 나와서 maven repository에서 httpClient5의 다른 버전들로 바꿔보아도 똑같은 오류가 나왔다.

하지만 해당 오류는 httpClient 가 아닌 httpCore5의 의존성이 없기 때문에 발생된 것이였다.

따라서 builder.gradle 에 httpCore5 을 넣어주었더니 다시 동작하기 시작했다.

// <https://mvnrepository.com/artifact/org.apache.httpcomponents.core5/httpcore5>
implementation group: 'org.apache.httpcomponents.core5', name: 'httpcore5', version: '5.2.4'

그리고 httpClient 와 httpCore 는 버전을 잘 맞춰야 하며, 사용하는 spring boot 의 버전과 호환이 되는지 확인을 잘 해야한다.

2024-06-05 02:03:29.167 [http-nio-8080-exec-4] ERROR com.linked.classbridge.exception.GlobalExceptionHandler - Unexpected Exception occurred
jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'org.apache.hc.core5.http.ClassicHttpResponse org.apache.hc.client5.http.classic.HttpClient.executeOpen(org.apache.hc.core5.http.HttpHost, org.apache.hc.core5.http.ClassicHttpRequest, org.apache.hc.core5.http.protocol.HttpContext)'
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1104)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
...
Caused by: java.lang.NoSuchMethodError: 'org.apache.hc.core5.http.ClassicHttpResponse org.apache.hc.client5.http.classic.HttpClient.executeOpen(org.apache.hc.core5.http.HttpHost, org.apache.hc.core5.http.ClassicHttpRequest, org.apache.hc.core5.http.protocol.HttpContext)'
at org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:99)
at org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:70)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:889)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:830)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:691)
at com.linked.classbridge.service.KakaoMapService.extracted(KakaoMapService.java:45)
...