Open API와 DNS 문제
많은 서비스에서 open api를 제공한다. 공공데이터포털의 open api 명세 확인 가이드에 따르면 기본적으로 open api 사용을 위해 필요한 요소들은 다음과 같다.
1. BaseUrl
2. API 호출을 위해 제공되는 프로토콜(일반적으로 HTTP/HTTPS)
3. 프로토콜에서 허용하는 메서드
4. API 호출 주소
이러한 규칙에 따라 임의로 open api를 만든다고 하면 다음과 같은 형식이 될 것이다.
GET https://api.odcloud.kr/api/15077093/v1/file-data-list
- BaseUrl =
api.odcloud.kr/api
- 프로토콜 = HTTPS
- 메서드 = GET
- API 호출 주소 =
15077093/v1/file-data-list
이렇게 open api를 제공하는 측에서 정한 가이드에 따라 api를 호출하게 되면 정해진 양식의 데이터를 받을 수 있게 된다.
문제
일반적으로 제공되는 open api의 BaseUrl은 특정 서버의 IP 주소가 아니라 도메인 이름으로 되어 있다. 위에서 본 예시의 BaseUrl 역시 api.odcloud.kr
라는 도메인으로 되어 있다.
그런데 open api의 사용자 측에서 DNS를 사용할 수 없는 상황(폐쇄망 사용 등)에서는 어떻게 접근할 수 있을까? api.odcloud.kr
라는 도메인으로 들어오는 요청을 처리하는 서버의 주소가 111.111.111.111
가정한다면 도메인 이름을 사용하는 것이 아니라 서버의 주소를 이용해서 open api 요청을 보내면 될 것이다.
# 도메인의 ip 주소 확인
nslookup api.odcloud.kr
# 도메인 대신 서버의 주소 직접 입력
GET https://111.111.111.111:443/api/15077093/v1/file-data-list
그런데 도메인 주소가 VIP를 사용하고 있는 상황에서는 이 방법마저 사용할 수 없다. 해당 도메인으로 들어오는 요청을 프록시 서버에서 WAS로 라우팅을 해주고 있기 때문에 이 경우에는 실제 open api 요청을 처리하는 WAS의 주소에 접근할 수 없을 것이다. 설령 WAS의 주소를 알아낸다 하더라도 보안 설정 때문에 프록시 서버를 거치지 않고 직접 들어온 요청은 WAS에서 처리하지 못할 가능성이 높다.
이런 경우에는 hosts 파일을 이용해서 DNS를 사용하는 것이 아니라 사용자가 직접 특정 IP의 도메인 이름을 지정해주고 바로 해당 도메인으로 요청을 보내는 것으로 문제를 해결해볼 수 있다.
hosts 파일에 특정 주소에 대한 호스트 이름을 설정하게 되면 해당 호스트로 요청을 보내면 DNS 질의를 진행하지 않고 곧바로 hosts 파일에서 지정한 주소로 요청을 보낼 수 있기 때문이다. 다시 말해 운영체제에서 호스트 이름에 대한 주소를 매핑해주는 것이라 할 수 있다.
# hosts 파일에 다음과 같이 추가
111.111.111.111 api.odcloud.kr
'일반 > 팁' 카테고리의 다른 글
ImageIO와 톰캣 디렉토리 문제 (0) | 2022.07.01 |
---|---|
MySQL collation 관련 오류 (0) | 2022.06.08 |
쿠키 도메인 관련 문제 (0) | 2022.06.08 |