메인 콘텐츠로 건너뛰기
Didit JavaScript SDK는 사용자 경험을 완전히 제어하면서 웹 애플리케이션에 인증을 프로그래밍 방식으로 연동할 수 있는 방법을 제공합니다.

주요 기능

  • 간단한 API - 싱글턴 패턴과 사용하기 쉬운 메서드
  • 유연한 연동 - UniLink URL을 직접 사용하거나 백엔드를 통해 세션을 생성
  • 반응형 - 데스크톱과 모바일 브라우저에서 모두 작동
  • 사용자 지정 가능 - 스타일과 동작을 위한 구성 옵션
  • 다양한 형식 - ESM, CommonJS, UMD 빌드 제공
  • TypeScript 지원 - 전체 타입 정의 포함
  • 모달 및 인라인 모드 - 모달 오버레이 또는 인라인 삽입 중에서 선택
  • 이벤트 콜백 - 인증 진행 상황(시작됨, 단계 완료, 완료됨)에 대한 실시간 이벤트
  • 상태 관리 - 사용자 지정 UI를 위해 SDK 상태를 관찰

설치

NPM/Yarn

CDN (UMD)

최신으로 게시된 npm 릴리스는 0.5.1입니다. 0.5.0에서 DiditSdk.shared.submitEvent()가 추가되었습니다(이벤트 제출 참조). 0.5.1에서는 호스팅 플로우가 SDK 안에서 디지털 ID 지갑에 사용자의 ID를 요청할 수 있으며, 실패한 실행은 errorMessage와 함께 error 상태로 유지됩니다. 0.4.0에서 네이티브 SDK에 이미 있던 카메라 옵션이 추가되었으며, 여기에는 얼굴 촬영을 후면 카메라로 여는 defaultLivenessCamera도 포함됩니다(카메라 옵션 참조).

설치된 버전 확인

설치된 릴리스에 대해서는 패키지 관리자가 여전히 기준입니다.
런타임 내보내기를 확인할 수도 있습니다.
0.3.1부터 이 내보내기는 모든 JavaScript 형식(ESM, CommonJS, UMD, 압축된 UMD)과 TypeScript 선언에서 패키지 버전을 기반으로 생성되므로 설치된 릴리스와 항상 일치합니다. 0.3.0 이하 버전은 설치된 버전과 관계없이 이 내보내기에서 0.2.1을 보고합니다. 이 버전들에서는 npm list 또는 잠금 파일을 사용하십시오.

Vanilla JavaScript

ES Modules / TypeScript

Script Tag (UMD)


프레임워크 예제

SDK 웹 예제

React, Angular, Svelte, Next.js, Nuxt, Vue 등 여러 프레임워크에 대한 예제와 문서를 제공합니다.

연동 방법

SDK를 연동하는 방법은 두 가지입니다. Didit Console에서 워크플로의 UniLink URL을 직접 사용합니다. 백엔드가 필요하지 않습니다.
Didit Console → 내 워크플로 → 링크 복사에서 UniLink URL을 가져오십시오. 생성된 session_id는 이벤트를 통해 전달됩니다. 이벤트 참조 보기

방법 2: 백엔드 세션 (프로덕션에 권장됨)

백엔드가 Didit API를 통해 세션을 생성하고 호스팅 인증 URL을 반환합니다. 이 방식에서는 vendor_data, 세션별 callback, metadata를 직접 제어할 수 있으며, 사용자가 프런트엔드에 도달하기 전에 세션을 미리 생성할 수 있습니다. 자세한 내용은 Create Session API 참조를 확인하십시오. 백엔드 (Node.js / Express)
프런트엔드
세션 생성 응답의 필드 이름은 url입니다(Create Session OpenAPI 스키마 참조). 이 값을 startVerification({ url })에 그대로 전달하십시오.

구성

전체 DiditSdkConfiguration 인터페이스는 아래의 TypeScript 타입 정의를 참조하십시오.

카메라 옵션

