쿠키란(Cookie)? 쿠키 등장 배경
쿠키는 HTTP 환경(웹환경)에서 상태를 유지하기 위한 기술입니다. HTTP의 특성상 매번 발생하는 HTTP 트랜잭션은 별개의 요청으로 판단하기 때문에 상태를 가질수 없습니다. 예를 들어 www.exam.com/page1 요청 후 www.exam.com/page2 를 요청하는 경우 이 둘의 요청은 서로 연관성을 가지지 않고 독립적이며, page1에서 만들어진 데이터는 page2를 요청할때 유지되지 않는 것입니다.
이러한 사실때문에 상태를 가지지 않는다고 하여 HTTP를 stateless protocol(무상태 프로토콜)이라고 합니다. 그러나 웹 서비스를 개발하다 보면 필연적으로 여러 요청(또는 여러 페이지)에 걸쳐 상태를 유지해야 하는 경우가 있습니다.
-
최초 페이지에서 로그인하고 여러 페이지에 걸쳐 로그인 인증정보가 유지되어야 하는 경우(로그인 페이지에서 로그인 하였는지 검증시)
-
쇼핑몰 장바구니에 담긴 아이템 정보들이 다른 페이지로 이동시에도 유지되어야 하는 경우(새로고침이나 다른 항목으로 페이지 이동시 장바구니 데이터가 날아가지 않기 위함)
-
회원가입시 여러 단계에 걸쳐 가입이 이루어지는 경우 이전 단계 페이지의 정보들이 유지되어야 하는 경우(이전 단계를 거쳤는지 검증시)
이 밖에도 여러가지 상황이 있을 수 있습니다. 그러나 HTTP 규격상 상태를 유지할 수 없었고, 이때 등장한 것이 쿠키(Cookie) 라는 기술입니다. 쿠키는 데이터를 브라우저측에 저장해두고 매번 요청시마다 서버로 쿠키를 전송합니다. 따라서 페이지가 새로고침되거나 새로운 요청이 발생된다고 하더라도 클라이언트측의 브라우저에 데이터가 저장된 상태로 이동되기 때문에 데이터가 새로고침 되지 않고 유지될 수 있는 것입니다.
재밌는점은 쿠키가 HTTP1.1(RFC2616) 규격에 포함되지 않는다는 점입니다. HTTP 기술이 아닌데 HTTP의 단점을 극복하기 위해 사용하는 것입니다.
쿠키와 세션
쿠키가 등장했던 당시에는 하드웨어 사양이 그다지 좋지 않았기 때문에 웹서버에는 많은 데이터를 저장할 수 없었습니다. 이는 클라이언트에서 유지해야하는 상태 데이터들 또한 마찬가지였습니다. 따라서 쿠키라는 데이터 형식으로 서버가 아닌 클라이언트측에 데이터를 브라우저 자신에게 저장하였던 것입니다.
인터넷이 퍼진 초기에는 웹 환경에 대한 지식이 많지 않았기에 보안에 대한 인식이 지금과 같지 않았습니다. 그러나 브라우저에 저장되어 너무나 쉽게 노출되어 있는 쿠키 데이터는 개인정보 유출에 취약하다는 단점이 존재했습니다. (실제로 PC방 등에서 브라우저를 통해 로그인 하는 경우 다음 사람이 해당 PC에서 쿠키를 확인하여 개인정보를 빼낼수도 있었습니다.)
또한 시간이 지남에 따라 하드웨어의 비용이 감소하였기에 서버 성능이 증가함에 따라 중요한 데이터는 서버에 저장하는 방식으로 발전하였습니다.
그에 따라 등장한 기술이 세션입니다. 세션은 쿠키와는 반대로 데이터를 서버에 저장해 두고 브라우저별로 구분하여 각각 생성됩니다. 또한 데이터 크기에 제한이 있었던 쿠키와는 다르게 서버 성능이 되는한 마음대로 데이터를 저장할 수 있었습니다. 브라우이로써 저측에 노출되어 있던 데이터는 이제 서버가 관리하는 형태가 되었습니다.
그렇다면 최근에 쿠키는 어떨때 사용되는지?
그렇다고 현재는 쿠키를 사용하지 않는것은 아닙니다. 서버에 저장되어있는 자신의 세션을 구분하기 위한 세션키값을 쿠키로 저장하여 사용합니다. 또한 구글이나 유튜브 등에서(계정으로 로그인 하지 않아도) 사용자가 접근한 동영상이나 검색 기록등을 쿠키로 저장해두고 해당 쿠키 데이터들을 바탕으로 검색 최적화에 사용하기도 하며, 대형 인터넷 쇼핑몰에서는 비슷한 방법으로 쿠키 데이터에 쇼핑 동향을 파악하여 제품 추천을 해주기도 합니다.
다음글
'웹[Web]' 카테고리의 다른 글
[HTTP] HTTPS 사용시 혼합 콘텐츠(Mixed Content) 및 안전하지 않은 콘텐츠에 대한 설명 (0) | 2019.01.23 |
---|---|
[HTTP] HTTPS란? 비전공자를 위한 HTTPS 개념 알아보기 (3) | 2018.09.12 |
JSON이란? JSON 규칙 (0) | 2018.03.24 |
[HTTP] 리다이렉트(Redirect)란? (2) | 2018.02.15 |
[HTTP] MIME Type(Multipurpose Internet Mail Extensions) (3) | 2018.01.30 |