해당 글은 노마드 코더의 '세션 vs 토큰 vs 쿠키? 기초개념 잡아드림. 10분 순삭!' 영상의 내용을 기억하기 위해 작성한 글입니다.
Cookie
브라우저에 저장됨. 즉, 웹에서만 사용 가능하고 앱에서는 사용 불가 -> 이런 경우 앱에서는 쿠키 대신 토큰(token) 사용
서버의 response로부터 브라우저에 저장하고자 하는 데이터를 쿠키로 저장
저장 후에는 해당 웹사이트에 방문시마다 브라우저는 해당 쿠키도 request와 함께 전송하게 됨
쿠키는 도메인에 따라 제한됨. 즉, 특정 웹사이트에서 받은 쿠키는 해당 웹사이트에만 전송됨
쿠키는 유효 기간이 존재. ex) 하루, 일주일, 한달 등
인증 뿐만 아니라 여러 정보를 저장 가능. ex) 언어설정 등의 사용자 설정
Token
서버에 토큰을 보냄으로써 쿠키와 같은 역할 수행
ex) 사용자 인증 정보를 담은 토큰을 전송하게 되면, 서버는 세션 DB에서 해당 토큰에 일치하는 회원을 찾을 수 있음
JWT
Token 형태로, 쿠키가 공간의 제약(클라이언트 브라우저)이 있는 반면 JWT는 그렇지 않아 길이가 매우 길어도 됨
매우 긴 문자열 형태로 존재
암호화되지 않음. 따라서 비밀번호와 같이 민감한 정보는 JWT에 들어가지 않음
JWT를 사용하면 세션 DB를 둘 필요가 없고, 서버는 유저 인증을 위해 많은 일을 처리하지 않아도 됨
클라이언트는 서버로 부터 받은 JWT Token을 요청(request) 할 때마다 보냄
현재 코로나로 인해 상용되고 있는 QR 체크는 JWT가 들어간 QR Code
Session
Session과 Token은 HTTP protocol의 속성(Stateless) 때문에 요구됨.
세션이 없다면, 매번 request가 올 때마다 쿠키나 세션을 통해 전달된 정보를 확인하기 위해 DB를 다녀와야 한다는 문제점 발생.
cf. Stateless : Server로 가는 모든 request가 독립적임을 의미. 즉, 현재 보내는 request가 이전 request와 연결되지 않음을 의미
JWT를 사용한 로그인 예시
정보 인증 -> 정보 사인 -> 전달
: 서버는 유저를 인증하는데 필요한 정보를 토큰에 저장하고, 페이지 요청 시 서버는 해당 토큰이 유효한지만 검증
1. 클라이언트는 User ID와 Password를 서버로 전송한다.
2. 서버에서는 DB를 확인한 후, 정보가 일치하면 DB에는 아무것도 생성되지 않는다.
3. 서버에서는 인증 정보를 Sign Algorism을 통해 생성한 정보(이것이 JWT. String 형태)를 클라이언트에 전달한다.
4. 클라이언트는 인증을 위해서는 쿠키처럼 request에 해당 토큰(JWT)를 전달
5. 서버는 이 토큰(사인)이 유효한지(조작된 토큰이 아닌지) 체크
6. 토큰이 유효할 경우 서버는 클라이언트를 User로 인증
cf. Session을 사용한 로그인
1) 세션에선 세션 ID만 제공(세션에 대한 모든 정보는 세션 DB에 존재)
2) 페이지 요청 시 서버는 세션ID를 DB에서 확인(요청 시 매번 DB 거침)
Session과 JWT의 장단점
1. 세션 사용 시
1) 서버는 로그인 된 유저의 모든 정보를 저장함. 따라서 해당 정보를 이용하면 새로운 기능을 추가할 수 있음
① 특정 유저를 추방하고 싶을 때 세션을 삭제해버리기만 하면 됨
② 로그인 된 기기 목록 중 원치 않는 디바이스에서 강제 로그아웃 가능(ex. 인스타그램 등)
③ 계정 공유 숫자 제한 가능(ex. 넷플릭스)
2) 데이터를 저장할 DB를 사고, 유지하는 비용이 듦(회원 수가 증가할 수록 DB는 커져야 함) - DB는 주로 Redis 사용
cf. Redis DB : 빠르고 저렴한 것이 특징
2. JWT 사용 시
1) 생성된 토큰을 추적하지 않으므로 서버는 토큰이 유효한지의 여부만 인지함
2) DB를 구매하지 않아도 되지만, 강제 로그아웃 등의 추가적인 기능은 사용 불가(해당 토큰이 만료되기 전까지는 유효)
3) 서비스가 거대해지고, 유저 계정을 좀더 잘 관리하고 싶다면 세션을 사용하는 것이 유리할 수 있음
한 줄 요약
쿠키(Cookie) : 데이터를 옮기는 매개체 시스템
토큰(Token) : 서버가 기억하는 긴 텍스트. ID 카드처럼 서버에게 보여줘야 함
JWT : 정보를 가지고 있는 토큰. DB 없이 검증 가능
유저 인증을 위해 JWT 혹은 세션을 사용할 수 있음
'개념' 카테고리의 다른 글
Network) TTL, 단편화, DHCP, ARP, RTT (0) | 2024.03.19 |
---|---|
Network) 특수한 IP 주소(Broadcast IP 주소, Loopback IP 주소) (0) | 2024.03.17 |
Network) IP 클래스와 서브넷팅, 서브넷 마스크 (0) | 2024.03.17 |
틈새 Network 공부(네트워크 계층, L2 - L4) (0) | 2024.03.16 |
운영체제) 인터럽트(Interrupt)와 관련 주요 개념, DMA (0) | 2022.09.01 |