Development Study/Backend

[Backend] 로그인 양대 산맥, JWT와 Session 중 무엇을 선택해야할까?

  • -
728x90

결론부터 말해보자면 JWT를 많이 사용합니다.

그 이유 중 하나가 세션을 쓰는 방식 자체가 확장성이 있는 구조가 아니기 때문입니다.

 

 

세션과 JWT, 이 두 방법은 어떤 차이가 있는지 알기쉽게 설명 해보도록 하겠습니다.

 


 

세션(Session), 고속도로 일반 결제 창구

세션 방식을 사용하는 것은 고속도로의 일반 결제창구를 이용하는 것과 유사합니다.

운전자가 창구에 도착하면 요금을 납부하고, 차량이 정상적으로 통행료를 납부했음을 확인하기 위해 입출구 정보가 기록됩니다.

이 기록은 서버의 메모리에 저장되며, 차량이 고속도로를 빠져나갈 때까지 유지됩니다.

 

이 방식은 안전하지만, 차량이 많아질수록 결제 창구에서 대기하는 차량이 많아지고, 이로 인해 부하가 발생합니다.

세션 인증 방식(좌), 고속도로 일반 결제창구 방식(우)

 


 

JWT(JSON Web Token), 하이패스

반면에, JWT는 고속도로의 하이패스 시스템과 유사합니다.

운전자가 하이패스 장치를 설치하면, 결제창구를 통과할 때 마다 자동으로 통행료가 결제됩니다.

이 하이패스 장치는 운전자의 정보와 통행료 정보가 미리 저장되어 있어, 창구를 통과하는 순간에 빠르게 처리됩니다.

이러한 방식은 효율적이며, 서버의 메모리 부하도 줄일 수 있습니다.

 

하지만, 하이패스 장치가 도난당하거나 잘못된 손에 넘어가면 문제가 발생할 수 있습니다.

 

따라서 이를 방지하기 위해 일정 시간이 지나면 자동으로 만료되도록 설정하고,

새로운 토큰으로 갱신하는 방법(Refresh 토큰)을 사용합니다.

JWT 기반 인증 방식(좌), 하이패스 방식(우)

 


 

+ 쿠키(Cookie), 화물 차량용 하이패스

마지막으로, 쿠키는 웹 브라우저에서만 사용할 수 있는 기능입니다.

이를 고속도로의 특정 차량만이 사용할 수 있는 특별한 하이패스 장치로 생각할 수 있습니다.

반면에 JWT는 모든 차량이 사용할 수 있는 범용적인 하이패스 장치와 같습니다.

따라서 모바일 애플리케이션 같은 다양한 환경에서는 JWT를 사용한 인증 방식이 더 효과적입니다.

 


 

정리

  1. 세션 기반 인증
    •  사용자가 로그인하면 서버는 사용자의 세션 정보를 저장하고 사용자에게 세션 ID를 부여합니다.
    • 이 세션 ID는 쿠키에 저장되어 사용자의 브라우저와 서버 사이에서 주고받아집니다.
    • 사용자가 다음 페이지를 요청할 때마다, 쿠키에 저장된 세션 ID가 서버에 전달되어 사용자의 인증 정보를 확인합니다.
    • 이 방식은 마치 고속도로에서 차량이 통행료를 납부하고 통행을 위한 입출구 정보를 받는 것과 유사합니다.
  2. JWT 기반 인증
    • 사용자가 로그인하면 서버는 사용자의 정보를 바탕으로 JWT를 생성하고 이를 사용자에게 전달합니다.
    • 사용자는 이 토큰을 저장하고, 서버에 요청을 보낼 때마다 토큰을 함께 전달하여 자신을 인증합니다.
    • 이 방식은 마치 고속도로에서 차량이 하이패스 장치를 통해 자동으로 통행료를 결제하고 통행하는 것과 유사합니다.

세션 기반 인증은 서버의 메모리 부담이 있지만, JWT 기반 인증은 토큰의 보안 문제가 있을 수 있습니다.

따라서 보안 문제를 완화하기 위해 JWT의 유효기간을 짧게 설정하고, 새로운 토큰으로 갱신하는 방법(Refresh 토큰)을 사용합니다.

또한 쿠키는 웹 브라우저에서만 사용할 수 있으므로, 모바일 앱 같은 다른 환경에서는 JWT를 사용한 인증 방식이 더 적합합니다.

 


End

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.