월간 <네트워커> - 정보화에 대한 다른 시각
26호 레니의'떼끼'
쿠키에 대하여
사용자들의 홈페이지 접속을 돕기위한 정보

레니  
조회수: 5467 / 추천: 66
쿠키(cookie)는 웹의 필수적인 요소의 하나로서, 웹서버가 사용자의 피시(PC)에 자신이 필요한 정보를 심어놓기 위한 파일입니다. 사용자가 웹서버에 요청을 보냈을 때 웹서버에서는 HTTP 헤더를 통해 레퍼러(referer)나 사용자의 브라우저 종류 등 여러가지 정보를 얻을 수 있는데, 이런 기본적인 정보와는 별도로 웹서버가 필요로 하는 특수한 정보를 저장하고 사용하기 위해 쿠키를 심거나 읽어들입니다.
웹서버가 쿠키를 심는 방법은 매우 간단합니다. 웹에서 정보를 전달하고 전달받기 위해서 HTTP라는 통신규약을 사용합니다. 웹브라우저의 주소창에 ‘http://’라고 시작하는 것도 HTTP 프로토콜을 사용하겠다는 의미이죠. 이 HTTP 프로토콜에서는 요청한 정보(HTML 문서 등) 앞에 기본적인 정보들을 먼저 보냅니다. 이를 HTTP 헤더라고 부르는데, 이를테면 웹서버의 호스트 이름(jinbo.net 등), 문서의 캐릭터셋(EUC-KR, UTF-8 등), 문서가 갱신된 시간 등이 여기에 들어가게 되죠. 쿠키도 HTTP 헤더에 한 항목으로 들어가며, 웹서버에서 헤더에 특정 쿠키 정보를 넣어 보내면 사용자의 웹브라우저는 이 정보를 받아 자신의 하드디스크에 저장합니다.

웹브라우저가 저장한 쿠키 정보를 확인하는 방법은 브라우저마다 다른데, 인터넷익스플로러 5.0이상의 경우 < ‘도구’ → ‘인터넷 옵션’→ ‘일반’(탭) → ‘임시인터넷파일’의 ‘설정’ → ‘파일보기’>를 통해 확인할 수 있습니다. ‘Cookie:renegade@abc.net’로 표시된 파일들이 인터넷익스플로러가 저장한 쿠키들입니다.
모질라 파이어폭스(Mozilla Firefox)를 사용하신다면 쿠키 정보를 보다 쉽게 볼 수 있습니다. 한글 파이어폭스 1.0.6을 기준으로 본다면, < ‘도구’ → ‘설정’ → 왼쪽 메뉴에서 ‘개인 정보’ → ‘쿠키’ 항목에서 ‘쿠키 보기’>를 선택하면 현재 저장되어 있는 쿠키 정보를 쉽게 볼 수 있습니다.

쿠키의 내용을 보면 뭔가 복잡해 보이지만 사실 규칙은 단순합니다. 쿠키의 기준은 사이트의 경로와 쿠키 이름, 그리고 쿠키값입니다. blog.jinbo.net/renegade라는 주소의 블로그에 ‘curr_redlog’라는 이름을 가진 쿠키가 있는데, 이 쿠키는 ‘1123165988’라는 값을 가진다는 식이죠. 만약 제가 제 블로그에 들렀다가 다른 곳으로 이동한 뒤 다시 제 블로그로 돌아왔을 때 이 쿠키가 남아있다면, 제 웹브라우저는 웹서버에 자동으로 이전에 저장되었던 쿠키값을 보내주게 됩니다. 웹서버에서는 이 값을 사용해서 원하는 동작을 보다 수월하게 할 수 있게 되는 셈이죠.
그럼 blog.jinbo.net/renegade의 curr_redlog라는 쿠키를 어떻게 사용하는지 예를 들어 설명하겠습니다. 방금 얘기한 curr_redlog라는 쿠키는 블로그의 방문자 수를 카운팅하기 위한 목적으로 사용되고 있습니다. 방문자 수를 카운팅하기 위해 여러가지 방법이 있겠지만, 가장 쉽고 많이 사용하는 방법은 이렇게 쿠키를 이용하는 것입니다. 물론 페이지를 읽을 때마다 카운터를 올려주면 쿠키까지 필요 없을지 모르겠지만, 보다 정확하게 방문자 수를 측정하기 위해서는 별도의 처리가 필요합니다. 예를 들면, 한 번 블로그에 들어온 유저가 얼마 되지 않는 시간 내에 다시 들어올 때 방문자 수가 올라가지 않는다, 또는 주인장이 들어오면 방문자 수는 올라가지 않는다 등의 처리가 필요한 것이죠. 이 중에서 전자의 문제를 해결하기 위해 curr_redlog라는 쿠키를 사용합니다.

