개발

개발 및 프로그래밍 자료를 다루는 공간입니다.

DEVELOPMENT

Base64를 사용하는 이유

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[]라는 결과가 나오는 것입니다.​

자세히 보기

DEVELOPMENT

환율정보 API

환율정보 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 형식의 데이터를 응답받습니다. 실무에서 주로 사용하는 주요 필드는 아래와 같습니다.RESULTInteger조회 결과1 : 성공, 2 : DATA코드 오류, 3 : 인증코드 오류, 4 : 일일제한횟수 마감CUR_UNITString통화코드CUR_NMString국가/통화명TTBString전신환(송금)받으실때TTSString전신환(송금)보내실때DEAL_BAS_RString매매 기준율BKPRString장부가격YY_EFEE_RString년환가료율TEN_DD_EFEE_RString10일환가료율KFTC_DEAL_BAS_RString서울외국환중개매매기준율KFTC_BKPRString서울외국환중개장부가격실무 적용 시 팁: 휴일 데이터 처리금융 API를 다룰 때 반드시 고려해야 할 점은 은행 영업일입니다.주말이나 공휴일에는 새로운 환율 데이터가 생성되지 않기 때문에, API 호출 결과가 비어있을 수 있습니다.이런 경우를 대비해 데이터가 없을 시 가장 최근 영업일의 날짜로 재요청하는 로직을 구현해 두는 것이 좋습니다.또한 응답 데이터가 문자열(String) 형태로 들어오므로, 소수점 계산이 필요한 경우적절한 숫자형으로 변환하는 과정이 필요합니다.결론: 안정적인 금융 서비스의 시작한국수출입은행 API는 무료이면서도 강력한 기능을 제공합니다.환전 시스템이나 무역 관리 툴을 고민 중이라면 이 가이드를 통해 안정적인 데이터 환경을 구축해 보시기 바랍니다.추가로 궁금한 점이나 코드 예제가 필요하다면 언제든 문의해 주세요.출처: 한국수출입은행 Open API 가이드라인 ( https://www.koreaexim.go.kr/ir/HPHKIR019M01 )

자세히 보기

DEVELOPMENT

실시간 환율 ( API 구현 )

실시간 환율 ( API 구현 )

fetch(/dev/erate)

자세히 보기