---
term: '백엔드 SDK'
seoTitle: '백엔드 SDK란? SDK와 API의 차이 설명'
headline: '백엔드 SDK란?'
slug: backend-sdk
category: api-realtime
shortDefinition: '백엔드 SDK는 앱이 원시 HTTP 없이 자신의 언어로 백엔드 서비스와 통신하게 해 주는 라이브러리와 헬퍼의 도구 모음입니다.'
relatedTerms:
  - baas-vs-custom-backend
  - auto-generated-database-apis
  - database-abstraction-layer
  - backend-boilerplate-code
contrastsWith:
  - auto-generated-database-apis
faq:
  - question: 'SDK를 쉽게 설명하면 무엇입니까?'
    answer: '소프트웨어 개발 키트(software development kit), 즉 어떤 플랫폼을 대상으로 한 개발을 실용적으로 만들어 주는 라이브러리, 문서, 도구의 묶음입니다. 백엔드 SDK는 그 계열 중 클라이언트 측 구성원으로, 백엔드 서비스의 HTTP API를 앱 자체 언어의 네이티브 메서드와 타입이 지정된 객체로 바꿔 주는 라이브러리입니다.'
  - question: 'SDK와 API의 차이는 무엇입니까?'
    answer: 'API는 계약, 즉 서비스가 노출하는 엔드포인트, 파라미터, 응답입니다. SDK는 그 계약을 대신 말해 주는 도구 모음입니다. 요청을 만들고, 인증을 붙이고, 응답을 타입이 지정된 객체로 파싱하고, 오류를 처리하는 네이티브 메서드입니다. API는 SDK 없이도 언제든 사용할 수 있습니다. SDK는 그렇게 하고 싶은 일이 거의 없도록 하기 위해 존재합니다.'
  - question: '백엔드 SDK는 내부적으로 실제로 무엇을 합니까?'
    answer: 'SDK가 없다면 호출마다 작성해야 했을 연결 작업입니다. URL을 조합하고 파라미터를 인코딩하며, 앱 키와 사용자의 세션 토큰을 붙이고, 네이티브 객체와 JSON 사이를 직렬화·역직렬화하고, HTTP 오류를 타입이 지정된 예외로 매핑하고, 합리적으로 재시도하며, 호출 사이의 세션 상태를 유지합니다. 사용자의 언어로는 메서드 호출 하나이고, 그 아래에서는 올바르게 인증된 HTTP 교환이 일어납니다.'
  - question: '클라이언트 SDK와 서버 SDK의 차이는 무엇입니까?'
    answer: '신뢰입니다. 클라이언트 SDK는 사용자가 손에 쥔 앱 안에 담겨 배포되므로 퍼블리셔블 키만 가지며, 모든 요청은 서버 측에서 권한 검사를 받습니다. 서버 SDK는 개발자가 직접 통제하는 환경에서 실행되며 그 검사를 우회하는 특권 자격 증명을 가질 수 있습니다. 둘을 혼동해 특권 키를 앱에 넣어 배포하는 것이 전형적인 SDK 보안 실패입니다.'
  - question: 'SDK, 라이브러리, 프레임워크의 차이는 무엇입니까?'
    answer: '라이브러리는 내 코드가 호출하는 코드이고, 프레임워크는 내 코드를 호출하며 구조를 정하는 코드입니다. SDK는 키트로, 보통 하나 이상의 라이브러리에 문서, 도구, 샘플을 더한 것이며 하나의 플랫폼이나 서비스를 대상으로 합니다. 모든 SDK는 라이브러리를 포함하지만 모든 라이브러리가 SDK인 것은 아니며, 프레임워크는 둘 중 어느 것도 하지 않는 방식으로 제어를 역전시킵니다.'
  - question: 'SDK 대신 원시 HTTP를 언제 사용해야 합니까?'
    answer: 'SDK가 환경에 맞지 않을 때입니다. 지원되지 않는 언어, 바이너리 크기에 대한 극단적인 제약, 의존성 하나하나가 중요한 엣지 런타임, 또는 API를 따라가지 못하는 관리되지 않는 SDK가 그렇습니다. 문서화된 API를 상대로 원시 HTTP는 언제나 가능합니다. 다만 SDK가 흡수하던 연결 작업을 다시 떠안게 되므로, 기본값이 아니라 의도적인 트레이드오프로 선택해야 합니다.'
  - question: '좋은 SDK의 조건은 무엇입니까?'
    answer: '기계 번역한 것이 아니라 각 언어에 네이티브하게 느껴지고, 타입이 지정되어 있으며 문서화되어 있고 API와 최신 상태를 유지하며, 오류 메시지만 보고도 조치할 수 있고, 인증과 재시도는 보이지 않으며, 용량은 적절해야 합니다. 판단 기준은 처음 10분입니다. 좋은 SDK는 설치부터 첫 번째 성공적인 호출까지 한 화면 분량의 코드로 데려다줍니다.'
  - question: '백엔드 플랫폼에는 플랫폼마다 SDK가 하나씩 필요합니까?'
    answer: '제대로 된 플랫폼은 웹, 모바일 플랫폼, 주요 서버 언어를 아우르는 SDK 계열을 제공합니다. 생태계마다 고유한 관용구, 비동기 패턴, 타입 시스템을 기대하기 때문입니다. 지원 범위는 실제 선택 기준입니다. 플랫폼의 API는 사용자가 개발하는 플랫폼의 SDK만큼만 쓸 만합니다.'
