인증 모드 — External vs Embedded
Deplite와 통신하는 모든 클라이언트(REST, SDK, GitHub Actions, 자체 Agent)는 두 가지 인증 모드 중 하나로 동작해요.
어떤 트랙을 쓰든 이 구분은 동일하게 적용돼요.
한눈에 비교
| External | Embedded | |
|---|---|---|
| 방향 | 내 시스템 → Deplite | Deplite → 내 시스템 |
| 역할 | Deplite를 호출하는 쪽 | Deplite의 작업 노드가 되는 쪽 |
| 인증 자격 | API 토큰 (dpl_...) | 1회용 설치 코드 (en_...) → 공개·개인 키쌍 |
| 인증 헤더 | Authorization: Bearer dpl_... | X-Agent-Id, X-Timestamp, X-Nonce, X-Signature |
| 키 보관 | 호출자 측 안전 저장소 | 호출자 측 안전 저장소 (SDK는 저장하지 않음) |
| 회전 | 대시보드에서 Rotate, 평문 재배포 | 디바이스 재등록 (1회용 설치 코드 재발급) |
| 대표 사용처 | 백엔드, CI, 운영 콘솔, 자동화 스크립트 | 키오스크, 무인 단말기, IoT, 자체 Agent |
External 모드
내 시스템에서 Deplite API를 호출하는 모드예요.
가장 흔히 쓰이는 형태로, REST API, 모든 SDK의 호출 기능, GitHub Actions가 모두 이 모드를 사용해요.
사용 흐름
- 대시보드 API 토큰에서 토큰 발급
- 발급 직후 한 번만 보이는 평문 토큰(
dpl_...)을 안전한 곳에 저장 - 모든 요청에
Authorization: Bearer dpl_...헤더 첨부
토큰 스코프
토큰 발급 시 두 가지 스코프 중 필요한 것을 선택해요.
| 스코프 | 권한 |
|---|---|
trigger | 지정한 trigger ID들만 호출 가능 |
storage | 지정한 storage binding에 대해 read/write/delete |
같은 토큰에 여러 스코프를 함께 줄 수도 있어요.
토큰은 환경별·용도별로 분리해서 발급하는 걸 추천드려요.
회전과 회수 관리가 훨씬 수월해져요.
옵션 (선택)
| 옵션 | 설명 |
|---|---|
rateLimit | 분·시간·일당 호출 제한 |
expiresAt | 토큰 만료 시각 |
allowedRefs | 워크플로우 측에서 허용할 git ref 패턴 제한 (트리거 단위) |
Embedded 모드
내 앱·기기가 Deplite의 작업 노드가 되는 모드예요.
공식 deplite-agent 바이너리뿐 아니라, SDK의 Embedded 기능을 쓰면 일반 앱 안에도 Agent를 심을 수 있어요.
사용 흐름
- 대시보드 에이전트 → 에이전트 추가에서 1회용 설치 코드(
en_...) 발급 - 앱(또는 Agent 바이너리)이 첫 실행 시 설치 코드로 enrollment 호출
- 서버가 Agent에게 고유 ID(
ag-...)를 발급, Agent는 자체 키쌍을 디바이스 안전 스토리지에 보관 - 이후 모든 요청은 서명된 헤더로 인증
요청 서명, 서버가 보내는 deploy 이벤트의 검증, 재생 공격 방지에 필요한 nonce·timestamp 체크는 모두 SDK 또는 공식 Agent 바이너리가 내부에서 처리해요.
호출 측 코드에서 직접 서명을 만들 일은 없어요.
트랙별 모드 매핑
| 트랙 | External | Embedded |
|---|---|---|
| REST API | ✅ 기본 사용 | ✅ 자체 Agent 구현 시 |
| SDK (JS, Android, iOS, Flutter) | ✅ Deplite 클래스 | ✅ DepliteAgent 클래스 |
| GitHub Actions | ✅ 전용 (api-token) | ❌ 해당 없음 |
| Agent 바이너리 | ❌ 해당 없음 | ✅ 전용 |
관련 문서
최종 수정 일자: