Others

쿠키, 세션, 토큰, JWT

selonjulie 2022. 11. 7. 17:44

모두 authentication을 위한 것!

 

쿠키

서버가 데이터를 사용자의 정보(세션 ID)를 기억하기 위해 사용자의 브라우저에 전달하는 방법

*쿠키는 네이티브 앱에는 존재하지 않고, 브라우저에만 존재함

HTTP response를 보낼 때 쿠키를 함께 보냄

브라우저에 쿠키가 저장되면, 그 사이트를 방문할 때 마다 쿠키도 HTTP request에 함께 보내짐

 

쿠키의 특징

도메인에 따라 정해짐

유효기한이 있음

인증(세션ID) 뿐만 아니라 언어 등 여러가지 정보를 담고 있음

공간 제약이 있음

 

세션과 토큰이 왜 필요한가?

HTTP는 stateless이기 때문. 서버로 가는 모든 요청이 독립적으로 다루어짐. 요청끼리의 연결도 없고, 메모리도 없음

그래서 서버에 요청'할 때마다' 우리가 누구인지 알려주어야 함 -> 이를 하기 위함이 '세션'

 

매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 함

비유를 하자면, 마치 이미 자기소개를 한 사람에게 계속해서 똑같은 내용으로 자기소개를 해야하는 것과 같음

따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능) 이를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요에 의해 만들어짐

 

세션

로그인 아이디, 비밀번호 정보를 보내고, 이게 서버에 존재할 시, 이를 세션 데이터베이스에 저장함. 

해당 세션 데이터베이스에는 ID가 존재하고, 세션 ID는 쿠키를 통해 브라우저로 들어와서 저장됨

중요한 유저 정보는 모두 서버에 있고, 사용자가 가지고 있는 것은 세션ID 뿐임

현재 로그인한 유저들의 모든 세션 ID를 DB에 저장해야함 -> 따라서 사용자가 많아질 수록 DB 리소스가 더 필요함

 

토큰

복잡한 문자열

서버에서 토큰을 받은 후 세션 DB에서 해당 토큰과 일치하는 사용자를 찾은 후 보내야함

 

JWT

정보를 가지고 있는 토큰 (JSON Web Token)

JWT를 사용하면 세션 DB를 가지고 있을 필요가 없음. 정보를 사인하고 전달만 하면 됨. 사용자 인증에 필요한 정보를 토큰에 저장

토큰이 유효한지 아닌지만 확인

보통 세션ID보다 훨씬 김. 하지만 JWT는 공간 제약이 없음

JWT는 사인은 됬지만 암호화가 되지 않았음. 따라서 비밀 정보를 JWT안에 저장하면 안됨

ex) QR코드

 

 

참고)

세션 vs 토큰 vs 쿠키? 기초개념 잡아드림. 10분 순삭!