개발놀이터
JWT는 정말 stateless인가? 본문
보통 많은 애플리케이션이 JWT를 이용해서 인증을 하고있다고합니다. JWT를 한글이던 영어던 구글링을 해보면 모두같이 JWT를 stateless라고 소개하고 있습니다.
JWT를 쓰고 있던 와중 갑자기 문득 생각이 들었습니다. 이게 stateless야?
JWT는 정말 stateless인가?
왜 이런 의문이 들었냐면 access token (이하 AT)이 만료되는 순간 refresh token (이하 RT)를 확인해서 다시 AT를 재발급 하는 과정에서 의문이 들었습니다.
RT를 확인할 때 우리는 이 사용자와 관련된 즉, 이 사용자가 로그인할 때 만들었던 RT를 찾기위해 결국 사용자의 정보를 가지고 RT를 검색합니다.
이 RT는 데이터베이스에 오랜시간 저장되어있으면서 사용자에게 계속 AT를 발급해주죠.
그럼 결국 RT를 확인하기 위해서는 쿠키던 세션이던 stateful한 무언가가 있어야한다는 말입니다.
이런 관점 말고도 또 다른 관점에서 JWT는 stateful한 성격을 가지고 있습니다.
바로 데이터베이스입니다.
데이터베이스에서 RT를 계속 가지고 있다는 것은 사용자 인증을 stateful하게 유지하고 있다는 말이 되는 것이죠.
엥? 그럼 JWT는 stateful하다는거야?
JWT 그 자체는 stateless할 수 있죠. 하지만 구현을 하고 사용자 경험을 생각하면 결국 JWT는 stateful하게 구현할 수 밖에 없습니다.
그럼 쿠키베이스인 세션이랑 뭐가달라?
세션과 궁극적으로 다른 점은 인증을 서버에서 하냐 안하냐 그차이인 것 같습니다.
서버에서 인증을 해버리면 서버가 여러대면 정말 골치아파지니말이죠.
"쿠키에 아주 간단한 정보를 저장해두고 이 정보를 바탕으로 RT를 확인하여 AT를 재발급 해준다." 이렇게 함으로써 서버는 인증에서 분리를 시킬 수 있습니다.
말 그대로 인증을 서버에서 격리시키는거죠. 클라이언트는 하나뿐이고 서버는 여러대일테니 하나뿐인 클라이언트 (브라우저) 에 인증을 위한 정보를 담아두고 최종적인 인증인 RT를 위해서 서버는 중간다리 역할만 하는 것이죠.
마치며
JWT 중복로그인 방지를 구현하는 과정에서 문득 든 의문을 GPT와 가볍게 커피챗을 하면서 풀었습니다. 오랜만에 GPT한테 이론적인 내용을 물어보고 해결을 했네요. 뿌듯한 하루였습니다.
짧지만 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~
'기타 > GPT야 이것좀 알려줘' 카테고리의 다른 글
Apache Kafka (with Chat GPT) (0) | 2023.05.11 |
---|---|
Rust와 Go (0) | 2023.05.04 |