02·개념·8분

세션과 토큰

HTTP는 기억이 없습니다. 브라우저가 보내는 모든 요청은 서버에 처음 보는 손님처럼 도착합니다. 그래서 앱에는 "1분 전에 로그인한 바로 그 사람"이라고 말할 방법이 필요합니다.

세션

로그인하면 서버는 세션을 만듭니다. "사용자 42는 오후 6시까지 로그인 상태"라는 기록입니다. 서버는 브라우저에 무작위 세션 ID를 쿠키로 넘겨주고, 이후 모든 요청에 이 쿠키가 따라와 서버가 ID를 조회합니다.

진실은 서버가 쥐고 있으므로 로그아웃이나 도난당한 세션 차단이 즉시 이루어집니다. 기록을 지우면 끝입니다.

토큰

토큰(보통 JWT)은 방향이 반대입니다. 조회용 키 대신 서명된 문장을 건네줍니다. "사용자 42, 역할 관리자, 오후 6시까지 유효." 서명 키를 가진 서버라면 데이터베이스 조회 없이 검증할 수 있어 여러 서버로 확장하기 좋습니다.

대가도 있습니다. 토큰은 로그아웃해도 만료될 때까지 유효합니다. 그래서 실제 시스템은 수명이 짧은 액세스 토큰(몇 분)과 취소할 수 있는 리프레시 토큰을 함께 씁니다.

DontCode에서는

앱의 인증 풀이 짧은 수명의 액세스 토큰을 발급하고 갱신, 쿠키 설정, 취소를 대신 처리합니다. 세션 길이와 로그인 유지는 코드가 아니라 설정입니다.

더 알아보기

이해도 확인

  1. 1.앱에 세션이나 토큰이 왜 필요할까요?

  2. 2.사용자가 로그아웃했지만 공격자가 미리 토큰을 복사해 두었습니다. 수명이 긴 일반 토큰이라면 어떻게 될까요?

  3. 3.즉시 취소하기 가장 쉬운 것은 무엇일까요?