codeLanguages: [javascript, dart, swift, kotlin]
externalAuthorities:
  - name: 'Software development kit (Wikipedia)'
    url: 'https://en.wikipedia.org/wiki/Software_development_kit'
  - name: 'SDK documentation hub'
    url: 'https://docs.parseplatform.org/'
  - name: 'JavaScript SDK guide'
    url: 'https://docs.parseplatform.org/js/guide/'
  - name: 'Back4app SDK quickstarts'
    url: 'https://www.back4app.com/docs'
cta:
  title: '하나의 백엔드, 어디서나 네이티브로'
  text: 'Back4app은 JavaScript, Flutter, Swift, Kotlin 등을 위한 오픈소스 SDK를 제공합니다. 타입이 지정된 객체, 세션 처리, 쿼리, 파일, 실시간 업데이트를 모든 플랫폼에서 네이티브 관용구로 쓸 수 있고, 모두 같은 백엔드와 대화합니다.'
  linkText: '무료로 시작하기'
  linkUrl: 'https://www.back4app.com/signup'
author: 'Back4app Engineering'
publishedDate: '2026-11-02'
translationKey: backend-sdk
---

**백엔드 SDK는 앱이 원시 HTTP 없이 자신의 언어로 백엔드 서비스와 통신하게 해 주는 라이브러리와 헬퍼의 도구 모음입니다.** API가 계약이라면 SDK는 그 계약을 유창하게 말하는 화자입니다. 그리고 둘의 차이는 앱에서 더 이상 작성하지 않아도 되는 연결 작업 코드의 양으로 측정됩니다.

## 핵심 요약

| 질문 | 답변 |
| --- | --- |
| SDK vs. API | API = 계약, SDK = 그 계약을 네이티브로 말하는 도구 모음 |
| 흡수하는 것 | URL, 인증 헤더, 직렬화, 오류, 재시도, 세션 상태 |
| 클라이언트 SDK vs. 서버 SDK | 퍼블리셔블 키 + 강제되는 권한 vs. 신뢰할 수 있는 특권 코드 |
| vs. 라이브러리/프레임워크 | 하나의 플랫폼을 위한 라이브러리 키트. 프레임워크는 제어를 역전시킴 |
| 선택 기준 | 언어 지원 범위, 타입 지정, 유지보수 주기, 첫 호출까지의 속도 |

## 연결 작업, 전과 후

원시 HTTP로 쿼리 하나에 드는 비용입니다:

```javascript
// 원시 HTTP: 호출마다 연결 작업을 다시 구현합니다
const res = await fetch(
  'https://parseapi.back4app.com/classes/Order?where=' +
    encodeURIComponent(JSON.stringify({ status: 'paid' })),
  {
    headers: {
      'X-Parse-Application-Id': APP_ID,
      'X-Parse-REST-API-Key': REST_KEY,
      'X-Parse-Session-Token': sessionToken,   // 가져오고 저장하는 것은… 직접
    },
  }
);
if (!res.ok) handleHttpError(res.status);       // 정확히 무엇으로 매핑합니까?
const orders = (await res.json()).results.map(hydrateOrder); // 타입 지정: 직접
```

SDK를 통한 같은 호출입니다. 세션, 직렬화, 오류는 내부에서 처리됩니다:

