개발놀이터

JWT는 정말 stateless인가? 본문

기타/GPT야 이것좀 알려줘

JWT는 정말 stateless인가?

마늘냄새폴폴 2024. 6. 10. 22:02

보통 많은 애플리케이션이 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  (2) 2023.05.04