SDK
Software Development Kit.
— 해당 타겟 환경에서 애플리케이션의 개발, 테스트, 컴파일, 배포까지 전사 라이프사이클을 보장해 주기 위해 벤더가 공식 공급하는 전용 도구 일체
그냥 가볍게 코드 몇 줄 짜서 빌드해 보고 싶었을 뿐인데, 용량 수십 기가바이트(GB)짜리 무거운 개발 통합 프로그램과 하드웨어 콘솔을 로컬 컴퓨터에 깔도록 강요하는 전형적인 코딩 종합 세트. 하지만 이 거대 플랫폼 벤더가 한 자리에 모아둔 공식 SDK가 깔려 있지 않은 내 깡통 컴퓨터는, iOS나 안드로이드 앱의 기계어 바이너리를 단 1줄도 빌드해 내지 못하는 참담한 기둥 장치(...)
1. 개요
소프트웨어 개발 키트(Software Development Kit)의 약자로, 특정 플랫폼(예: 안드로이드, iOS, Windows), 하드웨어 장치, 또는 클라우드 서비스(예: AWS, Firebase) 위에서 돌아가는 프로그램을 개발하고 정상 작동시키기 위해 필요한 모든 소프트웨어 도구를 단 한 통에 통째로 때려 박은 종합 개발 선물 상자이다. 개발에 사용되는 API 명세와 라이브러리들은 물론이고, 소스코드를 바이너리로 구워내는 컴파일러, 문제 추적용 디버거, 플랫폼 가상 실행 장치(에뮬레이터) 등 시스템 수준의 온갖 부속품들을 단 한 번의 인스톨만으로 전사 가동할 수 있게 보장해 준다.
2. API, 라이브러리와 SDK의 구조적 포함 관계
주니어 개발자들이 가장 골머리를 썩이며 헷갈려 하는 3대 용어의 상속 포함 관계는 명확히 정리된다.
- API: 프로그램 간 대화하기 위한 순수한 '소통 규약 창구 규칙(약속)' 자체를 뜻한다. 물리적인 알맹이 코드가 아니다.
- 라이브러리: 이 API 규칙에 부합하여, 실제 로직을 클래스나 함수로 예쁘게 코딩해 놓은 '실제 작동하는 기계 코드 부품 파일'이다.
- SDK: 이 라이브러리를 포함해 해당 플랫폼 개발에 영혼처럼 필요한 컴파일러, 디버거, 가상 스마트폰(에뮬레이터), 문서 튜토리얼, 보안 인증서 일체를 성벽처럼 감싸 안고 있는 거대한 '종합 선물 패키지 상자'이다. 즉, SDK라는 거대한 성곽 안에 수많은 라이브러리 부품들이 진열되어 있고, 그 부품을 사용해 통신하기 위한 버튼 규약들이 바로 API이다.
3. 대표적인 실무 필수 SDK와 BaaS의 구세주
우리가 모바일 코딩을 할 때 설치하는 Android SDK, iOS SDK가 플랫폼 수준의 물리적 시조새다. 이외에도 현대 클라우드 기반 백엔드 서비스(BaaS)인 파이어베이스(Firebase)나 AWS는 자사 클라우드 서버에 접속해 유저 가입을 시키고 데이터를 긁어오는 복잡한 웹 소켓 보안 프로토콜을 개발자가 일일이 다이렉트로 구현하지 않도록, 전용 클라우드 Firebase SDK를 친절히 공개한다. 개발자는 내 앱 프로젝트에 이 공식 SDK를 한 줄 가볍게 임포트하고 단지 firebase.auth().signIn()이라는 고수준 함수 호출 단 한 줄만 작성하면, 물밑에서 보안 핸드셰이크와 분산 데이터 통신이 우주적으로 0.1초 만에 실행되는 혁명을 체험할 수 있다.1
4. 관련 밈 및 드립
4.1. 기가바이트(GB) 용량 깡패와 IDE 수난사
애플 모바일 앱을 만들거나 안드로이드 실무 개발을 시작하기 위해 Xcode나 Android Studio 등의 IDE와 전용 공식 SDK 세트를 클릭해 설치하는 순간, 집안 인터넷 대역폭을 전사적으로 빨아들이며 수십 기가바이트(GB)급 SDK 데이터와 수많은 하드웨어 이미지 패키지들이 쏟아져 들어와 순식간에 내 가벼운 맥북의 SSD 용량을 영혼까지 빨아먹고 빨간불을 켜버리는 용량 테러의 끝판왕이다.(...) 전산실에서는 'SDK는 단순한 코드 모음이 아니라, 내 컴퓨터 수명을 갉아먹고 기가바이트를 청소해 가는 하드웨어 깡패'라는 눈물겨운 저용량 넋두리 밈이 실시간으로 공유되곤 한다.
5. 여담
- 오픈소스 기여가 거의 불가능한 철저한 벤더 독점: 라이브러리나 프레임워크는 깃허브 오픈소스 저장소에 이슈를 제기하고 직접 풀 리퀘스트(PR)를 보내 고쳐 쓸 수 있지만, OS 제조사가 개발해 하드웨어 암호화 칩과 연동하여 배포하는 독점 SDK(iOS SDK 등)는 내부 코드가 철저하게 비공개(Closed Source)로 감춰져 있어 소스 수정이나 버그 기여가 원천 차단된다. 오직 제조사가 버그 패치 새 버전을 내려줄 때까지 기도하며 침착하게 기다려야만 한다.
- SDK 크기 다이어트와 트리 쉐이킹: SDK는 너무 방대하기 때문에 통째로 최종 바이너리 앱에 엮었다가는 앱 배포 용량이 우주 돌파하여 사용자들의 다운로드 거부 사태를 부른다. 이 때문에 모던 SDK 개발진은 최종 빌드 타임에 개발자가 안 쓰고 남겨둔 SDK 속 유령 함수들을 정교한 정적 분석으로 감지해 가지를 사정없이 쳐내 빌드 크기를 줄여주는 트리 쉐이킹(Tree Shaking) 기술을 피땀 흘려 유지하고 있다.
- 무가상화 컴파일의 열쇠: 크로스플랫폼인 플러터(Flutter)가 안드로이드와 iOS 앱을 단 하나의 소스로 찍어낼 수 있는 은밀한 비결도, 결국 내부 빌드 런타임 단계에서 로컬에 설치되어 있는 Android SDK 및 Xcode SDK 컴파일러와 다이렉트 교신하여 최종 네이티브 바이너리 기계어로 번역해 뱉어내기 때문이다.
6. 관련 문서
각주
-
실제로 이 BaaS/SaaS 연동 SDK 덕분에 오늘날 스타트업 개발자들은 거대한 인프라 보안 시스템이나 실시간 채팅 웹소켓 중계 서버를 손수 구축할 필요 없이, 단지 SDK가 내려준 마법의 편의성 함수 몇 개를 큐레이션해 조립하는 것만으로 단 하루 만에 글로벌 규모의 완성도 높은 서비스를 단숨에 론칭해 내는 압도적 기동력을 갖추게 되었다. ↩