RestTemplate
으로 API를 호출하는 중에 오류가 발생했습니다.
네트워크 오류는 경우의 수가 많아서 하나씩 정리해 보겠습니다.
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "[API 경로]": No subject alternative DNS name matching [Domain or IP] found. nested exception is javax.net.ssl.SSLHandshakeException: No subject alternative DNS name matching [Domain or IP] found. at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:607) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)
먼저 API 정상 여부를 확인해야 합니다.
API 서버가 다운됐거나 호출 경로가 다를 수 있기 때문입니다.
또는 프로그램 오류로 API 응답에 문제가 있을 수도 있습니다.
API 서버가 정상이라면 방화벽을 확인해야 합니다.
먼저 호출하는 서버에서 API 서버로 접근이 되는지 확인해 봅니다.
서버에서 curl
명령어로 간단하게 확인해 볼 수 있습니다.
curl -k -1 [Domain Or IP]
다음으로 API 서버에서 호출하는 서버를 방화벽으로 막고 있는지 여부도 확인해 봅니다.
도메인이나 아이피를 제한하는 전략은 여러가지가 있습니다.
서버에서 사용 중인 DNS를 통해 제한하는 방법도 있습니다.
그래서 DNS 등록 허용 여부도 확인해야 합니다.
호출 서버와 API 서버 그리고 방화벽이 모두 정상인데 안돼는 경우가 있습니다.
이때는 RestTemplate
구현 코드를 확인해 봐야 합니다.
호출 방식이나 옵션에 따라 안돼는 경우가 발생할 수 있습니다.
개발을 하면서 네트워크 문제는 잊을만 하면 나타납니다.
그리고 개발자들을 혼돈의 카오스로 몰아넣습니다.
특히 On-premise
환경에서는 정해진 규칙이 없기 때문에, 더욱 파악하기가 어려워 집니다.
다행히 Cloud
환경이 점점 보편화 되면서, 일관된 보안 규칙이 생기고 있습니다.
물론 Cloud
플랫폼이 다양해서 일정 수준의 학습은 필요합니다.
그래도 예전에 비해 훨씬 명확해지고 간편해지고 있습니다.
점점 더 개발하기는 좋은 환경이 형성되고 있습니다.