쿠키와 세션의 개념
인터넷 서핑을 하던 중, 특정 사이트에서 쿠키를 수집한다는 문구를 본 적이 있을 것이다.
또한 컴퓨터에 대해 조금 공부하다 보면 세션이라는 것에 대해서도 들어보게 될 것인데, 이 두 가지는 무엇이며 어떤 역할을 하는 것일지 한번 알아보고자 한다.
쿠키(Cookie)는 HTTP의 일종이며 사용자가 특정 사이트를 방문하면 해당 사이트가 사용하는 서버에서 사용자의 컴퓨터에 저장시키는 기록정보 파일이며, 1대의 pc에 최대 300개의 쿠키를 저장할 수 있고, 하나의 도메인에는 20개를 가질 수 있으며 최대 용량은 4KB까지 이다. 쿠키는 이름, 값, 만료일(언제까지 저장할지), 경로정보로 구성된다.
쿠키의 종류는 크게 세 가지로 나뉘는데 기술적 쿠키, 분석 쿠키, 광고 쿠키로 나뉜다.
기술적 쿠키는 웹 서핑을 하는 주체가 컴퓨터인지 사람인지 구분하는 역할을,
분석 쿠키는 어떤 카테고리를 검색하는지 분석하고 정보를 수집하는 역할을,
광고 쿠키는 검색 내용과 국가 등에 따라 사용자에게 맞춤형 광고를 게재하는 역할을 한다.
세션(Session)은 일정한 시간 동안 사용자로부터 들어오는 요청을 하나의 상태로 보고, 그 상태를 지속시키는 방법이다. 간략한 예를 들어보자면 우리가 특정 사이트에 로그인을 하고 잠시 다른 일을 하다 다시 들어가면 어떤 사이트는 로그아웃이 되어있고, 어떤 사이트는 로그인이 지속되어있는것을 경험할수 있을것이다. 이것을 바로 세션이라고 한다. 특정 시간동안 사용자의 연결을 지속시키고, 정해진 시간이 만료되면 사용자가 요청한 연결을 스스로 종료시켜버린다.
세션은 쿠키와 반대로 웹 서버에 저장되며, 서버 용량이 허락한다면 저장 데이터에 제한이 없고, 클라이언트를 구분하기 위해 고유의 번호인 SessionID를 부여하고, 구분된 클라이언트별로 요청에 맞는 서비스를 제공한다.
세션의 특이한 점 중 하나는 로그인한 사용자에 대해 세션 하나를 생성하고, 로그아웃을 하게 될 경우 다른 사용자로 인식한다는 점인데, 이런 특성 때문에 로그아웃 후 새로 세션이 생성되게 된다.
쿠키와 세션의 차이점
쿠키와 세션은 유사한 역할을 하고, 작동 메커니즘도 유사하다. 이 둘의 큰 차이점은 사용자의 정보가 어디에 저장되는가 이다. 쿠키는 사용자(클라이언트)의 자원만 사용하고, 세션은 반대로 서버의 자원을 사용한다.
서버는 사용자의 PC에 비해 파일이 변질될 우려가 적기 때문에, 보안적인 측면에서 보았을 때 세션이 더 뛰어나다.
쿠키도 정해진 만료기간이 존재하나, 사용자의 PC에 파일로 저장되기 때문에 웹브라우저를 종료 시켜도 다시 실행했을 떄 그 정보가 남아있을 수 있다. 또한 만료기간을 별도로 지정하여 쿠키를 삭제하기 전까지 유지도 가능하다.
반면 세션은 브라우저 종료시 삭제되는 특성을 가진다.
속도의 측면에서는 쿠키가 더 우수하다.
쿠키는 정보가 쿠키에 있기 때문에(사용자의 PC) 서버에 요청할 때 속도가 빠르며,
세션은 반대로 서버에 정보가 있어 처리속도가 비교적 느리다.
쿠키는 일반적으로 일부 텍스트 자동완성이나 불필요한 팝업을 하루 동안 보지 않기 등
사용자 편의사항을 지원하는 것이고, 이런 특성상 변질되거나 가로채여도 큰 타격이 없는 정보를 저장하는 데 사용된다.
반면 사용자 패스워드나, 개인정보와 같은 민감한 부분들은 세션을 통해 서버에서 다뤄지게 된다.
쿠키와 세션의 필요성
쿠키와 세션에 대해 알아보는 시간을 가졌다.
그런데 실시간으로 서버와 주고받으면 되는 정보를 왜 쿠키와 세션을 사용해서 통신할까.
이 이유는 HTTP의 특성에서 시작된다. HTTP는 비연결성(Connectionless)과 무상태성(Stateless)라는 두 가지 특징을 지니는데, 비연결성은 서버-클라이언트 관계에서 한번 연결을 맺고 응답을 마치면, 그 연결을 끊어버리는 것을 의미하고, 이로 인해 사용자가 다른 요청을 할 경우 새로운 사용자로 인식하게 되어 원하는 정보를 송신하기 어렵게 되는데, 이것을 무상태성이라고 한다. 이런 특성이 존재하는 이유는 불필요한 지속적 연결로 낭비되는 자원을 절약하기 위함에서 시작되었다.
이번에는 쿠키와 세션에 대해 알아보았다. 이번에 알게 된 정보를 통해 웹 개발에도 적용해보자.
웹 개발을 진행할 때 해당 정보가 외부로 유출되면 타격이 큰 정보라면 세션을,
반대로 큰 타격이 없고 사용자 편의를 추구하는 항목이라면 쿠키를 사용하는 것이 중요하겠다.
불필요한 세션 사용은 서버에 부하를 줄 수 있고, 불필요한 쿠키 사용은 정보보안 사고를 초래할 수 있기 때문이다.