Skip to content

Session 방식의 문제점 JWT 개선

김무건 edited this page Aug 26, 2023 · 1 revision

[문제점 및 이슈]

  1. 기존의 Session 방식은 상태관리를 서버측에 하여 Rest API의 Stateless 아키텍쳐를 위배됨
  2. 추가적인 확장을 생각하면 디바이스 마다 다른 세션의 동기화의 문제 발생
  3. JWT를 사용을 하였을 때 로그아웃, 보안을 위해 추가적인 기술이 필요

[원인 분석]

  1. Session을 사용하면 상태 관리를 서버에서 하여 Stateless 아키텍처에 적합하지 못하다.
  2. 현 시대는 많은 디바이스를 사용한다. 확장성을 고려하면 동기화에 어려움이 있고 Stateless 아키텍처에 적합하지 못한 Session 대신에 다른 방식을 도입
  3. JWT의 Access Token을 사용하여 로그인을 하였을 때 로그아웃과 탈취에 대한 문제가 발생
  4. Refresh Token을 DB에 저장하면 사용자 증가를 하였을 때 MySQL I/O 작업이 많아져 성능적으로 문제가 발생

[해결 방안]

  1. Session 대신에 JWT를 사용 및 추가적인 확장성을 고려를 하였을 때 디바이스 마다 JWT의 동기화가 필요없어 추가적인 리소스 필요없음
  2. Refersh Token을 도입하여 Access Token 기간을 짧게 설정, Refresh Token을 이용하여 만료가 되었을 때 Access Token을 재발급
  3. 로그아웃을 하면 DB의 Refresh Token을 삭제하고 Local Storage에 있는 Access Token을 삭제하여 로그아웃을 성공적으로 처리
  4. Refresh Token을 DB에 저장하면 데이터베이스 액세스가 많아지며 사용자가 동시에 로그인하려는 경우, DB에 대한 부하가 증가하고 성능 저하를 유발할 수 있다고 판단하여 In-Memory-DB인 Redis를 활용하여 데이터베이스 액세스를 줄이고 캐시 를 통해 기존의 문제를 해결
Clone this wiki locally