[Web] JWT(JSON Web Token), 세션(Session) 차이

해피몬·2023년 7월 29일
post-thumbnail

JWT(JSON Web Token)

JWT는 JSON Web Token의 약자로, JSON 객체를 안전하게 전송하기 위한 토큰 기반 인증 방식입니다. 주로 클라이언트와 서버 간에 정보를 주고받는 데 사용됩니다. JWT는 자체적으로 서명된 토큰으로, 별도의 서버 저장소 없이 클라이언트에서 유효성을 검증할 수 있다는 특징이 있습니다.

JWT 구조
JWT는 크게 3부분으로 구성된 문자열입니다.

  • 헤더(Header): 토큰 타입과 해싱 알고리즘을 포함합니다.
  • 페이로드(Payload): 사용자 정보와 같은 클레임(Claim)을 담고 있습니다.
  • 서명(Signature): 헤더와 페이로드를 해싱하여 비밀 키로 서명한 값으로, 데이터 위조를 방지합니다.
헤더.페이로드.서명

작동 방식

1) 사용자가 로그인하면 서버에서 유효한 JWT를 생성해 클라이언트에 전송합니다.
2) 클라이언트는 이 토큰을 로컬 스토리지나 쿠키에 저장하고, 요청마다 토큰을 서버에 전송합니다.
3) 서버는 전달받은 토큰을 검증하여 사용자 인증을 확인합니다.

세션(Session)

세션은 서버 측에 사용자 정보를 저장하여, 서버에서 사용자 상태를 관리하는 인증 방식입니다. 사용자가 로그인하면 서버에서 세션을 생성하고, 클라이언트에 세션 ID를 발급합니다. 클라이언트는 이 세션 ID를 쿠키에 저장하고, 이후 요청마다 서버에 전송하여 사용자 상태를 유지합니다.

작동 방식

1) 사용자가 로그인하면 서버에서 세션을 생성하고 고유한 세션 ID를 부여합니다.
2) 세션 ID는 쿠키에 저장되며, 이후 요청마다 서버에 세션 ID를 전송합니다.
3) 서버는 이 세션 ID를 사용해 세션 정보를 조회하고, 사용자 인증을 확인합니다.

세션 저장소
세션은 일반적으로 서버 메모리나 Redis와 같은 외부 저장소에 저장됩니다. 세션 데이터가 많아지면 서버 자원을 많이 사용하게 되므로 확장성이 제한될 수 있습니다.

JWT와 세션을 언제 사용해야 할까?

JWT가 적합한 경우

1) 무상태 애플리케이션
서버가 사용자 상태를 저장하지 않고 클라이언트가 상태를 유지해야 할 때.
2) 분산 서버 환경
다중 서버에 상태를 저장하지 않아야 하는 환경에서는 JWT가 더 적합합니다.
3) 모바일, SPA 앱
리액트나 Vue.js 같은 프론트엔드 프레임워크로 구축된 SPA나 모바일 앱에서는 JWT가 유용합니다.

세션이 적합한 경우

1) 단일 서버 환경
서버가 하나인 경우, 세션을 이용한 상태 저장 방식이 더 간단하고 편리할 수 있습니다.
2) 짧은 세션 지속 시간
은행 웹사이트처럼 짧은 인증 시간이 필요한 경우 세션을 이용해 만료 관리를 쉽게 할 수 있습니다.
3) 보안이 중요한 애플리케이션
세션은 서버 측에서 만료 처리가 가능하고, 유효 시간 동안만 활성화되므로 보안성이 요구되는 환경에 적합합니다.

profile
슬기로운개발생활🤖

0개의 댓글