세션 기반 인증과 토큰 기반 인증은 사용자 인증을 처리하는 두 가지 다른 방법입니다.
각각의 방식은 웹 애플리케이션에서 사용자의 신원을 확인하고 추적하는 메커니즘을 제공합니다.
상태 유지
서버 측에서 사용자의 인증 상태를 유지합니다.
사용자가 로그인하면, 서버는 세션 ID를 생성하고 이를 쿠키에 저장한 후 사용자에게 반환합니다.
사용자가 다른 요청을 보낼 때마다 이 쿠키를 함께 전송하여 자신을 인증합니다.
서버 부하
사용자의 인증 정보와 세션 상태를 서버 메모리에 저장해야 하기 때문에 서버에 부하가 발생할 수 있습니다.
대규모 시스템에서는 세션 정보를 관리하기 위한 추가적인 인프라가 필요할 수 있습니다.
확장성
세션은 특정 서버에 종속될 수 있어 서버가 여러 대인 환경에서는 세션을 여러 서버 간에 동기화하는 작업이 필요할 수 있습니다.
이는 로드 밸런싱과 서버간의 세션 공유 같은 추가적인 설정을 필요로 합니다.
보안
쿠키를 통해 세션 ID가 전송되므로, 보안이 중요합니다.
쿠키에 보안 설정을 적절히 적용하지 않으면 세션 하이재킹과 같은 취약점에 노출될 수 있습니다.
무상태
서버 측에서 사용자의 상태를 저장하지 않습니다.
사용자가 로그인하면, 서버는 인증 토큰(JWT)을 생성하여 사용자에게 반환합니다.
이후 사용자는 요청의 헤더에 이 토큰을 포함시켜 서버에 전송하며, 서버는 매 요청마다 토큰을 검증합니다.
서버 부하 감소
사용자 상태를 서버에 저장할 필요가 없으므로, 서버 부하가 세션 기반 인증보다 적습니다.
이는 서버의 확장성과 성능에 긍정적인 영향을 미칩니다.
확장성
토큰은 무상태이므로 서버가 여러 대인 환경에서도 토큰을 다루는데 문제가 없습니다.
어느 서버든 토큰만 유효하다면 요청을 처리할 수 있기 때문에 확장성이 좋습니다.
보안
토큰은 일반적으로 암호화되고 서명되어 있어 안전하게 정보를 전송할 수 있습니다.
그러나 토큰의 저장과 전송도 주의를 요합니다.
예를 들어, 로컬 스토리지에 저장된 토큰은 XSS 공격에 취약할 수 있습니다.
교차 플랫폼 및 교차 도메인
토큰 기반 인증은 다양한 플랫폼과 도메인 간의 인증을 용이하게 합니다.
서버와 클라이언트가 다른 도메인에 있을 때 쿠키를 사용하는 것보다 토큰을 헤더에 넣는 것이 더 간단하고 안전합니다.
각각의 인증 방식은 사용 사례와 보안, 확장성, 유지 보수 등을 고려하여 선택되어야 합니다.
최근에는 마이크로서비스 아키텍처의 유연성과 확장성을 고려하여 많은 애플리케이션들이 토큰 기반 인증 방식을 채택하고 있습니다.