SDK란? 소프트웨어 개발 키트를 쉽게 설명
SDK(소프트웨어 개발 키트)는 회사가 개발자에게 제공하는 완성된 도구 모음으로, 개발자가 처음부터 모든 것을 만들지 않고도 해당 회사의 서비스나 플랫폼을 사용할 수 있게 해 줍니다. 보통 특정 프로그래밍 언어용 코드 라이브러리, 문서와 예제가 포함되며, 테스트 도구 같은 부가 기능이 들어 있기도 합니다. 앱이 "Stripe SDK를 사용한다"고 말하면, 앱 코드가 Stripe의 API에 모든 요청을 직접 작성하는 대신 Stripe가 미리 만들어 둔 함수를 호출한다는 뜻입니다.
AI로 만들 때 SDK가 중요한 이유
AI 빌더에게 결제, AI 채팅, 지도, 이메일 기능을 추가해 달라고 하면, 보통 해당 제공업체의 SDK를 설치하고 이를 호출하는 몇 줄의 코드를 작성합니다. SDK가 무엇인지 알면 다음에 도움이 됩니다.
- 프로젝트에 무엇이 추가되는지 이해할 수 있습니다. SDK는 의존성, 즉 앱이 이제 의존하게 된 외부 코드입니다.
- 필요한 설정을 알아볼 수 있습니다. 거의 모든 SDK에는 API 키가 필요하며, 많은 SDK가 "서버"용과 "브라우저"용으로 나뉘어 있어 어떤 키를 써도 안전한지에 대한 규칙이 다릅니다.
- 정확하게 요청할 수 있습니다. "서버에서 공식 Stripe SDK를 사용해 줘"가 "Stripe를 추가해 줘"보다 더 명확한 지시입니다.
- 오류를 읽을 수 있습니다. AI로 만든 앱의 많은 오류는 SDK가 잘못 설정되었거나, 오래되었거나, 잘못된 위치에서 사용되어 생깁니다.
일상의 비유
선반을 달고 싶다고 상상해 보세요.
- API는 건물의 규칙입니다. 어느 벽에 나사를 박을 수 있는지, 어느 정도의 무게를 버티는지, 배관이 어디에 있는지를 알려 줍니다. 이 규칙만 가지고도 작업할 수는 있지만, 모든 것을 직접 재고 뚫어야 합니다.
- SDK는 같은 회사가 만든 조립식 선반 키트입니다. 미리 재단된 부품, 알맞은 나사, 그 벽에 정확히 맞는 브래킷, 그리고 설명서가 들어 있습니다.
선반을 어디에 달지, 무엇을 올릴지는 여전히 여러분이 정합니다. 키트는 나무를 자르고 나사 크기를 짐작하는 수고를 덜어 주며, 수도관에 구멍을 낼 가능성도 줄여 줍니다.
SDK vs API vs 라이브러리 vs 프레임워크
이 용어들은 서로 겹쳐서 많은 사람이 헷갈려 합니다.
| 용어 | 무엇인가 | 예시 |
|---|---|---|
| API | 서비스와 대화하기 위한 규칙입니다. 어떤 요청을 받고 무엇을 돌려주는지 정합니다. | api.stripe.com의 Stripe REST API |
| SDK | 특정 언어에서 제공업체의 API나 플랫폼을 쓰기 위한 도구 모음으로, 문서와 도구가 함께 들어 있습니다. | Stripe의 공식 Node.js 라이브러리 |
| 라이브러리 | 프로젝트에 추가하는 재사용 가능한 코드입니다. | 날짜 형식을 바꾸는 패키지 |
| 프레임워크 | 앱 전체가 그 안에서 만들어지는 더 큰 구조입니다. | React, Next.js, Django |
SDK는 보통 라이브러리를 포함하고, 그 라이브러리는 보통 API를 호출합니다. 웹 서비스의 경우 "SDK"와 "클라이언트 라이브러리"는 종종 같은 의미로 쓰입니다.
웹 서비스와 무관한 SDK도 있습니다. Apple과 Google은 iOS와 Android 앱을 만들기 위한 SDK를 공개하며, 여기에는 컴파일러, 시뮬레이터, 플랫폼 코드가 들어 있습니다. 원리는 같습니다. 해당 플랫폼용으로 무엇이든 만들 수 있도록 필요한 모든 것을 한 키트에 담은 것입니다.
SDK가 해 주는 일
같은 작업, 즉 결제 제공업체에 고객을 만드는 작업을 두 가지 방식으로 해 보겠습니다.
SDK 없이 하면, 앱 코드가 HTTP 요청을 직접 만들어야 합니다. URL을 설정하고, 올바른 헤더에 비밀 키를 넣고, API가 기대하는 형식으로 데이터를 맞추고, 전송하고, 상태 코드를 확인하고, 응답을 파싱하고, 네트워크가 잠깐 끊기면 재시도까지 처리해야 합니다.
SDK와 함께 하면, 한 줄에 가까워집니다.
const customer = await stripe.customers.create({ email: "lena@example.com" });
이 한 줄 뒤에서 SDK가 다음을 처리합니다.
- 인증: 모든 요청에 키를 올바르게 붙입니다.
- 데이터 형식 변환: 데이터를 API가 기대하는 형식으로 바꾸고, 응답을 다시 객체로 바꿉니다.
- 오류 처리: 상태 코드를 코드가 잡을 수 있는 명확한 오류 유형으로 바꿉니다.
- 재시도: 일시적인 이유로 요청이 실패했을 때 안전하게 다시 시도합니다(많은 공식 SDK가 이 기능을 제공합니다).
- 타입: TypeScript에서는 편집기에 어떤 필드가 있는지 알려 주어, 코드를 실행하기 전에 실수를 찾아냅니다.
실제 예시: 고객 지원 앱에 AI 답변 추가하기
AI 빌더에게 이렇게 요청한다고 해 봅시다. "고객이 지원 티켓을 제출하면, AI 모델을 사용해 추천 답변을 생성해 줘."
- AI가 모델 제공업체의 공식 SDK를 프로젝트에 패키지로 설치합니다(JavaScript 프로젝트라면 npm 레지스트리에서 설치합니다).
- 여러분이 제공업체의 API 키를 프로젝트 비밀 값으로 추가합니다. SDK는 서버에서 환경 변수를 통해 이 키를 읽습니다.
- AI가 티켓 내용과 짧은 지시문을 담아 SDK를 호출하는 서버 경로를 작성하고, 추천 답변을 데이터베이스에 저장합니다.
- 브라우저는 키를 전혀 보지 않습니다. 브라우저는 여러분의 서버 경로만 호출합니다.
나중에 제공업체가 API를 바꾸면 보통 새 SDK 버전을 출시합니다. 패키지를 업데이트하고 릴리스 노트에서 호환성을 깨는 변경이 있는지 확인하는 것만으로 충분한 경우가 많습니다.
핵심 용어
| 용어 | 뜻 |
|---|---|
| 의존성 | 프로젝트가 의존하는 외부 코드입니다. SDK도 그중 하나입니다. |
| 패키지 / 패키지 매니저 | 내려받을 수 있는 코드 묶음과 이를 설치하는 도구입니다(JavaScript는 npm, Python은 pip). |
| 클라이언트 라이브러리 | 특정 API를 더 쉽게 호출하도록 돕는 코드입니다. 웹 서비스에서 "SDK"가 이 뜻으로 쓰이는 경우가 많습니다. |
| 서버 측 SDK | 백엔드에서 실행되며, 비밀 키를 안전하게 사용할 수 있습니다. |
| 클라이언트 측 / 브라우저 SDK | 사용자의 브라우저에서 실행됩니다. 공개용 또는 "퍼블리시 가능한" 키만 받습니다. |
| 버전 | 각 SDK 릴리스에는 번호가 있습니다(예: 4.2.0). 번호가 크게 올라가면 호환성이 깨지는 변경이 있을 가능성이 큽니다. |
| 호환성 깨짐(Breaking change) | 코드를 수정해야 하는 업데이트입니다. |
| 변경 로그 / 릴리스 노트 | 제공업체가 각 버전에서 무엇이 바뀌었는지 정리한 목록입니다. |
흔한 오해
- "SDK와 API는 같은 것이다." API는 서비스의 인터페이스이고, SDK는 그 위의 편의 계층입니다. 대부분의 웹 API는 SDK 없이도 호출할 수 있지만, 그만큼 작업이 더 많아집니다.
- "SDK를 설치하면 연동이 끝난다." 여전히 제공업체 계정, 올바른 키, 그리고 무언가 잘못되었을 때 처리하는 코드가 필요합니다.
- "올바른 이름의 패키지는 모두 공식 패키지다." 공격자가 비슷한 이름의 가짜 패키지를 올리기도 합니다. 정확한 패키지 이름은 제공업체의 문서에서 확인하세요.
- "브라우저 SDK는 내 비밀 키를 쓸 수 있다." 절대 아닙니다. 브라우저 코드에 있는 것은 모두 방문자에게 보입니다. 비밀 키는 서버 측 코드에만 있어야 합니다. 자세한 내용은 API 키를 안전하게 관리하는 방법을 참고하세요.
- "SDK는 업데이트할 필요가 없다." 오래된 버전은 더 이상 수정 사항을 받지 못하고, 제공업체가 예전 API 버전을 종료하면 결국 작동을 멈춥니다.
AI 빌더에게 요청할 내용
- "서드파티 래퍼가 아니라 제공업체의 공식 SDK를 사용해 줘. 설치한 정확한 패키지 이름과 버전을 알려 줘."
- "SDK는 서버에서만 사용하고, 키는 환경 변수에서 읽어 줘."
- "이 SDK의 어느 부분이 브라우저에서 실행되며, 어떤 키를 사용하나요?"
- "SDK 호출이 실패하거나 시간 초과되면 어떻게 되나요? 사용자에게는 명확한 메시지를 보여 주고, 오류는 기록해 줘."
- "이 앱이 의존하는 모든 SDK와 패키지를 나열하고, 각각이 무엇에 쓰이는지 설명해 줘."
- "우리가 쓰는 SDK 중 오래되었거나 알려진 보안 문제가 있는 것이 있는지 확인해 줘."
Mythex의 SDK
Mythex 에이전트는 표준 패키지 매니저를 사용해 프로젝트 샌드박스에 패키지를 설치할 수 있습니다. 여기에는 제공업체의 SDK도 포함됩니다. 패키지 이름과 원하는 기능을 말하면 됩니다. 자세한 내용은 npm 패키지 사용하기를 참고하세요. Mythex에는 미리 만들어진 연동 목록이 없습니다. 제공업체의 키를 프로젝트 비밀 값으로 저장하고, Integrate any API에서 설명하는 대로 서버 측에서 서비스를 호출해 달라고 요청하면 됩니다.
SDK 아래의 계층이 궁금하다면 API란 무엇인가를 읽어 보세요. SDK를 사용하는 대표적인 두 기능은 앱에 결제를 추가하는 방법과 LLM API 사용하는 방법에서 확인할 수 있습니다.
자주 묻는 질문
SDK를 쉽게 말하면 무엇인가요?
SDK(소프트웨어 개발 키트)는 회사가 개발자들이 자사 서비스나 플랫폼을 쉽게 쓸 수 있도록 제공하는 완성된 코드, 문서, 도구의 묶음입니다. 개발자가 API에 보내는 모든 요청을 직접 작성하는 대신, SDK가 이미 제공하는 간단한 함수를 호출하면 됩니다.
SDK와 API의 차이는 무엇인가요?
API는 서비스와 대화하기 위한 규칙, 즉 서비스가 받아들이는 요청과 돌려주는 응답의 형식입니다. SDK는 그 API 위에 만들어진 도구 모음이며, 보통 한 가지 프로그래밍 언어를 위해 만들어집니다. SDK는 요청을 대신 보내고 인증, 재시도, 데이터 형식 같은 세부 사항을 처리합니다.
SDK는 무료인가요?
웹 서비스용 SDK 대부분은 내려받기가 무료이며 오픈 소스입니다. 다만 SDK가 연결하는 서비스는 사용량에 따라 요금을 청구할 수 있습니다. Stripe나 OpenAI SDK 자체는 비용이 들지 않으며, 그 SDK가 보내는 결제나 AI 요청에 대해 제공업체가 비용을 청구합니다.
SDK를 사용하는 것은 안전한가요?
일반적으로 제공업체의 공식 SDK가 서비스를 호출하는 가장 안전한 방법입니다. 공식 SDK는 유지 관리되고 보안 세부 사항도 처리합니다. 공식 패키지 레지스트리에서 설치하고 최신 상태를 유지하며, 이름이 비슷한 비공식 패키지는 주의하세요.