**JavaScript:**

```javascript
// JavaScript / Node.js — Back4app JS SDK
// One SDK call — session auth, serialization, retries all inside it
const query = new Parse.Query('Order');
query.equalTo('status', 'paid');
const orders = await query.find();
// The raw-HTTP version of this: build the URL, attach headers and
// session token, encode the where-clause, parse JSON, map types…
```

**Flutter:**

```dart
// Flutter / Dart — Back4app Flutter SDK
// One SDK call — session auth, serialization, retries all inside it
final query = QueryBuilder<ParseObject>(ParseObject('Order'))
  ..whereEqualTo('status', 'paid');
final response = await query.query();
// Typed objects out; headers, tokens, and JSON handled inside the SDK
```

**Swift:**

```swift
// iOS / Swift — Back4app Swift SDK
// One SDK call — session auth, serialization, retries all inside it
let query = Order.query("status" == "paid")
query.find { result in
  if case .success(let orders) = result {
    render(orders)   // typed structs out; HTTP plumbing inside the SDK
  }
}
```

**Kotlin:**

```kotlin
// Android / Kotlin — Back4app Android SDK
// One SDK call — session auth, serialization, retries all inside it
val query = ParseQuery.getQuery<ParseObject>("Order")
query.whereEqualTo("status", "paid")
query.findInBackground { orders, e ->
  if (e == null) render(orders) // typed objects out; plumbing inside the SDK
}
```

## SDK가 위치하는 곳

```mermaid
flowchart LR
  accTitle: 백엔드 SDK가 앱을 서비스에 연결하는 방식
  accDescr: 애플리케이션 코드는 네이티브 SDK 메서드를 호출합니다. SDK는 백엔드 서비스의 API로 보낼 인증된 HTTP 요청을 조합하고, 응답을 앱을 위한 타입이 지정된 객체로 다시 파싱합니다.
  A["앱 코드<br/>네이티브 메서드, 타입이 지정된 객체"] --> S["SDK<br/>인증 · 직렬화 ·<br/>오류 · 재시도 · 세션"]
  S -->|"HTTPS"| API["백엔드 API<br/>REST / GraphQL"]
  API --> B["백엔드 서비스"]
```

## SDK vs. API vs. 라이브러리 vs. 프레임워크

| 개념 | 정의 | 호출 관계 | 예시 형태 |
| --- | --- | --- | --- |
| API | 네트워크 너머 서비스의 계약 | 사용자가 (어떻게든) 호출함 | 엔드포인트 + JSON |
| **SDK** | **한 플랫폼의 계약을 말하는 키트** | **사용자가 네이티브로 호출함** | **라이브러리 + 문서 + 도구** |
| 라이브러리 | 특정 작업을 위한 재사용 가능한 코드 | 사용자가 호출함 | 날짜 파싱 패키지 |
| 프레임워크 | 사용자의 코드를 실행하는 구조 | 프레임워크가 사용자 코드를 호출함 | 웹 또는 UI 프레임워크 |

그리고 보안의 무게를 지는 구분이 있습니다. 바로 **클라이언트 SDK vs. 서버 SDK**입니다:

| 기준 | 클라이언트 SDK | 서버 SDK |
| --- | --- | --- |
| 실행 위치 | 사용자의 디바이스와 브라우저 | 개발자가 직접 통제하는 인프라 |
| 자격 증명 | 퍼블리셔블 앱 키만 | 특권 키를 가질 수 있음 |
| 권한 | 요청마다 서버 측에서 강제(ACL, CLP) | 권한을 우회하도록 신뢰받을 수 있음 |
| 황금률 | **비밀은 절대 담지 않음** | **키는 절대 서버를 떠나지 않음** |

이 구분에서 생기는 전형적인 침해 사고는 특권 서버 키를 "임시로" 모바일 앱에 붙여 넣는 것입니다. 클라이언트 SDK는 그 안의 모든 것이 공개된다는 전제로 설계됩니다. 그래서 진짜 보안은 바이너리가 아니라 [데이터 계층](/glossary/ko/data-layer-vs-application-layer-security/)에 있습니다.

## 일반적인 사용 사례

