Neople LogoNeople SDK JS

설정

다양한 환경과 사용 사례에 맞게 Neople SDK를 설정하는 방법

설정

다양한 환경에 맞게 SDK를 설정하고 동작을 사용자 지정하는 방법을 알아보세요.

클라이언트 설정 옵션

NeopleDFClientNeopleCyphersClient 모두 다양한 설정 옵션을 지원합니다:

import { NeopleDFClient, NeopleCyphersClient } from 'neople-sdk-js';

const dfClient = new NeopleDFClient(apiKey, {
  baseURL: 'https://api.neople.co.kr',
  timeout: 30000,
  httpAdapter: 'fetch', // 'fetch' | 'axios' | 'got' | 'node-fetch'
  retryAttempts: 3,
  retryDelay: 1000,
  userAgent: 'MyApp/1.0.0',
  debug: false,
  validateResponse: true,
});

사용 가능한 옵션

옵션타입기본값설명
baseURLstringAPI 기본값API 요청을 위한 사용자 지정 기본 URL
timeoutnumber30000요청 타임아웃 (밀리초)
httpAdapterstring'fetch'사용할 HTTP 클라이언트 어댑터
retryAttemptsnumber3실패한 요청에 대한 재시도 횟수
retryDelaynumber1000재시도 간격 (밀리초)
userAgentstringSDK 기본값사용자 지정 User-Agent 헤더
debugbooleanfalse디버그 로깅 활성화
validateResponsebooleantrue응답 데이터 유효성 검증

HTTP 어댑터별 설정

각 어댑터별로 고유한 설정을 지정할 수 있습니다:

// Fetch 어댑터 설정
const fetchClient = new NeopleDFClient(apiKey, {
  httpAdapter: 'fetch',
  fetchOptions: {
    keepalive: true,
    mode: 'cors',
  },
});

// Axios 어댑터 설정
const axiosClient = new NeopleDFClient(apiKey, {
  httpAdapter: 'axios',
  axiosConfig: {
    maxRedirects: 5,
    proxy: {
      host: '127.0.0.1',
      port: 8080,
    },
  },
});

Next.js 설정

API 라우트

// pages/api/character/[name].ts
import { NeopleDFClient } from 'neople-sdk-js';
import { NextApiRequest, NextApiResponse } from 'next';

const dfClient = new NeopleDFClient(process.env.NEOPLE_DF_API_KEY);

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  try {
    const { name } = req.query;
    const characters = await dfClient.searchCharacter(name as string);
    res.status(200).json(characters);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
}

앱 라우터

// app/api/character/[name]/route.ts
import { NeopleDFClient } from 'neople-sdk-js';
import { NextRequest, NextResponse } from 'next/server';

const dfClient = new NeopleDFClient(process.env.NEOPLE_DF_API_KEY);

export async function GET(
  request: NextRequest,
  { params }: { params: { name: string } }
) {
  try {
    const characters = await dfClient.searchCharacter(params.name);
    return NextResponse.json(characters);
  } catch (error) {
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

서버리스 함수

Vercel 함수

// api/character.ts
import { NeopleDFClient } from 'neople-sdk-js';
import { VercelRequest, VercelResponse } from '@vercel/node';

const dfClient = new NeopleDFClient(process.env.NEOPLE_DF_API_KEY);

export default async function handler(req: VercelRequest, res: VercelResponse) {
  const { name } = req.query;

  try {
    const characters = await dfClient.searchCharacter(name as string);
    res.json(characters);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
}

AWS Lambda

import { NeopleDFClient } from 'neople-sdk-js';
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';

const dfClient = new NeopleDFClient(process.env.NEOPLE_DF_API_KEY);

export const handler = async (
  event: APIGatewayProxyEvent
): Promise<APIGatewayProxyResult> => {
  try {
    const name = event.pathParameters?.name;
    if (!name) {
      return {
        statusCode: 400,
        body: JSON.stringify({ error: '이름 매개변수가 필요합니다' }),
      };
    }

    const characters = await dfClient.searchCharacter(name);

    return {
      statusCode: 200,
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(characters),
    };
  } catch (error) {
    return {
      statusCode: 500,
      body: JSON.stringify({ error: error.message }),
    };
  }
};

오류 처리 설정

전역 오류 핸들러

import { NeopleDFClient } from 'neople-sdk-js';

const client = new NeopleDFClient(apiKey, {
  onError: error => {
    // 모니터링 서비스에 오류 로깅
    console.error('API 오류:', error);

    // 오류 추적 서비스로 전송 가능
    // errorTracker.captureException(error);
  },
});

사용자 지정 재시도 로직

const client = new NeopleDFClient(apiKey, {
  retryAttempts: 5,
  retryDelay: 2000,
  shouldRetry: error => {
    // 사용자 지정 재시도 로직
    if (error.status === 429) {
      // 속도 제한
      return true;
    }
    if (error.status >= 500) {
      // 서버 오류
      return true;
    }
    return false;
  },
});