[javascript] Draft.js에서 텍스트 에디터의 자동 로그아웃 기능 추가하기

지금은 웹 애플리케이션에서 텍스트 편집기를 자주 사용하는데, 대표적으로 Facebook에서 개발한 Draft.js가 많이 사용됩니다. Draft.js는 리액트에서 텍스트 편집기를 구현할 때 유용한 라이브러리입니다.

그런데, 텍스트 편집기와 같은 웹 애플리케이션은 보안 문제로 인해 일정 시간 동안 사용자가 비활성화되면 자동으로 로그아웃되게 하는 것이 좋습니다. 이러한 자동 로그아웃 기능을 텍스트 편집기에 추가하는 방법을 살펴보겠습니다.

  1. Session Timeout 설정하기 먼저, 텍스트 편집기 내에서 사용자의 비활성 시간을 추적하기 위해 세션 타임아웃 값을 설정해야 합니다. 이 값을 설정하기 위해 다음과 같이 코드를 작성합니다.
const SESSION_TIMEOUT = 300000; // 5분

let sessionTimer;

function startSessionTimer() {
  sessionTimer = setTimeout(logout, SESSION_TIMEOUT);
}

function resetSessionTimer() {
  clearTimeout(sessionTimer);
  startSessionTimer();
}

function logout() {
  // 로그아웃 로직 실행
  // 예: API를 통해 로그아웃 요청 보내기
}

위 코드에서 SESSION_TIMEOUT 변수는 세션 타임아웃 값을 설정합니다. 현재는 5분으로 설정되어 있습니다. startSessionTimer 함수는 사용자의 비활성 시간을 추적하고, resetSessionTimer 함수는 타이머를 재설정합니다. logout 함수는 로그아웃 로직을 처리하는 함수입니다. 이 함수에서는 예를 들어 API를 통해 로그아웃 요청을 보낼 수 있습니다.

  1. 사용자 동작 감지하기 다음으로, 사용자의 동작을 감지하여 세션 타이머를 재설정해야 합니다. 사용자의 동작은 텍스트 편집기에서 이루어지는 것이므로 Draft.js의 Editor 컴포넌트의 이벤트를 활용할 수 있습니다. 다음과 같이 코드를 수정합니다.
<Editor
  // ...기존 코드...
  onFocus={resetSessionTimer}
  onKeyPress={resetSessionTimer}
  onMouseMove={resetSessionTimer}
/>

위 코드에서 onFocus, onKeyPress, onMouseMove 이벤트 핸들러를 추가하여 사용자의 동작을 감지하고 resetSessionTimer 함수를 호출합니다. 이렇게 하면 사용자의 동작이 감지될 때마다 세션 타이머가 재설정됩니다.

  1. 자동 로그아웃 구현 확인하기 이제 텍스트 편집기에서 일정 시간 동안 아무 동작이 없을 경우 자동으로 로그아웃되는 기능을 확인해 볼 수 있습니다. 텍스트 편집기를 사용하는 동안 일정 시간 동안 아무런 동작을 하지 않으면 logout 함수가 호출되어 로그아웃 처리가 진행될 것입니다.

이렇게 함으로써, Draft.js를 사용한 텍스트 편집기에 자동 로그아웃 기능을 추가할 수 있습니다. 사용자의 비활성 시간을 추적하여 일정 시간이 지난 후 자동으로 로그아웃되도록 하는 것은 보안 및 개인정보 보호 측면에서 매우 중요한 기능입니다.