오늘은 cookie에 대해서 공부했다. cookie는 HTTP 프로토콜의 무상태성을 보완할 수 있는 도구다. HTTP 프로토콜은 상태를 가지고 있지 않기 때문에 이전에 어떤 메세지가 오고 갔는지 알 수 없다. 이러한 인터넷 상의 상태를 저장할 수 있게 만들어진 것이 cookie다. cookie는 서버가 웹 브라우저에 이런 상태를 저장하고 불러올 수 있는 수단이다. 서버가 일방적으로 클라이언트에 전달하는 작은 데이터라고 해서 cookie라고 불린다고 한다. 인터넷을 할때 어떤 서버에 접속했다고 했을때 처음 접속한다고 한다면 그 서버에대한 cookie가 없는 상태다. 이때 서버는 이 클라이언트의 브라우저에 사용자에 상태 정보를 저장해둔다. 그리고 한번 cookie가 생성되고 나서는 클라이언트가 서버에게 요청을 할때는 cookie를 요청 헤더에 싣고 요청을 하게된다. 서버는 이 요청에 cookie가 있으면 그 cookie 정보를 바탕으로 사용자에게 화면을 보여주게 된다.
cookie에는 이러한 사용자 정보가 포함되어 있는데 이 cookie가 HTTP message header에 들어가 있다보니 아무나 그 메세지를 확인하고 정보를 들여다볼 수 있다. 보안에 취약한 부분이 생긴다. 그렇다보니 cookie에는 민감하고 중요한 정보는 담지 않아야 한다. cookie는 보안의 용도로 만들어진 것이 아니라 상태를 유지하기 위해서 생겨난 도구이기 때문에 보안은 cookie가 아닌 다른 수단으로 관리해야 한다. 그렇게 만들어진 것이 session이다.
개념적으로는 어느 정도 이해해도 실제로 구현하는 것은 정말 다르다는 것을 공부할때 마다 느낀다. cookie는 많이 들어보긴 했으나 제대로 공부한 것은 처음이었다. 정말 어려웠다. 필요한 옵션과 옵션이 나타내는 다른 설정들을 하나하나 이해하려면 처음의 개념을 넘어서는 많은 지식을 접해야 했다. 어느 선이 지금 내가 알아야할 단계인지 구분이 잘 안가긴 하지만 배우면서 재미있었다. 들어왔던 개념을 새롭게 알게된 부분이 뭔가 비밀을 알게된 것 마냥 흥미가 생겼다. 구현할때 머리 싸메고 구글링 하기는 하지만 그리고 더 어려운 session token이 남아있지만 재미있게 배워보려고 한다.