-
Notifications
You must be signed in to change notification settings - Fork 0
Session 방식의 문제점 JWT 개선
김무건 edited this page Aug 26, 2023
·
1 revision
[문제점 및 이슈]
- 기존의 Session 방식은 상태관리를 서버측에 하여 Rest API의 Stateless 아키텍쳐를 위배됨
- 추가적인 확장을 생각하면 디바이스 마다 다른 세션의 동기화의 문제 발생
- JWT를 사용을 하였을 때 로그아웃, 보안을 위해 추가적인 기술이 필요
[원인 분석]
- Session을 사용하면 상태 관리를 서버에서 하여 Stateless 아키텍처에 적합하지 못하다.
- 현 시대는 많은 디바이스를 사용한다. 확장성을 고려하면 동기화에 어려움이 있고 Stateless 아키텍처에 적합하지 못한 Session 대신에 다른 방식을 도입
- JWT의 Access Token을 사용하여 로그인을 하였을 때 로그아웃과 탈취에 대한 문제가 발생
- Refresh Token을 DB에 저장하면 사용자 증가를 하였을 때 MySQL I/O 작업이 많아져 성능적으로 문제가 발생
[해결 방안]
- Session 대신에 JWT를 사용 및 추가적인 확장성을 고려를 하였을 때 디바이스 마다 JWT의 동기화가 필요없어 추가적인 리소스 필요없음
- Refersh Token을 도입하여 Access Token 기간을 짧게 설정, Refresh Token을 이용하여 만료가 되었을 때 Access Token을 재발급
- 로그아웃을 하면 DB의 Refresh Token을 삭제하고 Local Storage에 있는 Access Token을 삭제하여 로그아웃을 성공적으로 처리
- Refresh Token을 DB에 저장하면 데이터베이스 액세스가 많아지며 사용자가 동시에 로그인하려는 경우, DB에 대한 부하가 증가하고 성능 저하를 유발할 수 있다고 판단하여 In-Memory-DB인 Redis를 활용하여 데이터베이스 액세스를 줄이고 캐시 를 통해 기존의 문제를 해결