카메라 옵션은 @didit-protocol/sdk-web 0.4.0 이상 버전이 필요합니다.
웹 SDK는 네이티브 SDK와 동일한 네 가지 카메라 옵션을 제공합니다. 기본적으로 문서 촬영은 후면 카메라를, 얼굴(라이브니스) 촬영은 전면(셀피) 카메라를 엽니다. 두 단계 모두 카메라가 둘 이상인 기기에서는 촬영 화면 안에서 카메라를 전환할 수 있는 버튼이 표시됩니다. 키오스크처럼 얼굴 촬영을 후면 카메라로 열어야 하거나, 운영자가 기기를 들고 인증 대상자를 비추는 경우에는 defaultLivenessCamera: 'back'을 설정하세요.
  • 허용되는 렌즈 값은 'front'와 'back'뿐입니다. 그 밖의 값은 무시되며, boolean이 아닌 전환 버튼 플래그도 무시됩니다.
  • 요청한 카메라가 없는 기기는 가지고 있는 카메라를 그대로 사용합니다. 예를 들어 'back'을 요청한 노트북은 웹캠을 계속 사용합니다. 카메라가 하나뿐인 기기에서는 플래그 값과 관계없이 전환 버튼이 표시되지 않습니다.
  • 라이브니스 옵션은 수동형 라이브니스 검사에만 적용됩니다. 능동형 라이브니스에는 영향을 주지 않습니다.
  • SDK는 이 옵션을 인증 URL의 쿼리 파라미터인 document_camera, liveness_camera, document_camera_switch, liveness_camera_switch로 인증 페이지에 전달합니다. SDK를 거치지 않고 인증 URL을 직접 열 경우에는 직접 설정해야 합니다. 쿼리 문자열이 없는 URL에는 ?liveness_camera=back을, 이미 파라미터가 있는 URL에는 &liveness_camera=back을 덧붙이세요. 두 경우를 모두 처리하려면 URL API로 설정할 수 있습니다:

이벤트 제출

DiditSdk.shared.submitEvent()는 최종 사용자 이벤트(가입, 로그인, 로그인 실패, 로그아웃, 비밀번호 재설정, MFA, 기기 변경)를 Didit의 이벤트 모니터링으로 전송하기 위해 대기열에 넣습니다. 백엔드에서 해당 사용자의 모니터링 토큰을 발급하면, SDK가 기기 핑거프린트와 함께 이벤트를 일괄 전송합니다. API 키는 절대 브라우저에 노출하지 마세요.
토큰, 이벤트 필드, 전송 방식에 대한 내용은 SDK 이벤트 제출을 참고하세요.

모달 크기 조정 및 스크롤

아래 크기 조정 동작은 0.3.1 이상 버전이 필요합니다. 0.3.0 이하 버전에서는 짧은 데스크톱 및 가로 방향 뷰포트에서 인증 흐름이 잘릴 수 있습니다.
모달 모드의 최대 너비는 500px, 최대 높이는 700px입니다. 높이가 낮은 데스크톱 및 가로 방향 뷰포트에서는 iframe이 보이는 뷰포트의 90%를 차지합니다. 인증 흐름은 iframe 내부에서 스크롤되므로, 모달 뒤의 페이지가 잠겨 있어도 모든 단계에 접근할 수 있습니다. SDK는 동적 뷰포트 단위를 지원하는 브라우저에서는 dvh를 사용하고, 이를 지원하지 않는 구형 브라우저에서는 vh로 대체합니다. 너비가 540px 이하이면 모달이 보이는 뷰포트 전체를 채웁니다. 닫기 버튼과 종료 확인 창은 모달 안에 계속 표시됩니다.

새로 디자인된 인증 흐름

이 섹션의 내용은 아직 배포되지 않은 0.5.0 버전부터 적용됩니다. 업그레이드하기 전까지 모달은 위에서 설명한 크기를 유지합니다.
0.5.0 버전부터는 페이지가 didit:layout 메시지로 레이아웃을 보고하면, 모달이 새로 디자인된 인증 흐름에 맞춰 크기를 조정합니다.
  • 초기 크기(0.5.0 버전부터): 페이지가 레이아웃을 보고하기 전까지, 그리고 레이아웃을 보고하지 않는 페이지에서는 모달이 기존 최대 크기인 500px × 700px을 유지합니다. 짧은 창에도 맞게 조정되며, 540px 이하에서는 전체 화면이 됩니다.
  • 닫기 버튼(0.5.0 버전부터): 페이지 상단 바 위에 표시되는 지름 44px의 원형 버튼입니다. 페이지의 밝은 테마 또는 어두운 테마를 따르며, 오른쪽에서 왼쪽으로 쓰는 언어에서는 왼쪽으로 이동합니다.
  • 임베디드 모드(0.5.0 버전부터): 이전과 같이 호스트 요소를 계속 채웁니다(임베디드 모드 참고).
  • 인증 URL(0.5.0 버전부터): SDK가 sdk_presentation(modal 또는 embedded)을 추가하고, 모달에서는 showCloseButton 값에 따라 sdk_close_button(true 또는 false)도 추가합니다. 이를 통해 페이지가 자신이 어떻게 표시되는지 알 수 있습니다.
  • 이벤트(0.5.0 버전부터): SDK가 didit:layout을 직접 처리하며, 이 메시지를 onEvent로 전달하지 않습니다.
