본문으로 건너뛰기

dispose()

dispose()는 MonitorDog SDK detector instance가 사용하던 resource를 즉시 해제하는 함수입니다.

logout()이 사용자 세션 종료를 의미한다면, dispose()는 페이지 종료, component unmount, detector instance 폐기처럼 SDK instance를 더 이상 사용하지 않는 시점에 호출하는 정리 함수입니다.

역할

dispose()가 호출되면 SDK는 내부적으로 다음 작업을 수행합니다.

웹캠 detection 중지
-> 카메라 stream 정리
-> 탐지 worker 종료
-> pose tracker/runtime 상태 정리
-> SDK access token 제거

dispose()는 MonitorDog 서버에 logout activity event를 전송하지 않습니다. 사용자 로그아웃 기록이 필요한 흐름에서는 logout()을 먼저 호출한 뒤 dispose()를 호출하는 것이 좋습니다.

파라미터

dispose()는 별도 파라미터를 받지 않습니다.

detector.dispose();

logout()과 달리 Promise를 반환하지 않으므로 await할 필요가 없습니다.

사용 시점

dispose()는 detector instance의 lifecycle이 끝나는 시점에 호출합니다.

대표적인 사용 시점은 다음과 같습니다.

  • React component unmount
  • 사용자가 MonitorDog SDK가 동작하는 페이지를 벗어나는 경우
  • detector instance를 새로 만들기 전에 기존 instance를 폐기하는 경우
  • login() 또는 logout() 실패 후 resource를 확실히 정리해야 하는 경우

예시:

useEffect(() => {
let disposed = false;

async function startDetector() {
const detector = await MonitorDogDetector.init({
apiBaseUrl: "https://api.monitor.dog/v1",
sessionTokenProvider,
onDetect,
});

if (disposed) {
detector.dispose();
return;
}

detectorRef.current = detector;
await detector.login({ email: currentUser.email });
await detector.start();
}

void startDetector();

return () => {
disposed = true;
detectorRef.current?.dispose();
detectorRef.current = null;
};
}, [currentUser.email]);

반환값

dispose()는 값을 반환하지 않습니다.

detector.dispose();

반환 타입은 다음과 같습니다.

void

dispose()는 동기 함수입니다. 호출 즉시 SDK가 보유한 local resource 정리를 시작하며, 고객사 application code에서 별도 응답값을 처리할 필요는 없습니다.

logout()과의 차이

logout()은 사용자 세션 종료 흐름입니다. 가능하면 logout activity event를 전송한 뒤 SDK token과 session 상태를 정리합니다.

dispose()는 resource 해제 흐름입니다. 서버 logout API나 MonitorDog logout event 전송을 시도하지 않고, 현재 detector instance가 사용 중인 카메라, worker, token 상태를 정리합니다.

사용자 로그아웃 버튼처럼 세션 종료 의미가 있는 경우에는 다음 흐름을 권장합니다.

try {
detector.stop();
await detector.logout();
} finally {
detector.dispose();
}

단순히 페이지가 사라지거나 component가 unmount되는 경우에는 dispose()만 호출해도 됩니다.

실패 처리

dispose()는 네트워크 요청을 수행하지 않는 동기 정리 함수입니다.

일반적인 사용 흐름에서는 별도 try/catch가 필요하지 않습니다. 다만 logout()과 함께 사용하는 경우에는 logout() 실패 여부와 관계없이 resource를 정리할 수 있도록 finally에서 호출하는 것이 좋습니다.

주의사항

  • dispose()는 고객사 웹사이트 session을 로그아웃하지 않습니다.
  • dispose()는 MonitorDog logout activity event를 전송하지 않습니다.
  • 사용자 로그아웃 기록이 필요한 경우 stop()logout()을 먼저 호출하세요.
  • dispose() 호출 후 같은 detector instance를 재사용하기보다 init()으로 새 instance를 생성하는 흐름을 권장합니다.
  • React unmount나 route change에서는 detector reference를 null로 비워 중복 정리를 피하는 것이 좋습니다.