우리가 브라우저에 접속하면 브라우저는 다양한 정보를 불러오기위해 서버에 request를 보내서 response를 받아야 한다.
이때 브라우저는 HTTP(HyperText Transfer Protocal)이라는 일종의 통신 규칙인 프로토콜을 사용한다. 하지만 http는 stateless protocal로 분류되는데...
stateless protocal은 이전 상태를 유지하지 않는 통신 방식이다.
즉 서버가 받는 request들은 이전 request들과 연관성이 1도 없는 각각의 독립적인 request로 받아들인다는 얘기이다.
이러한점들은 서버의 부담을 줄이는 장점도 있지만 유저의 상태정보를 유지할 필요가 있는 경우에는 불편함을 초래할 수 있다...
그래서 이러한 문제를 해결하기 위해 쿠키가 등장한다!!!!!!
쿠키는 클라이언트(브라우저)측에 저장되는 데이터 파일이다.
주로 우리가 웹 사이트를 방문할 때 생성된다. 쿠키는 사용자에 대한 정보를 저장하고 이 정보를 통해 사용자가 더욱 편리한 경험을 할 수 있도록 돕는다.
그리고 쿠키는 서버가 정해준 기간만큼 유효한 정보로 남아있다가 기간이 끝나면 사라진다.
그렇다면 쿠키에 어떤 정보를 저장할 수 있을까?
유저 정보: 세션 ID가 저장된다.(세션이 무엇인지는 뒤에 설명 되어있다.)
사용자 설정 정보: 사용자가 웹사이트에서 설정한 환경설정이나, 선호도와 같은 정보가 쿠키에 저장 될 수 있다.
ex)웹사이트 언어가 영어로 되어있어 한국어로 설정하면 재접속을 해도 한국어로 유지되어있는 상태를 확인할 수 있다.
방문 기록:광고 주체가 쿠키를 이용하여 사용자의 광고 선호도나 검색 기록,구매 이력 등을 추적하는 경우가 있다.
그런데 쿠키는 브라우저에 저장한다는 편리하면서도 치명적인 단점이 있다.
그래서 쿠키에는 보안성이 높아야 하는 정보는 담지 못한다. 그렇기 때문에 보안성이 높은 데이터를 다루기 위해서 또 다시 새로운 개념이 등장한다!!!
세션은 클라이언트의 정보를 서버에 저장하기 때문에 보안성이 쿠키보다 훨씬 높다.
그래서 세션사용의 예를 들어보면 특정 웹 유저가 로그인을 하고 싶으면 자신만의 아이디와 비밀번호를 브라우저에 입력을 할 것이다.
그러면 브라우저는 서버에 유저가 입력한 아이디와 비밀번호값이 일치하는지 물어보는 것을 요청할 것이고 아이디와 비밀번호가 일치하다면 서버는 세션DB에 특정 유저를 생성할 것이다.
그리고 이렇게 생성된 세션은 고유의 ID를 가진다. 그리고 그 세션ID를 쿠키에 담아서 response와 같이 브라우저에게 보낸다.
그러면 브라우저는 나중에 다시 자동으로 쿠키와 함께 서버에 request를 보내고 서버는 쿠키 속에 있는 세션ID를 확인하여 세션DB를 확인할 것이고 동일한ID를 찾아 특정 유저라는 것을 서버가 인식하고 우리는 계속 로그인을 지속한채로 브라우저를 이용할 수 있다.
다르게 생각해보면 쿠키는 세션을 운반하는 매개체가 되는 것이다.
(착각하면 안되는 것 브라우저가 가자고 있는 것은 세션ID이다!!)