- **BaaS 위의 모바일 앱과 웹 앱**: SDK가 *곧* 백엔드 인터페이스입니다. 인증, 데이터, 파일, 실시간 업데이트를 네이티브 호출로 다룹니다.
- **서드파티 서비스 소비**: 결제, 메시징, 분석 등에서 벤더의 SDK가 그들의 HTTP 세부 사항을 대신 처리해 줍니다.
- **서버와 서비스 간 연동**: 특권 자격 증명을 가진 서버 SDK가 신뢰할 수 있는 환경에서 관리 작업을 수행합니다.
- **멀티플랫폼 제품**: 하나의 백엔드, 네 개의 SDK, 네 가지 네이티브 관용구입니다. 위의 코드 탭은 네 개의 생태계에서 쓴 하나의 쿼리입니다.
- **내부 플랫폼 팀**: 자체 API를 얇은 SDK로 감싸 제품 팀이 연결 작업을 두 번 다시 손으로 만들지 않게 합니다.

## SDK와 원시 HTTP 중 무엇을 선택해야 할까? 결정 매트릭스

| SDK를 사용할 때 | 원시 HTTP를 택할 때 |
| --- | --- |
| 사용하는 플랫폼이 지원되고 유지보수되고 있을 때 | 해당 언어에 (살아 있는) SDK가 없을 때 |
| 인증과 세션 처리가 중요할 때 | 인증 없는 호출 하나뿐일 때 |
| 타입이 지정된 객체와 오류가 필요할 때 | 바이너리 크기를 킬로바이트 단위로 따질 때 |
| 팀의 숙련도가 다양할 때 | *자체* SDK 계층을 만들고 있을 때 |
| 제어보다 개발 속도가 중요할 때 | 오늘 필요한 API를 SDK가 아직 따라오지 못할 때 |

솔직하게 정리하면, 문서화된 API를 상대로 원시 HTTP는 언제나 쓸 수 있습니다. SDK는 복리로 이득을 주는 편의 수단이지 족쇄가 아닙니다. 편의가 블랙박스가 되지 않도록 SDK가 오픈소스인 플랫폼을 선호하는 것이 좋습니다.

## 한계와 트레이드오프

- **SDK는 수명 주기가 있는 의존성입니다.** 버전, 호환성을 깨는 변경, 지원 중단은 벤더의 일정에 따라 찾아옵니다. 버전을 고정하고, 변경 로그를 읽고, 시맨틱 버저닝(semver)을 엄격히 지키는 배포자를 선호하는 것이 좋습니다.
- **추상화는 네트워크 구간을 가립니다.** 무언가 잘못 동작하면 SDK 계층을 거쳐 디버깅해야 합니다. 좋은 SDK는 로그를 남기고, 훌륭한 SDK는 오픈소스라서 실제 동작을 소스 코드로 직접 확인할 수 있습니다.
- **지원 수준은 고르지 않습니다.** 주력 언어의 SDK는 훌륭한 경우가 많지만 나머지 언어는 뒤처집니다. 문서의 스크린샷이 아니라 *사용자의* 플랫폼용 SDK를 평가해야 합니다.
- **클라이언트에서는 번들 크기가 실제 문제입니다.** 모바일과 웹의 예산은 킬로바이트를 따집니다. 트리 셰이킹이 가능한 모듈형 SDK가 제 몫을 합니다.
- **SDK는 API를 고칠 수 없습니다.** 혼란스러운 계약은 혼란스러운 키트를 낳습니다. SDK의 품질은 API 설계의 품질에 좌우됩니다.

## Back4app에서의 SDK

Back4app은 관리형 데이터베이스, 자동 생성되는 REST 및 GraphQL API, 인증, 파일 스토리지, Cloud Code 서버리스 함수를 결합한 오픈소스 Backend as a Service(BaaS) 플랫폼입니다. SDK 계열이 정문입니다. JavaScript, Flutter, Swift, Kotlin/Android 등을 위한 [오픈소스 키트](https://docs.parseplatform.org/)가 각각 같은 생성된 API를 네이티브 관용구로 감쌉니다. 타입이 지정된 객체, 세션 관리, include를 쓰는 쿼리, 파일 업로드, 실시간 구독이 여기에 포함됩니다. 클라이언트 SDK는 퍼블리셔블 키만 가지며, ACL과 클래스 수준 권한은 모든 호출마다 서버 측에서 강제됩니다. 특권이 필요한 작업은 Cloud Code에 머뭅니다. 하나의 백엔드, 모든 플랫폼, 그리고 저장소에는 연결 작업 코드가 없습니다.
