Cookie에 모든 것
HTTP 쿠키란?
HTTP 쿠키란 하이퍼 텍스트의 기록서의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 일컫는다. 쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다. - 위키백과
쿠키(Cookie)는 웹 사이트가 사용자의 웹 브라우저에 저장하는 작은 데이터 조각으로, 사용자가 해당 웹 사이트를 방문할 때 웹 서버로부터 전송된다. 쿠키는 주로 세션 관리, 개인화, 사용자 행동 추적 등 다양한 목적으로 사용된다. 쿠키는 브라우저의 로컬 저장소에 저장되며, 사용자의 개인 정보를 저장하는 것이 아닌 간단한 텍스트 데이터이다.
예를 들어 내가 들어간 카페에 '손님 출입부'가 있다고 가정을 해봤을 때, 카페에서 처음으로 방문한 날, 카페 직원은 우리의 이름과 좋아하는음료를 적어둔다. 그러면 이 정보들은 카페가 우리를 알아보고 다음에 방문할 때 우리를 더 잘 환영하고 빠르게 주문받을 수 있도록 도와준다.
이렇게 적힌 정보들은 '쿠키'와 비슷하다. 그리고 우리가 카페를 떠나는 순간, 카페에서는 이 정보들을 우리가 다시 방문할 때까지 보관한다.
그러면 다음에 우리가 카페를방문할 때, 직원들은 우리의 이름과 좋아하는 음료를 확인하고 이전 정보를 참고하여 더 좋은 서비스를 제공할 수 있게 된다.
만약 우리가 브라우저에서 쿠키를 사용하지 않도록 설정한다면, 이 비유에서 우리는 카페를 떠날 때마다 '손님 출입부'를 지우고 나가는 것과 같다. 그리고 다음에 다시 방문할 때마다 카페 직원들은 우리가 처음 방문한 것처럼 다시 우리의 이름과 주문 내역을 물어봐야 한다.
이처럼 쿠키는 웹 사이트가 우리를 인식하고 우리의 선호를 기억해 더 편리하고 개인화된 경험을 제공하는데에 사용되는 작은 데이터 조각이라고 볼 수 있다. 그러나 개인 정보 보호와 보안을 위해 쿠키 사용에 주의해야 한다는 점은 잊으면 안된다.
쿠키 동작 방식
1. 쿠키 생성 : 웹 서버는 HTTP헤더를 사용하여 브라우저에 쿠키를 생성하도록 요청한다.
2. 쿠키 저장 : 브라우저는 받은 쿠키 정보를 로컬 저장소에 저장한다. 쿠키는 클라이언트 측에서 저장되기 때문에 서버에 의해 직접적으로 조작되지 않는다.
3. 웹 서버와의 통신 : 사용자가 동일한 웹 사이트를 다시 방문할 때, 브라우저는 웹 서버로 쿠키를 함께 전송하고, 이를 통해 웹 서버는 사용자를 식별하고 이전에 저장한 정보를 참조할 수 있다.
4. 쿠키 만료 : 쿠키는 만료 날짜가 지정되면 해당 날자가 유지된다. 만료 날짜가 지정되지 않은 경우 세션 쿠키로 간주되며, 브라우저가 종료되면 브라우저에 의해 자동으로 삭제된다.
5. 도메인과 경로 : 쿠키는 특정 도메인과 경로에 바인딩된다. 도메인은 쿠키가 전송될 수있는 웹사이트의주소를 지정하며, 경로는 쿠키가 어떤 경로에서 유효한지를 지정한다. 이를 통해 쿠키를 제어하고 보안을 유지할 수 있다.
한 웹사이트에서 쿠키를 생성하고 클라이언트에게 전송하면, 그 이후로는 해당 웹사이트의 모든 페이지 요청에서 그 쿠키가 함께 전송된다. 이때, 쿠키가 유효한 돔인과 경로가 있는지 확인하여 쿠키를 전송한다.
예를들어 "example.com"이라는 도메인에서 "example.com/login"이라는 경로에서 로그인한 후 쿠키가 생성되었다면, 이 쿠키는 "example.com" 도메인과 "/login" 경로를 바탕으로 저장되어 해당 도메인의 모든 경로에서 유효하다.
6. 보안과 개인 정보 : 쿠키는 사용자의 브라우저에서 관리되므로 보안과 개인 정보 보호에 유의해야 한다. 민감한 정보를 저장하거나 제3자가 쿠키에 접근하는 것을 방지해야 한다. 대부분의 브라우저는 개인 정보 보호를 강화하기 위해 사용자가 쿠키를 거부하거나 제한할 수 있는 설정을 제공한다.
쿠키 타입
- 세션 쿠키 (Session Cookies)
브라우저를 닫을 때 또는 세션이 만료될 때 자동으로 삭제되는 일시적인 쿠키이다. 이러한 쿠키는 사용자의 세션을 유지하고 세션 동안 사용자를 식별하는 데 사용된다. 주로 로그인 정보를 유지하거나 장바구니와 같은 임시 데이터를 저장하는 데에 활용되고,
보안적인 측면에서 일시적이기 때문에 비교적 안전하다. - 영속 쿠키 (Persistent Cookies)
설정된 만료 날짜까지 브라우저에 남아있는 지속적인 쿠키이다. 사용자가 브라우저를 닫아도, 다시 방문할 때도 계속해서 존재하며, 사용자의 개인화된 설정이나 선호도를 기억하는 데에 주로 사용된다. 예를 들어, "로그인 상태 유지" 기능을 제공하거나 사용자가 이전에 선택한 언어 설정을 기억하는 데 사용될 수 있다.
쿠키 옵션
- MaxAge
쿠키의 유효 기간을 초 단위로 설정하여 쿠키가 얼마 동안 유효한지를 결정한다. MaxAge를 사용하면 브라우저를 닫아도 쿠키가 유지되며, 설정된 시간이 지나면 자동으로 삭제되어 사용자의 세션을 유지하거나 일정 기간 동안 로그인 상태를 유지하는 데에 유용하다. - Expires
쿠키의 만료 날짜와 시간을 GMT(Greenwich Mean Time) 형식으로 직접 지정한다. Expires 값이 설정된 경우, 해당 날짜와 시간 이후에는 쿠키가 더 이상 유효하지 않게 된다. - Secure
보안 쿠키를 위해 사용되는 중요한 옵션 중 하나이다. Secure 옵션이 설정된 쿠키는 HTTPS(SSL/TLS) 프로토콜을 통해서만 전송되도록 보장되어 보안 통신을 보장한다. 중요한 개인 정보가 포함된 쿠키의 경우에는 Secure 옵션을 활성화하여 보안성을 강화하는 것이 중요하다. - HTTPOnly
보안적인 측면에서 중요한 옵션이다. HTTPOnly 옵션이 설정된 쿠키는 JavaScript를 통해 쿠키에 접근하는 것을 방지하여 XSS(Cross-Site Scripting) 공격 등을 어렵게 만들어줍니다. 이로 인해 악의적인 스크립트로부터 쿠키가 보호될 수 있다. - SameSite
CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 중요한 옵션이다. SameSite 옵션은 쿠키가 동일 출처(Cross-Site)에서만 전송되도록 제한하여 외부 사이트로부터의 요청을 차단하여 보안성을 강화한다.
쿠키의 유효기간을 설정하는 MaxAge와 Expires의 차이점
MaxAge 값은 양수 정수로 표현되며, 쿠키가 클라이언트에 저장된 후 해당 값의 시간만큼 유효하다. 예를 들어 MaxAge = 3600은 쿠키가 클라이언트에 저장된 후 1시간(60*60)동안 유효하다는 것을 의미한다. 이 시간이 지나면 브라우저는 쿠키를 자동으로 삭제한다.
Expires는 쿠키의 만료 날짜를 특정 날자와 시간으로 직접 지정하는 옵셥이다. Expires값은 GMT형식으로 표현되며, 쿠키가 해당 날짜와 시간 이후에는 더 이상 유효하지 않게 된다.
GMT(Greenwich Mean Time)란?
영국 런던의 그리니치 천문대를기준으로 한 세계 표준 시간
MaxAge와 Expires 중에서 MaxAge는 상대적인 시간으로 지정되기 때문에 클라이언트의 시스템 시간에 영향을 받지 않고 일관성을 유지할 수 있으나 Expires는 절대적인 시간으로 지정되기 때문에 클라이언트의 시스템 시간과의 동기화를 고려해야 한다.
만약 쿠키에 만료시간 및 유효시간을 설정하지 않으면 해당 쿠키는 세션 쿠키로 취급되어 브라우저가 닫힐 때 자동으로 삭제되는 일시적인 쿠키로서, 브라우저 세션이 유지되는 동안만 유효하게 된다.