학사 나부랭이
Network - Cookie, Session, Cache 본문
Cookie
HTTP는 stateless이에요. 그러니까 서버가 클라이언트의 상태를 보존하지 않아요. 그리고 서버는 항상 클라이언트와 연결되어있지 않아요. 그런 상태에서 웹사이트가 유저를 기억하기 위해 활용하는게 쿠키죠.
(누군지, 어디서 왔는지, 어느 웹사이트를 방문했고, 관심사가 무엇인지, 인터넷에서 한 모든 것)
먼저 클라이언트와 웹사이트 서버의 대화하는 방식을 설명할게요.
클라이언트가 서버에 요청(ex. html 파일을 요청)을 하면 해당 서버와 연결이 되어요.
서버가 응답하고(html파일을 보냄) 그 응답을 클라이언트가 받는(html 파일을 받는) 순간 연결이 끊어져요.
가장 흔한 Authorization Cookie(인증 쿠키)를 예로 들자면...
1. 클라이언트가 아이디, 비번을 보내요.
2. 그걸 서버가 받아 DB에서 체크하고 맞으면 영수증 같은걸 만들어요.(영수증 내용: 이건 purachina다, 이 영수증은 신뢰할 수 있다...)
3. 그리고 그 영수증을 클라이언트에게 줘요.
이후 클라이언트와 서버와의 연결은 종료되고 그 영수증을 보관해요.
이 과정은 브라우저에서 이루어지고 브라우저는 자동으로 모든 영수증을 HDD에 저장하는데 이게 쿠키예요. 그리고 서버에 요청을 보낼 때마다 브라우저는 해당 사이트에서 모은 쿠키를 보내죠.
이 과정 이후 쿠키를 받은 서버는 "purachina, 어서오고."라고 인식하고 그에 알맞게 응답하죠.
응답하면 또 연결이 끝나요.
다시 요청하고 싶으면 또 쿠키의 내용을 보내야하고 이는 요청을 할 때마다 항상 일어나요.
쿠키의 규칙
1. 1개의 도메인에 한정되어요.
페이스북의 쿠키는 넷플릭스로 보낼 수 없어요. 그런데 아주 작은 자바 스크립트나 몇 픽셀의 이미지라도 그 웹사이트에 관련되었으면 쿠키가 생성되죠.
ex1. 넷플릭스에 페이스북 좋아요 버튼이 있으면 브라우저가 그 좋아요 버튼을 페이스북에 요청한게 되니까 넷플릭스에 접속했는데도 쿠키가 생성되어요.
ex2. purachina.com 페이지에서 purajapan.com에 있는 이미지를 사용하면 사용자는 purachina.com의 html 파일뿐만 아니라 purajapan.com의 이미지도 요청하게 되죠. 그래서 purachina, purajapan 쿠키가 다 생성되어요. 그럼 purajapan은 이 쿠키를 통해 사용자가 purachina에서 이미지를 요청했네? 그럼 purachina를 방문했군! 이라고 알게 되는거죠.
2. 쿠키는 자동으로 보내져요.
서버는 원하는 만큼 쿠키를 보낼 수 있고 브라우저는 자동으로 그걸 저장해요. 사용자가 거부할 수 없죠.
3. 쿠키는 자동으로 설정되어요.
마찬가지로 사용자가 설정하지 않죠.
이런 쿠키는 사용자와 서버 둘 다 수정/삭제를 할 수 있어요. 그리고 남이 훔쳐보거나 훔쳐가기도 할 수 있죠.
그래서 쿠키에 저장하기에는 민감하거나 중요한 정보는 서버의 세션으로서, 서버 안에서 다루어져요.
Session
중요한 정보를 다룰 때 서버는 사용자를 구분하기 위한 기한이 짧은 임시 키를 사용자(purachina)에게 주고, 사용자는 그걸 쿠키로 저장해요. 그리고 그 중요한 정보는 세션으로서 서버의 메모리나 DB에 저장 및 처리하죠.
그럼 처리한 정보가 purachina 꺼라는 것을 어떻게 아느냐? 쿠키에서 말했듯이 클라이언트가 요청을 할 때마다 쿠키의 내용을 서버에게 보내요. 거기에는 임시 키도 있겠죠? 그 키로 서버가 사용자를 특정하게 되는거죠.
ex. 로그인을 하면 세션에 로그인을 했다는 정보를 가지고 있고, 그 로그인을 했다는걸(이 세션의 주인이라고) 증명할 세션 ID는 쿠키 보관함에 있어요.
그렇다고 세션이 너무 많으면 서버에 부하가 걸릴 수 있으니 개발자가 쿠키로 다룰 데이터, 세션으로 다룰 데이터를 적절히 정해야해요.
Cache
OS에서도 많이 다뤘는데 컴퓨터 과학에서 다른 곳에서 가져오는데 큰 비용이 드는 데이터를 한 번 가져온 후 임시로 저장하는걸 캐시라고 해요.
사용자가 여러 번 방문할거 같은 웹사이트는 한 번 받은 데이터를 컴퓨터나 중간 역할의 서버에 저장하는데 이게 웹캐시이죠.
'自習 > Network' 카테고리의 다른 글
Network - Firewall (0) | 2021.05.23 |
---|---|
Network - OSI 7 Layer Model (0) | 2021.05.23 |
概念整理 - ELK Stack (0) | 2021.05.23 |
Network - IP (0) | 2021.05.11 |
Network - Ping (0) | 2021.05.09 |