먼저 특정 사용자 레니가 진보네의 블로그(http://blog.jinbo.
net/jinbone/)에들어오면, 웹브라우저는 blog.jinbo.net/jinbone 에 대한 쿠키를 웹서버에 날려줍니다. 만약 모든 쿠키를 삭제한 상태라고 가정하면 웹서버는 쿠키 정보를 받지 못하게 되죠. 이런 경우, 쿠키가 없음을 확인했으므로 웹서버는 방문자 수를 하나 올린 후, 레니의 컴퓨터에 페이지를 전달하기 전에 blog.jinbo.net/jinbone에 대한 쿠키를 심습니다. 이름은 ‘curr_redlog’, 값은 ‘1123165988’로 말이죠. 이 쿠키는 다음에 레니가 다시 진보네 블로그에 들어올 때 웹서버에 전달되게 되고, 웹서버는 이번엔 쿠키가 있으므로 방문자 수를 올리지 않습니다.

그런데 이렇게만 동작하게 된다면 문제가 생길 수밖에 없습니다. 다음 날 레니가 진보네를 방문하더라도 방문자 수가 올라가지 않을테니까요. 이런 문제를 방지하기 위해 쿠키값을 사용합니다. 위에서 설명할 때 curr_redlog 쿠키의 값을 1123165988로 정했었죠. 이 값은 그냥 아무렇게나 뽑은 것이 아니라, 바로 사용자가 마지막으로 방문한 시간을 나타내는 값입니다. 웹서버에서는 쿠키를 읽을 때 이 값을 받아서 현재 시각과 비교를 합니다. 진보블로그에서는 마지막 방문 이후 1시간이 지난 뒤에 사용자가 다시 블로그를 방문했을 경우에 방문자 수를 올려주기로 정했습니다. 따라서 다음 날 블로그를 방문했을때 마지막 방문 이후 1시간 이상이 경과했음을 알 수 있기 때문에, 방문자 수를 하나 올려줄 수 있습니다.

이와 비슷한 방식으로 웹어플리케이션에서 쿠키를 사용하는 곳은 매우 많습니다. 대표적인 예가 로그인 화면에서의 ‘아이디(ID) 저장’ 기능인데, 웹서버는 사용자가 입력해서 인증에 성공한 아이디를 사용자의 컴퓨터에 쿠키로 심어놓습니다. 만약 이 사용자가 다음에 다시 같은 로그인 화면을 찾을 때, 저장해 놓은 쿠키값을 읽어 미리 아이디 입력폼에 넣어주면 사용자는 번거롭게 사이트를 방문할 때마다 아이디를 넣어야 하는 수고를 덜 수 있습니다. 이외에도 사용자 인증에서 중요한 역할을 하는 세션아이디도 일반적으로 쿠키를 사용하며, 알게 모르게 쿠키를 사용하는 곳이 대단히 많습니다.

당연히 쿠키에는 특정 사용자의 개인적인 정보가 많이 들어있을 수밖에 없습니다. 따라서 이를 악용하는 방법도 많은데, XSS(Cross Site Scripting)를 통해 타인의 쿠키를 훔쳐 세션 하이재킹하는 해킹방법이나 사용자의 웹서핑 경로를 기록하는 트래킹 쿠키 등이 대표적인 예가 될 수 있겠네요. 따라서 PC방 같이 불특정 다수가 공용으로 사용하는 컴퓨터에서 서핑 등을 한 이후에는 모든 쿠키 정보를 삭제하고 자리를 뜨는 것이 안전합니다.

컴퓨터에 있는 쿠키 정보를 삭제하려면 인터넷익스플로러의 경우, < ‘도구’ → ‘인터넷 옵션’ → ‘일반’(탭) → ‘임시인터넷파일’의 ‘쿠키 삭제’> 모질라 파이어폭스의 경우, < ‘도구’ → ‘설정’ → 왼쪽 메뉴에서 ‘개인 정보’ → ‘쿠키’항목에서 ‘쿠키 보기’→ ‘모든 쿠키 삭제’> 를 선택하시면 됩니다.

보다 자세한 정보를 원하신다면,
마이트로소프트.com의 쿠키 설명
http://www.microsoft.com/info/ko/cookies.mspx
terms.co.kr에서의 쿠키 설명
http://terms.co.kr/cookie.htm
등을 참고하세요.
추천하기