쿠키 (Cookie)

An HTTP cookie (web cookie, browser cookie) is a small piece of data sent from a website and stored on the user's computer by the user's web browser.

— RFC 6265 표준 규격서 개요

유럽 사이트에 접속할 때마다 화면 절반을 가로막고 '쿠키 수집에 동의하십니까?'라고 악착같이 물어보며 현대인들의 인터넷 서핑 속도를 늦추는 귀찮은 팝업의 근원. 쿠키 없는 세상에서 살고 싶지만, 자동 로그인 기능이 사라지는 순간 우리는 아이디와 비번을 매번 입력해야 하는 전산 석기시대로 회귀할 것이다.(...)

1. 개요

웹 서버가 클라이언트에 전송하여 저장해 두는 아주 작은 크기(최대 4KB)의 텍스트 데이터 파일. HTTP 프로토콜의 핵심적인 특성인 무상태성(Stateless)과 비연결성(Connectionless)을 보완하기 위해 탄생했다. 브라우저가 동일한 서버에 다시 요청을 보낼 때마다 이 쿠키 조각을 HTTP 헤더에 자동으로 실어서 동반 전송하므로, 서버는 사용자를 기막히게 구별해 낼 수 있다.

2. 쿠키의 탄생과 상태(State)의 유지

초기 웹은 요청 하나를 처리하고 나면 과거의 연결 기록을 깨끗이 잊어버리는 아메바 수준의 기억력을 지니고 있었다. 이 때문에 온라인 쇼핑몰에서 상품을 장바구니에 담아도, 다음 페이지로 넘어가는 순간 장바구니가 텅 비어버리는 황당한 연결 단절이 발생했다. 넷스케이프의 엔지니어였던 루 몬툴리는 1994년 이 문제를 극복하기 위해 클라이언트 측 기억 저장소인 쿠키(Cookie)를 창안해 냈다.1 서버가 HTTP 응답의 Set-Cookie 헤더에 특정 값을 태워 보내면 브라우저는 이를 로컬 드라이브에 살포시 저장해 둔다. 이후 브라우저가 동일 서버의 임의 주소를 찌를 때마다 Cookie 헤더에 이를 실어 보냄으로써, 마침내 지속적인 로그인 상태와 서비스 개인화 설정이 실현되었다.

3. 웹 보안의 중심: 쿠키를 위협하는 창과 방패

쿠키는 브라우저가 자동으로 보관하고 전송한다는 치명적인 편리함 때문에, 해커들이 유저 권한을 훔치는 주된 표적이 된다. 자바스크립트를 활용해 쿠키 값을 은밀히 가로채는 XSS(Cross-Site Scripting) 공격을 막기 위해 브라우저 스크립트에서의 쿠키 접근을 철저히 차단하는 HttpOnly 옵션이 도입되었다. 또한, 타 사이트에서 위조된 요청을 보내 사용자의 쿠키 권한을 무단 도용하는 CSRF(Cross-Site Request Forgery) 해킹을 원천 차단하기 위해, 교차 출처 간 쿠키 전송의 경계를 획정하는 SameSite (Strict, Lax, None) 속성이 현대 브라우저의 핵심 방어 기제로 활약하고 있다.

4. 관련 밈 및 드립

유럽연합(EU)의 GDPR 법안 통과 이후, 전 세계 거의 모든 웹사이트가 의무적으로 띄워야 하는 '쿠키 정책 수집 동의' 배너와 팝업창을 지칭하는 밈. 사실 수집한다는 쿠키는 대부분 광고 트래킹용 타겟팅 쿠키가 90% 이상이지만, 사용자들은 대충 '모두 동의'를 클릭해 귀찮은 팝업을 치우는 기계가 되었다. 정작 개인정보 보호를 위한 법률이 일상 속의 가장 심각한 클릭 피로도를 유발하는 역설적인 상황이 조롱거리로 자주 소비된다.

4.2. 쿠키는 정말 먹는 쿠키에서 유래했다

기술 용어가 왜 하필 '과자 쿠키'인지에 대한 실무 유래담. 창시자인 루 몬툴리는 옛날 유닉스 운영체제 프로그램들이 사용하던 작은 데이터 교환용 주머니인 '매직 쿠키(Magic Cookie)'에서 영감을 얻었다고 밝혔다. 하지만 오늘날 수많은 초보 코딩 교실이나 어린이 코딩 도서에서는 이 쿠키를 문자 그대로 '초콜릿 칩 쿠키 부스러기가 바닥에 떨어져 자취를 남기는 동화 같은 이야기'로 묘사해 가르치고 있어 개발자들을 피식 웃게 만든다.(...)

5. 여담

  • Local Storage와의 차이점: 로컬 스토리지는 개발자가 원할 때 수동으로 읽고 쓰는 5MB 이상의 대형 저장창고지만, 쿠키는 브라우저가 매 HTTP 요청마다 알아서 강제로 전송하는 자동 수하물이다. 따라서 불필요하게 큰 데이터를 쿠키에 담으면 매 요청마다 무거운 쓰레기 패킷이 통신망을 왕복해 성능이 저하된다.
  • 세션 쿠키와 지속 쿠키: 만료 기한(Expires 또는 Max-Age)을 명시하지 않은 쿠키는 브라우저를 끄는 순간 메모리에서 지워지는 '세션 쿠키(Session Cookie)'가 된다. 반면 기한을 넉넉히 설정해 두면 하드디스크에 파일로 남아 1년 뒤에 다시 켜도 나를 기억하는 '지속 쿠키(Persistent Cookie)'가 된다.
  • 쿠키의 엄격한 용량 한계: 개별 쿠키의 최대 크기는 4,096바이트(4KB)로 제한되어 있으며, 하나의 도메인당 저장 가능한 개수도 대개 20~50개 내외다. 이 한계를 우회하려 꼼수를 부리다가는 초과된 쿠키가 경고도 없이 브라우저에서 자동 삭제되어 로그인 유지 기능이 통째로 붕괴된다.(...)

6. 관련 문서

각주

  1. 루 몬툴리는 넷스케이프 0.9 베타 브라우저를 출시하던 해에 장바구니 데이터를 사용자의 브라우저 메모리에 가볍게 보관하는 기술을 특허 등록 없이 완전 개방하여 웹 생태계에 공헌했다.