Spring/Spring

세션 기반 인증과 토큰 기반 인증의 차이, 왜 다를까?

제주니어 2024. 12. 2. 23:23

 

 

웹 개발을 하다 보면 사용자 인증 방식을 선택해야 할 때가 있다.

주로 사용하는 방식은 두 가지인데, 바로 세션 기반 인증과 토큰 기반 인증이다.

각각의 방식이 어떤 차이를 가지는지, 그리고 어떤 상황에서 적합한지 알아보자.

 

세션 기반 인증: 서버가 기억하는 방식

세션 기반 인증은 서버가 '사용자 상태'를 기억하는 구조다. 사용자가 로그인하면 서버가 세션을 생성하고, 클라이언트는 세션 ID를 통해 인증된 상태임을 증명한다. 이 세션 ID는 일반적으로 쿠키에 담아 매 요청마다 서버에 전송된다.

  • 장점: 서버에서 사용자의 상태를 저장하므로 안정적인 인증을 유지할 수 있다.
    • 예를 들어, 사용자 로그아웃 시 서버에서 세션을 삭제해버리면 모든 접속이 끊어진다.
  • 단점: 서버에 세션 상태를 저장해야 하므로 서버에 부하가 갈 수 있다. 특히, 확장성이 중요한 시스템에서는 세션을 공유해야 하는 부담이 생긴다.

 

토큰 기반 인증: 클라이언트가 들고 다니는 방식

토큰 기반 인증은 서버가 클라이언트를 기억하지 않는 stateless 방식이다. 사용자가 로그인할 때 서버가 토큰을 생성하고 이를 클라이언트에 전달하며, 이후 요청마다 클라이언트가 이 토큰을 서버에 보내 인증을 진행한다. 일반적으로 JSON Web Token(JWT)을 사용하며, 토큰 자체에 필요한 정보가 포함된다.

  • 장점: 서버에 상태를 저장하지 않으므로 확장성이 뛰어나다. 클라우드 환경에서 여러 서버가 사용자 요청을 분산 처리할 때도 문제없다. 
  • 단점: 토큰이 클라이언트에 저장되기 때문에 탈취 위험이 존재하며, 따라서 보안에 신경 써야 한다.

두 방식의 차이 요약

특성 세션 기반 인증 토큰 기반 인증
서버 상태 저장 여부 O X
확장성 상태 공유가 필요해 확장에 불리함 stateless 로 확장에 유리
보안 위험 세션 하이재킹 위험 토큰 탈취 위험
갱신 방식 세션 만료 시간 설정 토큰 만료 시간 설정 및 갱신 필요

 

결론: 어떤 상황에서 무엇을 선택해야 할까?

세션 기반 인증은 사용자 상태 관리를 세밀하게 제어해야 하는 시스템에서 유리하다. 반면, 토큰 기반 인증은 확장성과 성능이 중요한 클라우드 환경에서 적합하다. 사용자의 특성과 시스템 요구사항을 고려해 두 가지 방식 중 가장 적합한 방식을 선택하는 것이 중요하다.

'Spring > Spring' 카테고리의 다른 글

@Transactional 사용하기 전, Transaction 이랑 먼저 친해지기  (0) 2024.10.27
Spring  (0) 2022.08.27