본문으로 건너뛰기

서버리스 함수 배포하기

서버리스 함수 배포하기커스텀 비즈니스 로직을 서버리스 함수로 작성하고 즉시 배포합니다.

중급프레임워크 연동16초읽기 약 3분업데이트 2026-04-14

커스텀 비즈니스 로직을 서버리스 함수로 작성하고 즉시 배포합니다.

이 튜토리얼에서 배울 내용
콘솔에서 함수 생성
handler 함수 작성
context.db로 DB 접근
REST API 엔드포인트 생성

서버리스 함수 배포하기

"서버리스"란 서버를 직접 관리하지 않고도 백엔드 코드를 실행하는 방식입니다. ConnectBase Functions를 사용하면 JavaScript 함수를 작성하고 저장하는 것만으로 즉시 API 엔드포인트가 생성됩니다. 서버 설정, 배포, 스케일링을 모두 ConnectBase가 처리합니다.

이런 경우에 사용합니다

  • 프론트엔드에서 노출하면 안 되는 비즈니스 로직 (결제 처리, 비밀 키 사용 등)
  • 외부 API를 호출하는 중간 서버가 필요할 때
  • 데이터를 가공해서 응답해야 할 때
  • 여러 DB 작업을 한 번에 처리해야 할 때

완성된 기능

  • 서버리스 함수 생성 및 즉시 배포
  • HTTP 엔드포인트 자동 생성 (GET, POST, DELETE 등)
  • 함수 내에서 ConnectBase REST API 호출로 DB 접근
  • REST API 패턴 구현

1. 콘솔에서 함수 생성하기

  1. ConnectBase 콘솔에 로그인합니다
  2. 왼쪽 메뉴에서 함수를 클릭합니다
  3. 새 함수 버튼을 클릭합니다
  4. 아래와 같이 설정합니다:
    • 이름: products-api
    • 런타임: Node.js
  5. 생성 버튼을 클릭하면 코드 에디터가 열립니다

2. 함수 코드 작성하기

함수는 handler라는 이름의 함수를 export 하면 됩니다. request.body 에서 invoke 페이로드를, context.env 에서 환경 변수를 사용할 수 있습니다. DB 접근은 함수 내부에서 ConnectBase REST API 또는 SDK 를 직접 호출합니다.

환경 변수 사전 설정: 함수 상세 페이지 > 시크릿 탭에서 PUBLIC_KEYPRODUCTS_TABLE_ID 를 추가하세요. 함수 내부에서는 context.env.PUBLIC_KEY 로 접근.

아래는 상품 데이터를 조회/생성/삭제하는 REST API 예시입니다:

functions/products-api.js:

javascript
export default async function handler(request, context) {
  const { method } = request.body || {}
  const PUBLIC_KEY = context.env.PUBLIC_KEY
  const TABLE_ID = context.env.PRODUCTS_TABLE_ID
  const BASE = 'https://api.connectbase.world/v1/public'
  const headers = { 'Content-Type': 'application/json', 'X-Public-Key': PUBLIC_KEY }

  // GET 요청 — 상품 목록 조회
  if (method === 'GET') {
    const r = await fetch(`${BASE}/tables/${TABLE_ID}/data?limit=10`, { headers })
    const result = await r.json()
    return { items: result.data, status: 200 }
  }

  // POST 요청 — 새 상품 추가
  if (method === 'POST') {
    const r = await fetch(`${BASE}/tables/${TABLE_ID}/data`, {
      method: 'POST',
      headers,
      body: JSON.stringify({ data: request.body.data }),  // { name, price, ... }
    })
    const created = await r.json()
    return { id: created.id, status: 201 }
  }

  // DELETE 요청 — 상품 삭제
  if (method === 'DELETE') {
    const { id } = request.body
    await fetch(`${BASE}/tables/${TABLE_ID}/data/${id}`, { method: 'DELETE', headers })
    return { deleted: true, status: 200 }
  }

  // 그 외 메서드는 405 에러
  return { error: 'Method not allowed', status: 405 }
}

💡 함수 런타임은 샌드박스 환경입니다. SDK 패키지를 import 하려면 함수 의존성 (package.json) 에 connectbase-client 를 추가하거나, 위 예제처럼 fetch 로 REST API 를 직접 호출하세요.

3. 클라이언트에서 함수 호출하기

함수를 배포하면 두 가지 방법으로 호출할 수 있습니다:

방법 1: SDK로 호출 (권장)

src/api/products.ts:

typescript
import { cb } from '../lib/connectbase'

// 상품 목록 가져오기
export async function getProducts() {
  return cb.functions.invoke('products-api', {
    method: 'GET',
  })
}

// 새 상품 추가
export async function addProduct(data: { name: string; price: number }) {
  return cb.functions.invoke('products-api', {
    method: 'POST',
    body: data,
  })
}

방법 2: REST API로 직접 호출

함수는 POST /v1/public/functions/:functionID/invoke 엔드포인트로 호출합니다. functionID는 함수 생성 시 자동 발급되며, 함수 상세 페이지 상단에서 확인할 수 있습니다.

POST https://api.connectbase.world/v1/public/functions/{functionID}/invoke

curl 예시 (Public Key 헤더 필수):

bash
curl -X POST "https://api.connectbase.world/v1/public/functions/{functionID}/invoke" \
  -H "X-Public-Key: cb_pk_..." \
  -H "Content-Type: application/json" \
  -d '{"method":"GET"}'

4. 배포 확인하기

함수 코드를 저장하면 자동으로 즉시 배포됩니다. 콘솔에서 다음을 확인할 수 있습니다:

항목확인 위치
엔드포인트 URL함수 상세 페이지 상단
실행 로그함수 → 로그 탭
실행 횟수/에러율대시보드 → 사용량

다음 단계

  • 환경 변수 사용 — 함수 설정에서 환경 변수를 등록하고, context.env.MY_KEY로 접근
  • 외부 API 호출fetch()로 Stripe, Slack, 이메일 서비스 등 외부 API 연동
  • 인증 처리request.headers에서 토큰을 가져와 사용자 확인
  • 에러 핸들링 — try/catch로 에러를 잡고 적절한 HTTP 상태 코드 반환

이 튜토리얼이 도움이 됐나요?