[PHP] 한국수출입은행이 제공하는 현재 환율정보 Open API 사용하기

한국수출입은행이 제공하는 환율정보 Open API 관련 링크:

https://www.koreaexim.go.kr/ir/HPHKIR020M01?apino=2&viewtype=C&searchselect=&searchword=#none 

 

유의사항으로는

일일 호출 가능 횟수(1000회) 제한이 있다는 점,

개인정보보유기간 만료에 따른 인증키 파기가 될 수 있다는 점(기간 내에 개인정보재동의를 해야 2년씩 연장 사용 가능),

비영업일의 데이터 혹은 영업당일 11시 이전에 데이터 요청할 경우 null 값이 반환 된다는 점이다.

위 내용을 숙지하고 있다면 사용에 문제는 없다.(2023년 하반기 기준)

 


 

 


 

이번 프로젝트는 php3 제작 및 내용 중 환율정보를 사용하는 부분이 있던터라 cURL을 이용하여 통신 처리를 하였고,

나머지는 환율정보 요청한 값에 대해 일정 시간대에 배치를 돌려 DB에 저장해두는 형태를 취했다.

 

인증키 오류

https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=AUTHKEY1234567890&searchdate=20180102&data=AP01

 

요청 파라미터값은 총 3가지로 인증키는 별도로 발급 받으셔야하며, 샘플로 제공되는 인증키는 작동되지않는다.

아래와 같이 샘플 인증키 사용시 오류로 result가 3의 값으로 반환된다.

 

2023년 9월 1일 금요일 - 영업일

https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=인증키&searchdate=20230901&data=AP01

 

영업일 11시 이후 호출시 result의 값이 1로 정상적으로 데이터 반환되는 모습을 볼 수 있었다.

단, 내가 원하는 환율 정보에 따라 result 값이 1이 아닐 수도 있어

원하는 환율 정보에 따른 result 값을 체크 후에 원하는 환율 정보를 사용하도록 로직을 구현하였다.

 

2023년 9월 2일 토요일 - 비영업일

https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=인증키&searchdate=20230902&data=AP01

 

휴일 날짜로 호출시 데이터 자체가 json 형태로 반환되는 것이 아닌 null 을 만나게 된다.

정확하게는 빈 배열([]) 기호를 만나게 되는데 이 경우 호출시 빈 배열([]) 기호를 체크하도록 로직을 구현하였다.

 

그 외 호출의 경우

result의 값이 2가 뜰 경우의 수는 없으며, result의 값이 3 또는 4가 뜨는 경우, 

인증코드 만료 혹은 일일제한횟수 마감으로 인하게 되는 경우는 로직이 아닌

접근경로를 확인해봐야하는 문제로 변질되기때문에 DB에 대체 값을 입력하여 체크할 수 있도록 로직을 구현하였다.

그 외의 에러도 같이 묶어 개발자가 확인 할 수 있도록 하였다.

 


 

번외로 테스트 중 에러로 인해 DB에 저장된 값이 대체 값이었을 경우,

실제 한국수출입은행으로 호출시에 정상 데이터가 반환되는 경우에는

내 로직 문제였기때문에 정상값을 재호출하여 DB에 입력해줘야하는 번거로움이 있었다.

 

DB에 일일히 UPDATE 혹은 INSERT를 해도 되지만,

이미 INSERT 로직을 구현해뒀기때문에 아래와 같이 구현한 php3 파일에 date 파라미터를 추가하여

date가 입력되었을 시 자동으로 해당 날짜의 환율 정보가 INSERT 되도록 구현하였다.

DB에 잘못된 입력된 데이터만 DELETE 처리로 날려주었다. 

 

//e.g. URL 서버주소/koreaexim.php3?date=20230703
if(isset($date)){
	$searchdate = $date;
} else {
	$searchdate = urlencode(date('Ymd', strtotime ('-1 days')));
}

 

-1 days 처리는 환율정보를 하루가 지난 뒤 전일자 환율 정보를 INSERT 하기 위함이다.
배치를 실행하는 용으로 제작된 php3이기 때문에 배치를 돌리는 날짜는 당일이며,

환율정보는 전일자 환율 정보를 INSERT 할 목적으로 전일자 처리를 추가하였다.

 

// 날짜 하드코딩하여 실행
$searchdate = date('Ymd',strtotime('20230703'));

 

위처럼 구현 이전에는 로직을 구현 및 수차례 수정이 필요했기때문에

날짜를 하드코딩하여 테스트해 볼 수 있도록 해당 코드도 사용하였다.