refresh token

조성현·2023년 2월 10일
0

주입식 교육의 폐해 jwt

  • JWT를 쓰는 의의는 세션과 달리 DB에 접근을 최소로 한다에 있다. 라는건 사실
    jwt를 쓰기로 결정하고 의미를 찾는 느낌.

jwt를 쓰면 db 접근을 덜하는게 맞다.
but? db 접근을 덜하는 방법이 jwt만 있느냐? 그건 아니다.
모든 블로그에서 JWT를 쓰는 의의는 세션과 달리 DB에 접근을 최소로 한다에 있다.라는 명제를 가지고 출발을 해버리는 바람에 이 사단이 일어난 것 같다.


기본부터 출발해보자.

세션이 필요하다.

  1. 메모리에 저장을 한다.
  2. 서버가 요청을 많이 받는다 -> 서버를 늘린다. -> 로드밸런서를 붙인다.
  • 로드밸런서가 해주는 라운드 로빈은 그냥 분배를 고르게 해주는 역할이다.
  1. 그렇다보니 인증이 됐다 안됐다 하는 문제가 발생한다.
  • 우리가 A서버로 로그인을 했는데 B서버로 요청을 보내면? 세션을 못찾는다.
  1. 그래서?! 서버끼리 공유된 세션 스토어가 필요해진다. 그 세션 스토어를 뭘로 쓸거냐가 문제인데 통상적으로 레디스나 RDB를 쓴다.
  2. 이렇게 하면 위 문제가 해결되지만 문제가 또 있다.

트래픽이 급격히 증가한다.

  1. 트래픽이 엄청나게 늘어났을 때 세션스토어를 RDB로 설정한 경우 부하가 씨게 걸린다.
  2. 이 문제를 어떻게 해결하냐?!?! -> 이게 관건이다.
  3. RDB 부하를 줄여야한다 -> RDB 스펙을 올린다(비쌈)
  4. 또 다른 방법으로 세션을 캐싱한다 라는게 있음
  • 보통은 이 방법을 많이 씀
  1. 또또 다른 방법이 JWT 같은 access token을 쓰는 것이다.
    -> 근데 자꾸 이게 정답인 것처럼 가르쳐서 온동네방네에 jwt밖에 없다.

요약

JWT를 쓰는 의의는 세션이랑 비교해서 DB 접근을 최소화하는 것이 아니라,
Oauth2에서 쓰듯이 여러 서비스에서 인증을 공유할 때에 조금 더 고려해볼만한 옵션이다.

하나의 인증수단으로 여러 서비스를 오가면서 사용하는 것에서는 JWT가 좀 더 적합한데...
ex) MSA

++

Session<->JWT 비교도 애매함
이렇게 해야되지 않을까
Session<->OAuth
text<->JWT

profile
맛있는 음식과 여행을 좋아하는 당당한 뚱땡이

0개의 댓글