브라우저에 데이터를 저장하는 방법은 여러가지가 있다.
쿠키, 세션, 캐쉬들이 웹에 데이터를 저장하는 방법 중 하나라는 것은 알고 있으나 정확한 차이점, 언제 어떤 때에 무엇을 써야하는지 명확하지가 않았다.
이번기회에 각 기술들의 차이를 명확하게 정리해보려고 한다!
우선 가장 먼저 쿠키와 세션을 알아보자.
쿠키는 서버에 의해 응답받은 정보가 브라우저에 저장되는 데이터 저장 방식으로 주로 인증정보에 사용된다.
클라이언트측에서 저장를 하기보다 서버쪽에서 HTTP 응답헤더에 set-cookie에 내용을 넣어 응답하면 브라우저가 해당 내용을 브라우저에 저장한다.
이제 해당 쿠키를 생성하도록한 서버 (사이트)에 접속할때마다 쿠키의 내용이 요청헤더에 담겨 함께 전달된다.
자바스크립트를 통해 쿠키에 접근하거나 쿠키를 작성하는것 또한 가능하다.
document.cookie 속성을 사용하면 되는데 주의할 점은 cookie 프로퍼티는 데이터 프로퍼티가 아닌 접근자 프로퍼티이다! (getter,setter)
쿠키는 한계가 존재한다. 먼저 하나의 쿠키는 4KB를 넘을 수 없다.
또한, 도메인 하나당 저장할 수 있는 쿠키의 개수는 20여개이다.
그외에도 쿠키에 설정할 수 있는 다양한 옵션이 있다.
Secure, HttpOnly, SameStie, path, domain..
대부분 쿠키의 보안을 강화하기 위한 옵션들이다. 쿠키는 브라우저 자체가 저장되기 때문에 보안적으로 안전하다고 할 수 없다. 중요한 정보는 쿠키에 저장해서는 안된다.
세션은 쿠키와 비슷한 역할을 한다. 둘의 큰 차이점은 데이터가 저장되는 위치이다.
쿠키는 브라우저, 즉 클라이언트측에 저장되나 세션은 서버측에 저장된다는 것이 가장 큰 차이이다. 세션은 단순히 세션아이디만은 클라이언트측에 보내 저장하도록한다. 그리고 그 세션아이디에 해당하는 실제 값은 세션아이디를 키값으로 서버측에 저장된다.
클라이언트측에는 단순히 세션ID만 저장되기때문에 정보에 접근할 수 없다. 서버를 통해서만 정보에 접근이 가능하다.
클라이언트측에는 단순히 세션ID만 저장되고 서버에 요청하는 값이므로 서버의 접속이 가능하다면 제한되는 용량이나 갯수제한은 없다.
세션은 쿠키와 달리 브라우저가 종료되면 저장된 세션정보가 모두 사라진다.
그렇다면 쿠키와 세션 중 어느것을 사용하는것이 더 좋을까.
쿠키는 세션보다 속도가 빠르나 보안적으로는 좋지않다. 세션은 보안적으로는 쿠키보다 안전하나 속도가 느리고 서버에 부하를 줄 수 있다.
간단한 정보라면 쿠키를 사용하고 보안적으로 중요한 정보라면 토큰 기반의 인증방식을 채택하는것이 좋다고 한다.
ref: 자바스크립트 인포 cookie