Total 4건 1 페이지

문자열 암호화

  • More
  • 등록일 2026-03-06
  • 조회 3

실시간 환율 ( API 구현 )

  • More
  • 등록일 2026-03-05
  • 조회 11

환율정보 API

한국수출입은행 환율 API 연동 가이드: 5분 만에 끝내는 실시간 데이터 활용


1. API 키 발급 (준비 단계)

먼저 데이터를 호출할 수 있는 '열쇠'인 API 키가 필요합니다.

  • 공식 발급처: 한국수출입은행 Open API 페이지

  • 위 페이지에서 회원가입 후 인증키를 신청하면 authkey를 즉시 확인할 수 있습니다. 이 키는 API 호출 시 신분증 역할을 하므로 외부에 유출되지 않도록 주의해야 합니다.
     

2. 호출 방식 및 파라미터

수출입은행 API는 REST 방식을 지원하며, 호출 주소와 필요한 파라미터는 다음과 같습니다.

  • Base URL: https://oapi.koreaexim.go.kr/site/program/financial/exchangeJSON

  • 필수 파라미터:

    • authkey: 발급받은 개인 API 키

    • searchdate: 조회 날짜 (예: 20260305)

    • data: 조회 타입 (AP01: 환율, AP02: 대출금리, AP03: 국제금리)
       

3. 결과 필드 읽기

호출에 성공하면 JSON 형식의 데이터를 응답받습니다. 실무에서 주로 사용하는 주요 필드는 아래와 같습니다.

RESULT Integer 조회 결과 1 : 성공, 2 : DATA코드 오류, 3 : 인증코드 오류, 4 : 일일제한횟수 마감
CUR_UNIT String 통화코드
CUR_NM String 국가/통화명
TTB String 전신환(송금)
받으실때
TTS String 전신환(송금)
보내실때
DEAL_BAS_R String 매매 기준율
BKPR String 장부가격
YY_EFEE_R String 년환가료율
TEN_DD_EFEE_R String 10일환가료율
KFTC_DEAL_BAS_R String 서울외국환중개
매매기준율
KFTC_BKPR String 서울외국환중개
장부가격
 


실무 적용 시 팁: 휴일 데이터 처리

금융 API를 다룰 때 반드시 고려해야 할 점은 은행 영업일입니다.
주말이나 공휴일에는 새로운 환율 데이터가 생성되지 않기 때문에, API 호출 결과가 비어있을 수 있습니다.

이런 경우를 대비해 데이터가 없을 시 가장 최근 영업일의 날짜로 재요청하는 로직을 구현해 두는 것이 좋습니다.
또한 응답 데이터가 문자열(String) 형태로 들어오므로, 소수점 계산이 필요한 경우
적절한 숫자형으로 변환하는 과정이 필요합니다.
 



결론: 안정적인 금융 서비스의 시작

한국수출입은행 API는 무료이면서도 강력한 기능을 제공합니다.
환전 시스템이나 무역 관리 툴을 고민 중이라면 이 가이드를 통해 안정적인 데이터 환경을 구축해 보시기 바랍니다.
추가로 궁금한 점이나 코드 예제가 필요하다면 언제든 문의해 주세요.
 

출처: 한국수출입은행 Open API 가이드라인 ( https://www.koreaexim.go.kr/ir/HPHKIR019M01 )

  • More
  • 등록일 2026-03-05
  • 조회 10

Base64를 사용하는 이유

여러가지 이유가 있겠지만,

원칙적으로는 바이너리 데이터의 손실을 막기 위해서입니다.

바이너리 데이터는 문자열 형태로 변환하면 데이터 손실이 있습니다.

예를 들어 C:/Windows/System32/keyboard.drv 라는 파일의 데이터를 읽어 

다른 곳으로 전송해줘야 하는데 바이너리 형태로 전송할 방법이 없을 때는

어떻게 해야 할까요..

그럴 때 사용하는 방법 중 하나입니다. 

Base64로 인코딩 한 다음에 보내주고,  

그 곳에서는 Base64 디코딩을 이용해 데이터를 복원 하게 됩니다.

이렇게 하면 데이터 손실을 막을 수 있지요.

byte를 String 형태로 바꾸면 어떻게 될까요?

간단한 예제를 만들어 보았습니다.


public static void main(String[] args) throws IOException {
    File file = new File("C:/Windows/System32/keyboard.drv");
    FileInputStream fin = new FileInputStream(file);
     
    int read = -1;
    byte[] bt = new byte[1024];
     
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while((read=fin.read(bt))!=-1) {
        bos.write(bt, 0, read);
    }
     
    bos.close();
    fin.close();
    System.out.println(bos.toByteArray().length);
}

원본 파일은 2,000 byte인데  

String 형태로 저장하니 2,406 byte가 되어버리네요.

반대로 String 형태가 아닌 Binary로 저장하는 방법을 사용해보겠습니다.


public static void main(String[] args) throws IOException {
    File file = new File("C:/Windows/System32/keyboard.drv");
    FileInputStream fin = new FileInputStream(file);
    
    int read = -1;
    byte[] bt = new byte[1024];
    
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while((read=fin.read(bt))!=-1) {
        bos.write(bt, 0, read);
    }
    
    bos.close();
    fin.close();
    System.out.println(bos.toByteArray().length);
}

어떤가요? 2,000 byte 그대로지요?

왜 그럴까요? 아주 기본 상식이지만 다시 짚고 넘어가자면

기본적으로

char 데이터는 non-signed 1byte : 양의 정수 (0~255 표현)

​byte 데이터는 signed 1byte : 그냥 정수 (-128~127 표현)

이기 때문에 음수로 된 byte 데이터는 char가 못 알아먹습니다.

"​난 byte. char에게 -20(ec)을 주었다."

=> ​"난 char. byte한테 ​236(ec)을 받았다."

​라고 해석해버리게 되는거죠. 그래서 데이터 손실이 일어나는 겁니다.

그리하여 이 데이터를 일정한 규칙에 따라 변환한 뒤 전송해야 하는데

이러한 방법 중 하나가 Base64 인코딩입니다. Base64로 전송되면

​받는 곳에서는 다시 byte 데이터로 복구를 해야 하죠.

그러므로 당연히

1. Base64 인코딩 - 파라미터 : byte[] , 리턴유형 : String,

2. Base64 디코딩 - 파라미터 : String , 리턴유형 : byte[]

라는 결과가 나오는 것입니다.

  • More
  • 등록일 2026-02-25
  • 조회 32

검색