summer.log

JWT vs 세션 본문

Web

JWT vs 세션

summer@! 2023. 7. 20. 10:52

JWT(Json Web Token)

  • JWT와 같은 토큰 인증은 stateless → 인증 정보를 클라이언트가 들고 있어 서버에서 토큰에 대한 통제가 어렵다.
  • 토큰은 발행과 함께 만료 기간이 정해지고, 토큰에 이미 새겨진 만료 기간은 변경할 수 없기 때문에 새로운 토큰을 발급해야 한다.
  • 새로운 토큰을 발급 받아도, 기존 토큰의 기간이 아직 남아있다면 기존 토큰 또한 유효하다. (같은 시간 대에 유효한 토큰이 2개 이상 될 수도)

세션

  • 세션은 의미없는 텍스트의 조합으로 식별자를 발행한다.
  • stateful → 서버에서 통제 가능
  • 만료 시간이나 사용자 식별 정보 등은 서버(DB)에서 관리되며, 필요 시 서버에서 연장 또는 만료할 수 있다.

 

 

처음에는 별 생각 없이 최신 기술인 JWT를 사용하려고 했으나 페이지 요구사항에 따라 세션을 사용하는것이 더 적절하다는 생각이 들었다. API 요청이 발생하는 경우 타이머(로그인 유효시간)를 60분으로 초기화해야 했기 때문이다. 

이 경우 JWT는  요청이 발생할 때마다 서버에서 매번 JWT 토큰을 재발행하게 되는데, 기존의 토큰이 아직 유효하기 때문에 보안성에 좋지 않고 토큰을 사용하는 의미가 없어질 것이라고 생각되었다.

반면 세션은 요청을 받았을때 서버에서 해당 세션의 만료 시간을 DB에서 업데이트하면 되기 때문에 구현 및 사용하는 입장에서 매우 간편하다.

 

어떤 기술이든 장단점이 있으며, 요구사항에 맞춰 적절하게 사용하면 됩니다.

JWT는 최신 기술이고 세션은 낡은 기술이라고 생각할 필요는 없습니다.

 

라고 멘토님이 조언해주신게 기억이 남는다.

 

'Web' 카테고리의 다른 글

리액트 라우트 개선 과정  (0) 2023.07.20
리액트 폴더 구조 + Atomic Design  (0) 2023.07.19
CKEditor5 + 파일 업로드(React + Django) (1)  (0) 2023.07.19