쿠키, 세션, 토큰은 모두 로그인과 같은 행동을 반복적으로 작업하지 않도록 데이터를 저장하는 방식입니다
1. 쿠키
* 의미 : 브라우저에 저장되는 정보
브라우저는 사용자의 컴퓨터에 설치된 소프트웨어임으로 쿠키는 사용자가 갖고 있는 정보
ex) 장바구니에 담은 내역, 검색 내역 등 => 조작되어도 문제되지 않을 정보
다만, 쿠키는 제 3자가 조회하는 것도 가능하기 때문에 개인정보를 담은 내용이나 보안상 민감한 정보를 저장하는데 적합하지 않음
1-1. 쿠키의 보안을 높이려면?
백엔드 코드 중 쿠키에 httpOnly / secure/ Samesite 옵션을 사용한다
=> 이렇게 하면 자바스크립트 코드 상에서 접근이 불가능하고, http 요청에만 포함되어 보내진다
Set-Cookie: 쿠키명=쿠키값; path=/; secure; SameSite=Lax
2. 세션
* 의미 : 서버가 나를 알아보는 방법
세션을 통해 로그인을 한 다음 페이지를 이동했을 때도 서버가 사용자를 동일인물로 인식할 수 있음
사용자가 한 번 로그인을 하면 유효기간이 끝날 때까지 더 이상 로그인을 하지 않아도 되도록 세션 아이디라는 데이터를 만듦
사용자는 서버로부터 세션아이디를 쿠키로 저장 => 앞으로 모든 요청에 함께 전달하여 로그인 상태 전송
=> 로그인 여부 등 사용자와 서버의 관계가 기억되어 보존되고 있는 상태
다만, 서버는 요청마다 함께 딸려오는 세션 아이디를 메모리에 올려두기 때문에 메모리 공간이 한정되어 있어 사용자가 많아지면 메모리 공간이 부족해져 서버에 부하가 걸림
3. 토큰
* 의미 : 세션 방식의 대안으로 로그인한 사용자에게 세션 아이디 대신 토큰을 발급
토큰에는 특수한 수학적 원리가 적용돼 있어 서버만 유효한 토큰 발급 가능
토큰을 받아간 사용자가 이를 쿠키에 저장해두고 필요할 때마다 제시하여 서버는 토큰을 메모리에 올릴 필요가 없음
다만, 유효기간이 끝나기 전까지 서버가 강제 로그아웃을 시킬 수 없어 세션에 비해 토큰 정보를 탈취 당할 가능성이 높음
Resources
느낀점...
생각해보니 인턴 때 쿠키를 도입하겠다고 백엔드 팀원이랑 막 고생을 했던 게 떠오릅니다
그때 프론트에선 할 수 있는게 없었던 것도 갑자기 기억나네요
프로젝트마다 토큰썼으면서 그리고 개념도 배웠는데 이제야 설명할 수 있게 되었습니다
'Learning Log > CS' 카테고리의 다른 글
[cs] JWT(Json Web Token) (0) | 2023.08.01 |
---|---|
[cs] 운영체제의 역할, PCB, 메모리 계층 (0) | 2023.07.31 |
[cs] 프로세스와 스레드 (0) | 2023.07.27 |
[cs] RESTful API란 (0) | 2023.07.27 |