Typescript 에서 동적 변환 타입 처리하기: Bithumb API 활용

2021. 10. 3. 02:39Programming Language/Typescript

반응형

Bithumb API를 활용하여 가상 자산 정보를 처리하는 과정에서 발생할 수 있는 문제 중 하나는, API 메서드의 반환 타입이 동적으로 변하는 경우입니다. 특히, post /info/balance 메서드는 전달되는 파라미터에 따라 반환되는 값의 타입이 달라지기 때문에, 이 문제를 처리하는 데 유용한 제네릭(Generic)을 활용하는 방법을 다뤄보겠습니다.

이 글에서는 Node.js 환경에서 Bithumb API를 사용할 때 발생할 수 있는 동적 반환 타입 문제를 어떻게 해결할 수 있는지 구체적으로 설명합니다.


1. Bithumb API 기본 개요

Bithumb는 가상 자산 거래소로, 다양한 API를 제공하여 사용자가 거래소에서 발생하는 여러 정보를 처리하고 활용할 수 있도록 돕습니다. Bithumb의 API는 RESTful API로, 자산 조회, 거래, 주문 상태 확인 등을 할 수 있습니다. 예를 들어, post /info/balance 메서드는 특정 자산의 잔액을 조회하는 데 사용됩니다.

하지만, post /info/balance API에서 파라미터 값에 따라 반환되는 데이터 구조가 달라지므로, 이를 처리할 때 문제가 발생할 수 있습니다.


2. post /info/balance 메서드의 동적 반환 타입 문제

post /info/balance 메서드를 호출할 때, 반환되는 값은 currency 파라미터에 따라 다릅니다. 예를 들어, currencyBTC일 경우 BTC 라는 필드로 반환하고, currencyETH일 경우 ETH 라는 필드로 반환합니다.

이러한 동적 반환 타입 문제를 어떻게 해결할 수 있을까요?

2.1. 동적 반환 타입 문제 예시

const balanceBTC = await bithumbApi.postBalance("BTC");
console.log(balanceBTC);  // BTC 잔액 정보가 담긴 객체

const balanceETH = await bithumbApi.postBalance("ETH");
console.log(balanceETH);  // ETH 잔액 정보가 담긴 객체

위 코드에서 postBalance 메서드가 currency 파라미터에 따라 반환되는 데이터의 구조가 달라지므로, 타입을 정확히 지정하기 어렵습니다. 이럴 경우, 제네릭(Generic)을 활용하여 이를 해결할 수 있습니다.


3. 제네릭(Generic)을 활용한 해결 방법

TypeScript에서 동적 반환 타입을 처리하는 일반적인 방법은 TypeScript의 제네릭(Generic)을 활용하는 것입니다. 제네릭을 사용하면, 함수나 클래스가 사용할 타입을 외부에서 지정할 수 있어, 타입 안전성을 유지하면서 동적으로 변하는 값을 처리할 수 있습니다.

3.1. 제네릭을 활용한 postBalance 메서드 수정

postBalance 메서드를 제네릭을 활용하여 동적으로 반환 타입을 지정하는 방법을 살펴보겠습니다. 우선 currency 파라미터에 따라 반환 타입을 정의해보겠습니다.

// 제네릭을 사용하여 반환 타입을 동적으로 처리
async function postBalance<T>(currency: string): Promise<T> {
  const response = await someApiCall(currency);  // 실제 API 호출
  return response.data;  // 반환값
}

// 사용 예시
interface BTCBalance {
  BTC: number;
  currency: string;
}

interface ETHBalance {
  ETH: number;
  currency: string;
}

const btcBalance = await postBalance<BTCBalance>("BTC");
console.log(btcBalance.BTC);  // BTC 잔액 출력

const ethBalance = await postBalance<ETHBalance>("ETH");
console.log(ethBalance.ETH);  // ETH 잔액 출력

3.2. 제네릭 사용의 장점

  • 타입 안전성: 각 currency에 대해 반환되는 데이터의 타입을 명확하게 정의할 수 있습니다. 이를 통해 런타임 오류를 미리 방지할 수 있습니다.
  • 유연성: currency 파라미터에 따라 다양한 타입의 데이터를 처리할 수 있습니다.
  • 가독성: 코드가 더 명확하고 가독성이 좋아집니다.

4. 실제 코드 예시

다음은 postBalance 메서드를 제네릭으로 구현한 후, BTCETH의 잔액을 처리하는 실제 코드 예시입니다.

interface BTCBalance {
  BTC: number;
  currency: string;
}

interface ETHBalance {
  ETH: number;
  currency: string;
}

async function postBalance<T>(currency: string): Promise<T> {
  // 실제 Bithumb API 호출
  const response = await fetch(`https://api.bithumb.com/account/balance/${currency}`);
  const data = await response.json();
  return data as T;
}

// BTC 잔액을 조회
const btcBalance = await postBalance<BTCBalance>("BTC");
console.log(`BTC Balance: ${btcBalance.BTC}`);

// ETH 잔액을 조회
const ethBalance = await postBalance<ETHBalance>("ETH");
console.log(`ETH Balance: ${ethBalance.ETH}`);

위 예시에서는 postBalance 메서드를 제네릭으로 처리하여 BTCETH에 대해 각각 다른 타입의 응답을 처리할 수 있도록 했습니다.


5. 결론

이 글에서는 Bithumb API에서 발생할 수 있는 동적 반환 타입 문제를 해결하는 방법을 다뤘습니다. 제네릭을 사용하여 API 호출 시 반환되는 타입을 동적으로 처리하면, 코드의 유연성타입 안전성을 확보할 수 있습니다.

제네릭을 활용한 동적 반환 타입 처리 방법은 타입스크립트를 사용한 개발에서 매우 유용하며, 특히 API 호출과 같은 동적 데이터 처리에서 강력한 도구가 됩니다.

여러분도 이 방법을 활용하여 동적 반환 타입 문제를 해결하고, 더 안전하고 효율적인 코드를 작성해보세요! 😊


참고 자료:


이 글은 제네릭을 활용한 동적 반환 타입 처리 방법을 기반으로 작성되었습니다. 추가적인 질문이나 피드백이 있다면 언제든지 댓글로 남겨 주세요! 😊

반응형