issue-tracker 프로젝트 진행 중인데 webclient를 이용하여 oauth 기반 로그인이 구현되어있다.
application-oauth.properties에서 클라이언트 아이디, 시크릿 등의 프로퍼티들에 암호화된 값을 넣어주고, 로컬에서 구동시키고, GitHub으로 https://github.com/login/oauth/authorize?client_id= 경로에 클라이언트 아이디 값을 넣어서 요청을 보냈는데, 에러가 발생한다.
로직상으로 이뤄줘야할 절차는 access token 받기 → access token을 이용해서 user의 정보 api 얻기 이다.
로그를 보니 access token 은 잘 받아오는데 그 이후에 user의 정보를 얻어오는데서 문제가 생긴다.
webclient로 access token 받는거 까진 잘 수행하고, user 정보를 얻어오는데서 문제가 생긴 듯 하다.
에러메시지:
Request processing failed; nested exception is org.springframework.web.reactive.function.client.WebClientRequestException: failed to resolve 'api.github.com' after 2 queries ; nested exception is java.net.UnknownHostException: failed to resolve 'api.github.com' after 2 queries ] with root cause
io.netty.resolver.dns.DnsNameResolverTimeoutException: [/168.126.63.2:53] query via UDP timed out after 5000 milliseconds (no stack trace available)
webClient를 이용해서 OAuth를 구현한 코드가 내가 작성한게 아니라 시온에게 도움을 구해서 겨우 해결했다..
아래 첨부한 참고 자료를 보고 webClient의 설정을 추가해주니 해결되었다.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
...
@Bean
public WebClient webClient() {
HttpClient httpClient = HttpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
.responseTimeout(Duration.ofSeconds(1))
.doOnConnected(conn -> conn
.addHandlerLast(new ReadTimeoutHandler(5))
.addHandlerLast(new WriteTimeoutHandler(5))
).resolver(DefaultAddressResolverGroup.INSTANCE);
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
}
...
}
추가한 설정은 httpClient의 메소드 체이닝에서 마지막 부분이다. → resolver(DefaultAddressResolverGroup.INSTANCE)
정확히 에러가 발생한 원인가 어떻게 해결된건지는 webClient를 자세히 학습해야 알 듯 하다.
나중에 학습할 때 이 에러의 원인도 더 공부해보고 싶어서 정리했다.