-
쿠키(Cookie)란 무엇인가?CS지식/네트워크 2021. 6. 14. 21:33
쿠키(Cookie)는 사용자를 식별하고 세션을 유지하는 방식 중에서 가장 많이 사용하는 방식이다.
쿠키는 캐시와 충돌할 수 있어 대부분의 캐시나 브라우저는 쿠키에 있는 내용물을 캐싱하지 않는다.
쿠키는 크게 세션 쿠키와 지속 쿠키로 나뉘어 진다.
세션 쿠키는 사용자가 사이트를 탐색할 때 설정과 선호 사항들을 저장하는 임시 쿠키로 브라우저를 닫으면 삭제된다.
지속 쿠키는 사용자가 주기적으로 방문하는 사이트에 대한 설정 정보나 로그인 이름을 유지하기 위해 사용하는 쿠키이다. 지속 쿠키는 디스크에 저장되어 브라우저를 닫거나 컴퓨터를 재시작해도 남아있다.
쿠키가 사용자에 대한 정보를 저장하여 여러 사용자들을 식별하는데 쓰이는 것은 알겠다.
그러면 이러한 쿠키는 어떻게 구현될까?
처음에 사용자가 웹 사이트에 접속하면 웹 서버는 사용자에 대한 정보가 없어 사용자가 누구인지 전혀 모른다.
사용자의 요청에 대한 응답을 보낼 때 웹 서버는 사용자를 식별하기 위해 유일한 값을 쿠키에 할당한다.
여기서 말하는 유일한 값은 임의의 이름(ex. id, name...) = 값(ex. 2193jl, brown...)형태이고 Set-Cookie 또는 Set-Cookie2 같은 HTTP 응답 헤더에 기술되어 사용자에게 전달한다.
(이외에도 다양한 정보를 쿠키에 담을 수 있는데 아래에서 자세히 알아보자.)
이렇게 사용자별로 유일한 값으로 할당된 쿠키를 가지게 되고 서버는 추후에 사용자가 요청을 보내면 이 쿠키 값으로 데이터베이스에서 사용자의 정보를 찾는데 사용할 수 있다.
쿠기가 서버에서 생성되고 쿠키의 값을 서버가 활용하는 것을 알았다.
그러면 쿠키를 받게 된 클라이언트에서는 어떻게 처리할까?
클라이언트(브라우저)는 서버로부터 온 Set-Cookie 또는 Set-Cookie2 HTTP 응답 헤더에 있는 값을 브라우저 쿠키 데이터베이스에 저장한다.
추후에 사용자가 같은 사이트를 방문하면 브라우저는 이전에 서버가 할당했던 쿠키를 Cookie 요청 헤더에 기술해 전송한다.
이렇게 구현되는 쿠키의 구성 요소를 알아보자.
현재 사용되는 쿠키 명세는 Version0과 version1이 있는데 Version1은 version0의 확장버전으로 널리 사용되지는 않는다.
먼저, Version0에 정의된 쿠키의 구성요소를 알아보자.
Version0에는 set-cookie 응답 헤더와 cookie 요청 헤더와 쿠키를 조작하는 데 필요한 필드들을 정의했다.
set-cookie 헤더는 다음과 같은 속성을 가지고 있다.
속성 설명 이름=값 필수 속성으로 웹 서버는 사용자가 추후에 다시 방문하면 읽어올 정보를 이름=값 형태로 어떠한 것이른 만들 수 있다.
ex) Set-Cookie: id=0101; name = ratelExpires 선택 속성으로 쿠키의 생명주기(보관기간)를 나타내는 날짜 문자열을 나타낸다. 해당 날짜가 되면 쿠키는 삭제된다. 날짜의 형식은 아래와 같다.
요일, DD-MM-YY HH:MM:SS GMT
쿠키에 Expires를 명시하지 않으면 해당 쿠키는 사용자의 세셩이 끝나면 파기된다.
ex) Set-Cookie: id=0101; expires: Tuesday, 11-Feb-21 22:22:22 GMTDomain 선택 속성으로 브라우저는 이 속성에 기술된 도메인을 사용하는 서버 호스트 명으로만 쿠키를 전송한다.
이 속성에는 2개에서 3개의 영역을 가지는 도메인을 기술해야한다.
(.com, .kr 등과 같이 1개의 영역을 가지는 도메인을 기술하면 안된다는 것이다.)
도메인이 명시되어 있지 않으면, Set-Cookie 응답을 생성한 서버의 호스트 명을 기본값으로 사용한다.
ex) Set-Cookie: id=0101; domain: "naver.com"Path 선택 속성으로 이 속성으로 서버에 있는 특정 문서에만 쿠키를 할당할 수 있다.
Path 속성에 기술된 값이 URL 경로의 앞부분과 일치하면 쿠키를 전달한다.
예를 들어, '/ratel' 경로는 '/ratelgood'과 '/ratel/dev.html'에 들어맞아 해당 URL에 접속하면 쿠키를 전달한다.
'/'로 Path 속성을 지정하면 도메인에 있는 모든 것에 들어맞아 쿠키를 전달하게 된다.
Path 속성을 명시하지 않으면 Set-Cookie 응답을 전달하는 URL 경로가 사용된다.Secure 선택 속성으로 secure 속성이 포함되어 있으면 쿠키는 HTTP가 SSL 보안 연결을 사용할 때만 쿠키를 전송한다.
ex) Set-Cookie: id = 0010; secureVersion1에 기술된 내용은 Set-Cookie2와 Cookie2 헤더의 표준이 있고 Version 쿠키는 Version 0 시스템과도 호환된다.
Version1에서 추가된 주요 변경사항은 다음과 같다.
- 쿠키마다 그 목적을 설명하는 설명문이 있다.
- 파기 주기에 상관없이 브라우저가 닫히면 쿠키를 강제로 삭제할 수 있다.
- 쿠키의 생명주기를 결정하는 값에서 정확한 날짜를 기입하는 신 초 단위로 상대적인 값을 지정할 수 있다.
- 도메인과 경로뿐만 아니라 URL의 포트번호로도 쿠키를 제어할 수 있다.
- 쿠키의 버전을 나타낸다.
- 사용자 이름과 추가적인 키워드를 구분짓기 위해 Cookie 헤더에 $접두어를 사용한다.
지금까지 알아본 쿠키는 사용자를 식별하는데 사용될 뿐만 아니라 사용자를 추적하는 데에도 사용할 수 있다.
'CS지식 > 네트워크' 카테고리의 다른 글
다이제스트 인증이란 무엇인가 (0) 2021.06.20 HTTP 인증이란 무엇인가 (0) 2021.06.17 클라이언트 식별이란 무엇인가? (0) 2021.06.11 게이트웨이(Gateway)란 무엇인가? (0) 2021.06.08 캐시(Cache)란 무엇인가? (0) 2021.06.05