웹 개발을 하면서 빠질 수 없는 개념 이다. 그러나 대충만 알고있고 설명할 수 있는정도로 Session과 Cookie, Cache를 구분하지 못하던 차에 박재성님 강의영상을 보며 세션상태에 따라 페이지에 노출하는 리스트를 변경하는 개발을 하다가 정리하게 되었다.
클라이언트가 HTTP 프로토콜의 GET/POST 방식으로 웹 서버에 페이지를 요청하면, 웹 서버에서 응답받은 HTML 페이지를 파싱하여 렌더링을 하는데, 이렇게 클라이언트와 서버 간의 데이터 왕복과정을 ‘라운드 트립(Rount-trip)’ 이라고 한다. 웹은 이 라운드 트립이 최소화하도록 개발하는 것이 좋다고 한다.
이렇게 라운드 트립을 한 번 거치고 나면, 사용자가 입력한 정보들이 손실되는데 동적인 웹 애플리케이션에서는 사용자의 요청 또는 입력 정보를 유지할 필요가 있어서 이런걸 저장해두고 사용할 수 있는 기능이 존재한다.
눈치 챘겠지만, 이런 기능이 쿠키, 캐시 그리고 세션이다. 차례 차례 정리해보겠다.
ToC
쿠키(Cookie)
클라이언트에 대한 정보를 클라이언트(PC)에 저장하기 위해 웹 서버에서 클라이언트(브라우저)로 전송하는 정보를 이야기한다.
쿠키 안에는 사용자의 로그인 정보 및 웹 사이트에서 어떤 행동을 했는지, 몇 번 방문했는지 등 서버에서 유저를 식별할 수 있는 데이터(패킷)가 저장된다고 한다. 그리고 이 쿠키는 해당 웹 서버만 접근이 가능하다고 한다. 트위터에서 전송한 쿠키는 페이스북 서버는 접근 할 수 없다는 이야기이다.
이 쿠키 덕분에 로그인을 매 번 할 필요없이 한 번만 하면, 여러 웹페이지를 돌아다니다가 다시 접속해도 로그인 상태를 유지할 수 있다. 그러나 편한만큼 보안상 위험하기도 하다. 스파이웨어를 통해 사용자의 웹 브라우징 행동을 추적하거나 이 쿠키를 취득하여 웹 계정 접근권한을 얻을 수도 있기 때문이다.
건물(Server)에 들어가기 위해 사용하는 출입증카드(Cookie)에 비유되는 개념으로 이해하였다.
쿠키는 두가지 종류로 구분된다고 한다.
세션 쿠키 : 쿠키에 만료일이 포함되지 않으며, 램 메모리에만 저장되어 브라우저를 닫는 순간, 쿠키가 소멸(손실) 된다고 한다.
영구 쿠키 : 만료일이 포함되어 있어서 만료일까지는 브라우저를 종료하더라도 사용자의 컴퓨터에 저장되어 상태를 유지할 수 있다. 만료 시기가 되면 자동으로 삭제된다.
세션(Session)
사용자가 웹 서버에 접속해 있는 상태를 하나의 단위로 인식하여 이를 세션이라고 하는데, 클라이언트가 아닌 웹 서버에 저장하는 데이터이다. 상태를 일정하게 유지시킴으로써 라운드 트립1)을 거칠 때마다 사용자가 로그인해야 할 번거로움을 없애준다.
서버에서 쿠키에 있는 로그인 데이터를 이용해서 세션상태를 유지한다고 하는데 활용한다고 한다.
예. 쿠키를 이용해서 세션을 유지하는 과정
1) 클라이언트가 웹 서버에 접속하여 로그인을 요청
2) 웹 서버는 클라이언트에 세션ID를 발급, 이 세션ID를 쿠키에 저장(JSESSIONID)
3) 클라이언트는 재접속시 이 쿠키에 담긴 세션(JSESSIONID)을 서버에 전달
4) 서버에서는 세션ID를 통해 클라이언트를 식별하고 로그인 상태로 유지
캐시(Cache)
한 번 내려받은 데이터를 저장소에 저장해두고 재사용할 수 있도록 하는 데이터이다. 웹 사이트에 방문하면 웹 페이지를 보여주는 이미지 등의 리소스가 한 번에 로드되는데, 접속할 때마다 리소스를 내려받을 경우 웹 페이저 접속 속도가 느려질 수 있다. 따라서 한 번 로드된 리소스는 클라이언트에 저장해두고, 재요청이 들어올 때 캐시에서 로드해와서 더 빨리 로드 할 수 있도록 돕는다.
여기부터는 네트워크 공부를 선행하지 않아 잘 모르는 영역이지만, 언젠가 이해할 그 날을 꿈꾸며.. 일단 적어본다.
네트워크에도 캐시 기술을 응용할 수 있다고 하는데, 이 때 응용되는 캐시의 종류는 3가지로 분류된다고 한다.
1) 브라우저 캐시
클라이언트 애플리케이션들이 내부적으로 갖는 캐시.
2) 프록시 캐시
실제 서버가 있는 곳이 아닌 네트워크 관리자에 의해 네트워크 상에 설치되는 캐시로 latency와 트래픽을 줄이는데 이용된다고 한다.
3) 게이트웨이 캐시
서버 관리자에 의해 설치 및 운용되는 캐시이며, 서버의 앞단에 설치되어 요청에 대한 캐시 및 효율적인 분배를 통해 서버의 응답 성능을 개선한다고 한다.
정리하면, 쿠키와 캐시는 클라이언트에 저장되는 데이터지만 목적이 다른 개념이라고 할 수 있다.
참고 문서
1)라운드 트립 : 클라이언트와 서버간의 왕복 통신 과정, 라운드 트립이 자주 발생할수록 서버에 부하를 주기 때문에 라운드 트립이 적게 발생하도록 해야한다.