쿠키(Cookie)
쿠키
로그인 정보를 유지하기 위해 여러 방법을 찾아보다가 쿠키를 활용해야한다는것을 알게 되어 쿠키의 개념을 정리하려고 한다.
로그인상태 유지와 같이 유지하고싶은 데이터가 있는 경우가 있을것이다.
무상태 프로토콜은 클라이언트 상태를 유지할수없다.
웹은 HTTP를 통해 요청 & 응답 구조로 서버와 클라이언트간 통신이 이루어지는데, 이 HTTP는 기본적으로 무상태(stateless) 프로토콜이다.
• 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다.
• 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다.
• 클라이언트와 서버는 서로 상태를 유지하지 않는다
무상태 프로토콜에서
로그인 정보를 유지하는 등 클라이언트의 상태를 기억,유지하려면
url 파라미터를 통해 데이터를 계속 새로 생성하여 주고받아야 하는데 이는 모든 요청에 대하여 동일한 정보를 새로 생성 및 전달
해야 하기때문에 매우 비효율적인 방법이다.
쿠키의 탄생
웹은 쿠키라는 개념을 도입해서 클라이언트 상태유지를 위해 매번 새로 데이터를 생성할 필요가 없게끔 했다.
쿠키 데이터는 HTTP 헤더에 포함된다.
쿠키의 동작 핵심
쿠키를 생성하면 브라우저는 브라우저 내부 쿠키 저장소에 유지하고자 하는 데이터를 저장
해둔다.
이 데이터는 클라이언트 요청시 항상 서버에 함께 전달된다.
사용자 로그인 세션 관리 , 광고 정보 트래킹 (사용자 관심사 정보) 등과 같은 데이터 유지에 쿠키를 사용한다.
하지만 요청시 서버에 항상 전달됨으로
네트워크 트래픽을 추가로 유발
하게 된다.
따라서
id세션,인증토큰과 같은최소한의 정보만 저장
하고 보안에 민감한 데이터는 쿠키에 저장하면 안된다.
다음엔 쿠키 보안에 관해 정리하고자 한다.
쿠키 생성
클라이언트로부터 요청을 받은 서버는 유지할만한 유효 데이터를 Set-Cookie(쿠키로 만든다)하여 브라우저에게 응답해준다.
브라우저는 서버로부터 받은 쿠키데이터를 브라우저 쿠키 저장소에 담아 유지한다.
이후 해당 브라우저의 모든 요청에는 쿠키 저장소의 쿠키 데이터가 자동으로 포함되게 된다. 매번 데이터를 새로 생성할 필요가 없어진 것이다.
쿠키 - 생명주기
쿠키는 다음 2가지 종류가 있다.
• 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
• 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
브라우저 종료시 로그아웃이 되길 기대하므로 필요한 것은 세션 쿠키이다