웹사이트를 제작하다 보면 쿠키, 세션, 토큰, 캐시 등의 용어를 마주치게 되는데, 누군가 쿠키가 뭐임? 혹은 세션이 뭐임? 이렇게 물어봤을때 명확하게 대답할 자신이 없어서 이참에 정리를 하고 넘어가야겠다는 생각이 들어서 글로 남기게 되었다.
그렇다면,
가장 큰 특징은 사용자의 클라이언트에 저장되어 있기 때문에 사용자가 직접 조작할 수 있다는 점이다. 따라서 사용자가 직접 조작하면 안되는 정보 예를들면 결제정보나 권한정보는 쿠키에서 보관하면 보안에 이슈가 생길 수 있다.
세션의 가장 큰 특징은 서버에서부터 ID가 생성되어 클라이언트에게 쿠키에 세션ID를 담아서 전달한다는 점이다. 여기서 중요한 점은 쿠키에 세션ID를 담아서 전달한다는 점인데, 흔히들 쿠키는 클라이언트(웹브라우저)에 정보를 저장하는 것이고, 세션은 서버에 저장하는 것이다 라고 비교한다. 하지만 세션도 쿠키를 이용해서 세션 ID를 담아 보내는 방식, 즉 쿠키의 이용방법에 차이일 뿐이지 다른개념은 아니다.
요약하자면 캐시는 클라이언트가 다시 사용할법한 데이터를 미리 준비해놓고 클라이언트가 재방문, 혹은 특정 컴포넌트를 재 사용했을때, 빠르게 UI를 구현해줄 수 있게 도와주는 장치라고 생각하면 된다.
보통 놀이공원에 비유를 많이 하는데, 놀이동산에 최초 입장을 할때 쿠키북이라는 쿠키를 들고 입장을 한다. 쿠키를 들고 다니는 동안 유저는 스스로 어떤 정보를 기입할 수도 있고, 놀이동산에 있는 어떤 놀이기구를 이용하거나 밥을 먹을떄 이용할 수도 있다.
다만, 쿠키북은 스스로 기입하거나 삭제를 할 수 있는 만큼, 중요한 결제정보나 관계자 외에 출입금지 구역을 갈 수 있는 티켓 같은것은 쿠키북에 포함시키지 않는것이 놀이공원을 운영하는 쪽에선 좋을것이다.
그렇다면, 그런 중요한 정보는 어디다가 놓는것이 좋을까에 대한 대안으로 비유되는게 세션이다. 세션은 자유이용권과 같은 팔찌라고 생각하면 좋을꺼 같은데, 최초 유저가 놀이공원에 들어갈때 자유이용권을 끊는 대신 놀이공원 측에선 유저 1에 대한 자유이용권의 복사본을 놀이동산에도 갖고 있는다. 그럼 각 놀이 기구에 가서 자유이용권을 보여주면 이 자유이용권이 최초 발급된 바코드와 맞는지 조회하고 유저를 해당 놀이기구를 허락해 준다.
다만, 세션은 자유이용권에 대해 주최측에서도 복사본을 갖고, 그걸 기반으로 조회를 하기 때문에, 유저가 많아진다면 수많은 자유이용권중 대조가 이루어질 것이고, 사람들의 웨이팅 타임을 늘릴것이다.
대안으로 나온게 토큰이라고 보면 되는데, 토큰은 놀이공원에서 티켓을 카카오 기프트콘 같은걸로 판다고 보면 될거같다. 카카오 기프트콘으로 구매한 고객은 놀이기구를 탈때마다 바코드를 보여주고, 놀이공원 측에선 해당 바코드가 유효한지만 조회해서, 해당 바코드가 유효하면 입장, 아닐경우 위조로 판단하고 돌려보내는 식이다.
캐시는 놀이공원 기념품 샵에 비유를 많이 하는데, 샵에 놀러가서 유저가 머리띠를 맘에 들어서 재고가 있는지 점원에게 물어보고, 머리띠를 계산대에 올려놨는데 유저가 다시 와서 사겠다고 하고 나간 경우, 머리띠를 다시 창고에 가져다 놓느게 아니라 특정 매대에 오려놓고 유저가 다시 돌아올 경우 바로 다시 꺼내줄수 있게 준비하는 작업을 말한다. 창고까지 다시 가서 가져올 필요가 없기 때문에 빠르게 고객에게 물건을 전달할 수 있다는 점이 특징이다.