SDK는 특정 시점에 갑자기 등장한 게 아니라, 소프트웨어 개발 환경이 복잡해지면서 자연스럽게 발전해온 개념!
| 시기 | 주요 변화 | SDK 형태 |
| 1970~90년대 | PC/OS 확산 | 컴파일러, 디버거, 헤더/라이브러리를 CD로 배포 (Windows SDK 등) |
| 1990~2000년대 | 언어/플랫폼 정착 | JDK(Java), .NET SDK 등 언어별 개발 키트 |
| 2000년대 후반~ | 모바일/앱스토어 | iOS SDK, Android SDK - IDE, 에뮬레이터, UI 컴포넌트 통합 |
| 2010년대~현재 | 클라우드/SaaS | AWS SDK, Firebase SDK, 카카오 SDK - API 연동을 쉽게 해주는 클라이언트 라이브러리 |
지금 우리가 주로 사용하는 SDK(카카오, 토스페이먼츠, Firebase 등)는 클라우드/서비스 SDK 형태로, 외부 API를 쉽고 안전하게 사용할 수 있도록 인증, 에러처리나 타입 정의 등을 제공함.
SDK는 그냥 기능 여러개를 묶어놓은 라이브러리라기 보다는, 그 플랫폼/서비스를 쓰는 데 필요한 것들을 한 번에 모아놓은 개발용 스타터팩에 가까움.
"SDK는 개발자를 위한 플랫폼별 빌드 도구 세트입니다. 소프트웨어를 개발하고 실행하는 데 필요한 모든 것을 한 곳에 모아둡니다." — 출처
"SDK는 특정 플랫폼에서 소프트웨어 애플리케이션을 만들 수 있게 해주는 도구, 라이브러리, 문서, 코드 샘플, 프로세스, 가이드의 모음이다." — 출처
// Lodash - 배열/객체 처리를 편하게(범용 유틸리티)import _ from 'lodash';const users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age
// AWS SDK - AWS 서비스를 쓰기 위한 도구const AWS = require('aws-sdk');const s3 = new AWS.S3();await s3.putObject({Bucket: 'my-bucket',
⇒ 즉, SDK는 “기능이 모여 있다” 보다 “이 서비스를 쓸 준비를 다 갖춘 도구 세트”라는 표현이 더 정확함.
SDK의 핵심 역할은 복잡한 과정을 숨기고, 개발자가 쉽게 쓸 수 있게 만드는 것.
참고: S3 SDK는 주로 서버(Node.js, Lambda)에서 파일을 업로드/다운로드할 때 사용. 브라우저에서 직접 S3에 업로드할 때는 보통 Presigned URL 방식을 쓰고, SDK는 그 URL을 생성하는 데 사용.
// SDK 없이 AWS S3 사용 (일부만 발췌)// 실제로 이렇게 직접 구현하는 경우는 거의 없음const crypto = require('crypto');// 1. AWS 서명 계산 (복잡함)function calculateSignature(stringToSign, signingKey) {return crypto.createHmac('sha256', signingKey)
// AWS SDK v3 공식 문서 예제import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";const client = new S3Client({ region: "ap-northeast-2" });const command =
참고: 위 코드는 AWS SDK v3 (최신) 문법. v2에서는 new AWS.S3().putObject().promise() 형태였지만, v3에서는 Command 패턴을 사용 — AWS SDK v3 공식 문서 예제
⇒ 이게 바로 “S3라는 서비스를 쉽게 쓰게 해주는 개발 도구 세트”라는 말의 구체적인 의미!
SDK없이 OAuth를 직접 구현하면 인증 URL 생성, 리다이렉트 처리, 토큰 요청 등을 모두 직접 해야함.
SDK를 쓰면 akao.Auth.authorize() 한 줄로 끝.
자세한 내용은 4번 실제 SDK 사용해보기에서 살펴보도록 할 예정..!
"기능 묶음"보다, "특정 서비스를 쓸 준비를 다 해둔 도구 상자"라는 표현이 SDK에 더 맞음.
"SDK(Software Development Kit)는 애플리케이션 개발 도구에요. 다른 회사에서 구현한 기능을 바로 내 애플리케이션에 사용할 수 있게 해줘요." — 출처
*토스페이먼츠 공식 문서를 참고해서 적음.
| 구성 요소 | 설명 |
| 라이브러리 | 개발에 사용할 수 있는 클래스, 함수, 데이터가 정의된 코드 |
| API | 서비스와 통신하는 방법을 정의한 인터페이스 |
| IDE | 코드 에디터 (예: Xcode, Android Studio) - 일부 SDK에 포함 |
| 문서 | SDK를 어떻게 사용하는지 알려주는 가이드 |
이 3가지는 자주 혼동되는 개념!
| 개념 | 역할 | 범위 |
| API | 두 소프트웨어가 통신하는 규칙 | 좁음 |
| 라이브러리 | 특정 기능을 수행하는 코드 모음 | 중간 |
| SDK | API + 라이브러리 + 문서 + 도구 | 넓음 |
"API의 용도는 SDK의 용도보다 좁아요. SDK는 애플리케이션 개발을 돕는 개발 도구에요. 반면, API는 두 소프트웨어 프로그램이 통신하는 인터페이스에요."
"SDK에는 보통 API가 포함되어 있지만, API에는 SDK가 포함되지 않습니다."
"SDK는 지원하는 플랫폼을 위해 다른 여러 리소스와 함께 API를 포함할 수 있습니다." — 출처
"카카오디벨로퍼스에서 제공하는 JavaScript SDK 사용 방법을 안내합니다." — 출처
// SDK 없이 카카오 로그인 (일부)// 1. 인증 페이지로 이동 - URL을 직접 조합해야 함const params = new URLSearchParams({client_id: 'YOUR_CLIENT_ID',redirect_uri: 'https://myapp.com/callback',response_type: 'code'});window.
(Kakao.Auth.authorize() 한 줄로 인증 URL 생성과 리다이렉트를 SDK가 알아서 처리)
// 카카오 공식 문서 예제 코드// 1. SDK 초기화Kakao.init('JAVASCRIPT_KEY');// 2. 로그인 요청 - 이 한 줄이 위의 모든 과정을 대신함Kakao.Auth.authorize({redirectUri: 'https://myapp.com/oauth/callback'});
카카오 공식 문서 예제 코드
<!DOCTYPE html><html lang="ko"><head><meta charset="UTF-8" /><title>Kakao Login Demo<
<!DOCTYPE html><html lang="ko"><head><meta charset="UTF-8" /><title>Kakao Callback</title
sequenceDiagramparticipant User as 사용자participant Web as 내 웹사이트participant Kakao as 카카오 서버User->>Web: 1. 로그인 버튼 클릭Web->>Kakao: 2. Kakao.Auth.authorize()\n(SDK가 알아서 처리)Kakao-->>User: 3. 카카오 로그인 페이지로 이동User->>Kakao: 4. 카카오 계정으로 로그인Kakao-->>User: 5. redirectUri로 이동\n?code=ABC123...User->>Web: 6. 인가 코드 확인
| 내가 직접 한 것 | SDK가 대신 해준 것 |
| SDK 스크립트 로드 | 카카오 인증 서버 URL 생성 |
| Kakao.init() 호출 | OAuth 파라미터 조합 (client_id, response_type 등) |
| Kakao.Auth.authorize() 호출 | URL 인코딩 처리 |
| redirectUri 설정 | 브라우저를 카카오 로그인 페이지로 이동 |
| 콜백 페이지에서 code 파싱 | - |
이 예제에서는 인가 코드까지만 받았음. 실제 서비스에서는 아래와 같은 과정을 진행하게 됨.
대부분의 SDK는 비슷한 패턴을 따름.
| SDK 예시 | 로드 | 초기화 | 사용 |
| 카카오 | <script src="kakao.min.js"> | Kakao.init('KEY') | Kakao.Auth.authorize() |
| Firebase | <script src="firebase-app.js"> | firebase.initializeApp(config) | firebase.auth() |
| Google Maps | <script src="maps.js"> | new google.maps.Map() | map.setCenter() |
SDK는 크게 두 가지 방식으로 배포됨.
<script src="https://t1.kakaocdn.net/kakao_js_sdk/2.7.4/kakao.min.js"></script>
npm install firebase
import { initializeApp } from 'firebase/app';
"특정 서비스를 쓸 준비를 다 해둔 도구 상자"를 직접 만들어봅시당
// 1. 초기화MiniAnalytics.init({ appId: 'my-app', debug: true });// 2. 초기화 확인MiniAnalytics.isInitialized(); // true// 3. 이벤트 추적 - 개발자는 이것만 호출

MiniAnalytics.track('button_click', { buttonId: 'signup' });
⇒ 개발자는 "어떤 이벤트인지"만 알려주면 되고, 나머지는 SDK가 알아서 처리함. 이 서비스를 쓸 준비를 다 갖춘 도구 세트의 의미 확인!