클라이언트가 서버측에 JavaScript로 Ajax 요청을 보내면, 보통 브라우저에서는 서버로부터 받은 쿠키를 사용하여 세션 ID를 저장합니다.
그리고 브라우저는 이 세션 ID를 다음 요청에서 서버로 전달합니다.
하지만 이 방식은 다음과 같은 단점이 있습니다.
쿠키 사용 여부: 다른 도메인 간 요청이나 HTTP API 호출 같은 일부 상황에서는 쿠키를 사용할 수 없기 때문에 이 방식을 사용할 수 없습니다.
Scale-out을 위한 분산 환경에서 문제가 발생: 세션을 저장하는 기본적인 방법인 메모리에 저장된 세션을 사용하는 경우, 서버의 스케일 아웃이나 로드 밸런싱을 수행하는 경우 세션이 분산되어 문제가 발생할 수 있습니다.
메모리 부족: 서버 메모리에 저장된 세션 데이터가 너무 많으면 서버 성능에 영향을 미치거나 서버 자체가 다운될 수 있습니다.
따라서, 클라이언트 측에서 서버에 대한 요청을 할 때 매번 JWT를 포함시켜 보내고, 서버에서는 JWT를 이용하여 인증을 처리하면 됩니다.
이를 통해, 서버 측에서 세션 관리와 같은 부담을 줄일 수 있습니다.
또한, JWT의 bearer 인증 방식을 이용하면, 클라이언트에서 JWT를 포함시켜 요청을 보내면 서버에서는 JWT의 유효성만 검사하고, 별도의 인증 정보를 확인하지 않아도 됩니다.
이러한 이유로, JWT를 사용하면 세션 관리의 단점을 해결하고, 확장성과 보안성을 높일 수 있습니다.
JWT의 Bearer 인증 방식은 HTTP 헤더의 Authorization 필드를 이용하여 인증을 수행하는 방식입니다.
Bearer 인증 방식에서는 클라이언트가 인증 요청을 보낼 때, JWT 토큰을 HTTP 헤더의 Authorization 필드에 담아서 보내게 됩니다.
이때, JWT 토큰은 "Bearer " 문자열과 함께 Authorization 필드에 담겨서 전송됩니다.
서버는 이 JWT 토큰을 수신해서 유효성 검증을 수행하고, 인증이 성공하면 요청에 대한 응답을 반환합니다.
Bearer 인증 방식은 간단하면서도 확장성이 높아서, 대부분의 웹 애플리케이션에서 사용됩니다. 또한, JWT 토큰을 이용하기 때문에 세션 관리를 하지 않아도 되고, 로그인 상태 유지 문제를 해결할 수 있습니다.