[concepts] 쿠키(Cookie)와 세션(Session), 웹스토리지(Web Storage)

유재민·2021년 12월 31일
0
post-custom-banner

쿠키와 세션, 웹스토리지를 왜 사용할까?

결론은 지속적인 데이터 교환을 위해 사용한다. HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초가 된다. 이 HTTP프로토콜의 특징은 클라이언트가 서버에게 Request를 보내고 서버가 클라이언트에게 Response를 보내면 접속을 종료하며 통신이 끝나면 상태 정보를 유지하지 않는다. 즉, 클라이언트의 로그인 정보나 브라우저에서 입력한 값 등이 페이지를 이동할 때 마다 초기화 된다. 이러한 문제점을 해결하기 위해 데이터 저장에 사용한다.

쿠키(Cookie)

쿠키란?

서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다.

쿠키의 동작과정
1. 클라이언트가 서버로 자원을 요청
2. 서버에서 쿠키를 생성
3. HTTP 헤더에 쿠키를 포함시켜 응답
4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

만료 날짜/시간을 지정하면 세션 쿠키로 저장된다.

만료 날짜/시간을 지정하지 않으면 항상 유지하라는 것으로 판단해 지속 쿠키에 저장된다.


세션(Session)

세션이란?

보안이 취약하다는 쿠키의 한계점을 극복하기 위해 사용한다. 쿠키를 기반으로 하여 동작하기는 하지만 사용자 정보를 클라이언트 측이 아닌 서버 측에서 관리한다는 점이 다르다. 클라이언트는 서버로부터 서버에서 관리하고 있는 세션 정보를 찾기 위한 세션 ID만 전달받는다. 세션 정보를 저장하는 장소는 서버 메모리일수도 있지만 다중 서버 환경에서는 외부 저장소를 사용한다.

세션의 동작과정
1. 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
3. 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
4. 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답


쿠키와 세션의 차이점

쿠키(Cookie)세션(Session)
저장 위치클라이언트(=접속자 PC)웹 서버
저장 형식TextObject
만료 시점쿠키 저장시 설정
(브라우저가 종료되도, 만료시점이 지나지 않으면 자동삭제되지 않음)
브라우저 종료시 삭제
(기간 지정 가능)
사용하는 자원(리소스)클라이언트 리소스웹 서버 리소스
용량 제한용량 제한 총 300개
하나의 도메인 당 20개
하나의 쿠키 당 4KB(=4096byte)
서버가 허용하는 한 용량제한 없음
속도세션보다 빠름쿠키보다 느림
보안세션보다 안좋음쿠키보다 좋음

세션을 사용하면 좋은데 왜 쿠키를 사용할까?
세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문에 쿠키가 유리한 경우가 있다.


웹 스토리지(Web Storage)

웹 스토리지란?

서버가 아닌, 클라이언트에 데이터를 저장할 수 있도록 지원하는 HTML5의 새로운 기능이다.
기존 웹 환경에서 사용하는 쿠키와 매우 유사하지만 쿠키의 단점을 극복하는 개선점 등이 추가되어 도입되었다.

로컬스토리지(Local Storage)

  • Key-value구조
  • window.localStorage에 위치
  • 데이터는 도메인 단위로 공유되어, 같은 브라우저 내의 서로 다른 창/탭에서도 같은 데이터를 공유할 수 있으며 도메인이 다른 경우 접근할 수 없다.
  • 데이터가 영구적으로 지속된다. 사용자가 직접 삭제할 수도 있다.
  • 개인 PC에 사용하는 자동 로그인 기능, 장바구니, 블로그 글 임시저장 등에 사용된다.

세션스토리지(Session Storage)

  • Key-value구조
  • window.sessionStorage에 위치
  • 같은 도메인일 경우에도 창/탭 단위로 세션이 다르면 데이터에 접근할 수 없다.
  • 데이터가 영구적으로 지속되지 않으며 브라우저를 닫을때나 세션이 끊기게되면 삭제된다.
  • 일회성 로그인, 블로그 글 에디터의 자동저장 기능 등에 사용된다.

쿠키와 웹 스토리지의 차이점

쿠키(Cookie)로컬 스토리지(Local Storage)세션 스토리지(Session Storage)
용량4kb10mb5mb
브라우저 지원HTML4/HTML 5HTML 5HTML 5
접근 가능모든 창모든 창동일한 탭
생명 주기수동 설정삭제되지 않음
(사용자가 의도적으로 직접 삭제할 수 있음)
탭 닫을 때
저장소 위치클라이언트(브라우저) 및 서버클라이언트(브라우저)클라이언트(브라우저)
웹의 요청과 함께 서버로 전송아니오아니오
  • 쿠키는 개수와 용량에 있어 제한을 걸어 두고 있다. 하나의 사이트에서 저장할 수 있는 최대 쿠키 수는 20개이며 4kb로 제한하고 있다. 하지만 쿠키도 하위키를 이용하면 이러한 제한을 일부 해소할 수 있다.
  • 서버 요청을 할 때마다 자동으로 서버에 전송되며 임의로 고치는 것이 가능해서 보안에 취약하다. 하지만 웹 스토리지는 필요한 경우에만 꺼내 쓰므로(명시적 전송) 자동 전송의 위험성이 없다. 이것은 네트워크 트래픽 비용을 줄여 준다는 주요한 장점이 된다.
  • 단순 문자열을 넘어(스크립트) 객체정보를 저장할 수 있다. 문자열 기반 데이터 이외에 체계적으로 구조화된 객체를 저장할 수 있다는 것은 개발 편의성을 제공해 주는 주요한 장점이 된다.

저장소 별 사용예시

세션 쿠키(Session cookies)지속 쿠키(Persistent cookies)로컬 스토리지(Local Storage)세션 스토리지(Session Storage)
사용 예시은행 웹 사이트의 개인정보 인증, 회원가입 입력 폼, 보안영역 접속 등좀더 나은 사용자 경험을 위한 사용기록 추적, 오늘 이 창 보지 않음 체크 등개인 PC에 사용하는 자동 로그인 기능, 장바구니, 블로그 글 임시저장 등일회성 로그인, 블로그 글 에디터의 자동저장 기능 등


참고자료
1. 쿠키(Cookie)와 세션(Session)
2. 웹 저장소 쿠키와 스토리지
3. 웹 스토리지 vs 쿠키 vs 세션
4. 쿠키와 세션 개념

profile
프론트엔드 개발자
post-custom-banner

0개의 댓글