Session?
유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구
Session 특징?
Session은 특수한 ID 값으로 구성되어있다.
Session은 서버에서 생성되며 클라이언트에서 쿠키를 통해 저장된다.
클라이언트에서 요청을 보낼때 Session ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다.
=> 요청마다 매번 아이디와 비밀번호를 물어볼 필요 X
Session ID는 데이터베이스에 저장되기 때문에 요청이 있을 때마다 매번 데이터베이스를 확인해야함.
=> Session의 단점
=> Session ID를 데이터베이스에서 대조를 하기 전까지는 Session 값이 아무런 의미를 지니지 않음
서버에서 데이터가 저장되기 때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.
=> Session ID가 노출이 되더라도 데이터베이스와 대조를 할 수 없다면 무의미 무쓸모
데이터베이스에 Session을 저장해야하기 때문에 Horizontal Scaling이 어렵다.
=> Horizontal Scaling : 수평적으로 서버를 늘리는 것 - 같은 서버를 여러개를 복제시켜 트래픽을 분산시키는 것
=> Session을 중복저장 해야 하기 때문에 어렵다.
Token?
유저의 정보를 Base64로 인코딩된 String 값에 저장하는 도구
Token의 특징?
Token은 Header, Payload, Signature로 구성되어 있고, Base64로 인코딩 되어있다.
Token은 서버에서 생되며 클라이언트에서 저장된다.
클라이언트에서 요청을 보낼 때 Token ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다.(요청마다 매번 아이디와 비밀번호를 물어볼 필요 X)
Token은 데이터베이스에 저장되지 않고 Signature값을 이용해 검증할 수 있다. 따라서 검증할 때마다 데이터베이스를 매번 들여다볼 필요가 없다.
=> Session과 가장 큰 차이점 중 하나
정보가 모두 토큰에 담겨있고 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다.
=> 유출해도 위험이 없는 정보만 담기!
데이터베이스가 필요없어 Horizontal Scaling이 쉽다.
Session 생성 방식
Session 사용 방식
Token 생성 방식
Token 사용 방식
Session 과 Toekn 비교