별도로 설정할 것은 없으며, 기존 옵션도 모두 그대로 작동합니다.

임베디드 모드

임베디드 모드는 모달의 500px × 700px 최대 크기 제한을 사용하지 않습니다. SDK는 호스트 요소의 콘텐츠 영역을 채우므로, 해당 요소에 명시적이거나 계산된 높이를 지정하세요:
호스트에 계산된 높이가 없으면 임베디드 iframe에도 사용할 수 있는 높이가 생기지 않습니다. 레이아웃이 바뀌면 호스트 크기도 함께 조정하세요. SDK는 이후에도 호스트 영역을 자동으로 채웁니다.

인증 결과

SDK는 세 가지 유형의 결과를 반환합니다:

완료됨

인증 플로우가 완료되었습니다(승인됨, 대기 중, 거부됨).
TypeScript 타입은 'Approved' | 'Pending' | 'Declined'로 선언되어 있지만, 이 값은 호스팅 플로우의 세션 상태에서 그대로 전달됩니다. In Review와 같은 다른 상태도 받을 수 있습니다. Pending은 플로우가 상태를 보고하지 않았을 때 SDK가 사용하는 기본값입니다. status는 참고 정보로만 취급하고, 최종 결정은 webhook을 기준으로 하세요.

취소됨

사용자가 인증 모달을 닫았습니다. sessionId를 이미 알고 있는 경우 session이 포함됩니다(iframe이 세션 ID를 보고하기 전에 사용자가 취소한 경우에는 undefined일 수 있습니다).

실패

인증 중 오류가 발생했습니다.

상태 관리

커스텀 UI를 위해 SDK 상태를 관찰할 수 있습니다:

API 레퍼런스

DiditSdk.shared

싱글톤 SDK 인스턴스입니다.

메서드

속성

콜백


세부 이벤트

onEvent 콜백으로 인증 진행 상황을 추적합니다:

이벤트 참조

연결 끊김

사용자의 연결이 끊어지면 인증 페이지는 단계를 로딩 상태로 남겨 두는 대신 “No internet connection” 화면을 표시합니다. 이 페이지는 백그라운드에서 계속 연결을 확인하며, Didit에 다시 연결되는 즉시 화면을 스스로 닫고 사용자는 있던 단계에서 이어서 진행합니다. SDK의 모달이나 iframe 안에서는 이 화면에 인증 종료 버튼도 표시됩니다. 이 버튼을 누르면 페이지가 error: "network_error"가 담긴 didit:error를 보낸 다음 didit:cancelled를 보내고, SDK는 모달을 닫고 type: "cancelled"와 함께 onComplete를 호출합니다. 버전 0.5.0부터 페이지의 didit:layout 메시지는 모달 크기를 조정하며 onEvent에는 전달되지 않습니다. 대신 자체 iframe으로 페이지를 임베드하는 경우에는 didit:layout으로 iframe 크기 조정을 참고하세요.

단계 값

step 필드는 다음 값 중 하나일 수 있습니다:
  • document_selection - 문서 유형 선택
  • document_front - 문서 앞면
  • document_back - 문서 뒷면
  • face - 얼굴/라이브니스 인증
  • email - 이메일 인증
  • phone - 전화번호 인증
  • poa - 주소 증명
  • questionnaire - 설문지 단계

채널 값

code_sent의 channel 필드는 다음 값일 수 있습니다:
  • email - 이메일로 코드 전송
  • sms - SMS로 코드 전송
  • whatsapp - WhatsApp으로 코드 전송

코드 길이

code_sent의 codeSize 필드는 OTP 코드의 길이를 나타냅니다(예: 4자리 또는 6자리).

TypeScript 타입

마지막 수정일 2026년 11월 7일