쿠키란 무엇인가?

쿠키는 웹 서버가 생성하여 웹 브라우저로 전송하는 작은 정보 파일이다. 웹 브라우저는 수신한 쿠키를 미리 정해진 기간 동안 또는 웹 사이트에서의 사용자 세션 기간 동안 저장한다. 웹 브라우저는 향후 사용자가 웹 서버에 요청할 때 관련 쿠키를 첨부한다.
이것이 쿠키에 대한 아주 딱딱한 설명이다. 사실 쿠키에 대해 잘 아는 사람은 위의 텍스트만 봐도 이해가 갈 수 있지만 쿠키에 대해 전혀 모르는 사람이라면 저 위의 글씨만 읽고 쿠키에 대해 완전히 이해하기란 쉽지 않을것이다. 다음의 예시를 보며 쿠키에 대해 더 알아보도록 하자.

쿠키를 왜 써야할까?

쿠키를 왜 써야할까? 그 이유를 보여주기 가장 적절한 예시가 바로 로그인이다. 상상을 해보자. 사용자가 로그인을 클릭하는 순간 사용자의 정보가 서버로 전달될것이고, 해당 데이터가 유효하다면 로그인 성공과 관련된 response를 서버에서 클라이언트로 보내줄것이다. 로그인을 한 후, 홈 화면으로 돌아갔을 때, 서버는 클라이언트의 로그인 정보를 알 수 있을까? 정답은 알 수 없다이다. 그 이유는 HTTP는 무상태(Stateless) 프로토콜이기 때문이다. 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어지고, 클라이언트가 다시 요청했을때는 서버는 이전 요청을 기억하지 못한다. 다시 말해 클라이언트와 서버는 서로 상태를 유지하지 않는 것이다.

쿠키를 쓴다면?

다시 로그인 얘기로 돌아와서 쿠키를 사용하면 어떤 일이 일어나는지 알아보자.
image
위의 그림에서 보면, 클라이언트가 로그인을 한 후 서버에서 Set-Cookie를 하고, 그러면 클라이언트 쪽의 쿠키 저장소에 해당 쿠키가 저장된다.
image
그 이후로 다른 페이지에 접근하면, 클라이언트가 서버에 요청을 보낼 때 무조건 쿠키 저장소를 조회하고, 보내야 할 쿠키가 있다면 HTTP header에 쿠키를 같이 보내게된다. 그러면 서버쪽에서 쿠키 정보를 가지고 홍길동이라는 사람이 로그인을 했구나 라고 알 수 있는 것이다. 쿠키를 한 번 설정해두면, 해당 쿠키가 만료되기 전까진 모든 클라이언트 요청에 쿠키 정보가 자동으로 포함된다.

쿠키 추가정보

쿠키의 단점

쿠키 정보는 항상 서버에 전송되므로, 네트워크 트래픽을 추가로 유발한다는 단점이 있다. 따라서 쿠키에는 최소한의 정보만들 사용해야한다. 모든 요청에 전송하고싶지 않고, 웹 브라우저 내부에 데이터를 저장해 가지고 있고 싶다면 웹 스토리지 (localStorage, sessionStorage)를 사용하면 된다. 또한 쿠키와 웹 스토리지에는 주민번호, 카드번호 등 보안에 민감한 정보를 저장하면 안된다.

생명주기

쿠키는 생성할 때 만료일을 지정할 수 있는데, 만약 만료 날짜를 지정하지 않으면 브라우저 종료시 까지만 유지된다.

도메인

쿠키는 도메인을 지정할 수 있다. 만약 domain=example.org로 지정했다면, 해당 도메인 뿐 아니라 서브 도메인에도 쿠키가 적용이 된다. (dev.example.org, cloud.example.org, …)

경로

쿠키에는 또한 경로도 지정할 수 있다. path=/home으로 지정한다면, 이 경로를 포함한 하위 경로 페이지에서 쿠키 접근이 가능해진다. 일반적으로는 root path를 사용하는데 (path=/), 그렇게 하면 하위 모든 경로에서 쿠키를 사용할 수 있기 때문이다.

마치며

이번 포스팅에선 HTTP 쿠키에 대해서 알아보았다. 최근에는 웹 스토리지의 사용성이 증가해 쿠키의 대안으로서 많이 사용되는 추세이기는 하나, 쿠키는 꼭 알아둬야할 개념이다. 나중엔 쿠키와 웹 스토리지를 심층 비교, 분석하는 포스팅을 기회가 되면 올리도록 해봐야겠다.

참고 링크

CLOUDFARE 쿠키란?
모든 개발자를 위한 HTTP 웹 기본 상식

댓글남기기