본문 바로가기

TIL

[TIL] 세션, 쿠키, 웹스토리지

HTTP는 무상태(stateless)한 특성을 가진다. 즉 서버가 클라이언트의 정보를 계속 유지하지 않는다.
이러한 한계를 보완하기 위해 사용하는 것이 세션과 쿠키이다.

 

1. 세션 (Session)

: 쿠키 기반이지만 사용자 정보를 서버 측에서 관리하는 것
: 클라이언트 구분을 위해 세션 ID를 부여하며 브라우저 종료 시까지 인증상태를 유지한다.
: 접속 시간에 제한을 주어 일정 시간 동안 응답이 없으면 정보가 유지되지 않도록 설정 가능하다.
: 데이터를 서버에 두어 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
: 세션은 사용자의 수만큼 서버 메모리를 차지하기 때문에 최근에는 이런 문제들을 보완한 토큰 기반의 인증방식을 사용하는 추세이며 그중 JWT라는 것이 있다.

JWT
: 키 값을 발급하여 클라이언트로 보내는 것은 기존과 동일하나, 암호화된 토큰을 복호화하는 작업이 정상적으로 수행되는 과정을 통해서 인증을 진행하는 방식을 사용한다.
: 기존의 세션 활용 대비 인증 데이터를 저장할 필요가 없기 때문에 인증 서버를 마련하지 않아도 된다는 장점과, 암호화 및 단방향 복호화만 가능하기 때문에 보안성에 강하다는 장점이 있다.
: 하지만 서버에서 인증키를 관리하지 않기 때문에 인증 이후 만료 시점까지 로그인을 제어할 수 없다는 단점이 존재하여 블로그, 쇼핑몰 등 다수의 유저가 동일한 아이디로 접근해도 상관없거나 로그인, 로그아웃을 통제할 필요가 없는 서비스에서 주로 사용된다.



2. 쿠키 (Cookie)

: 사용자 정보를 로컬에 저장했다가 참조
: Key-Value 형태
: 인증이 유효한 시간을 지정할 수 있으며 유효시간이 정해지면 브라우저가 종료되어도 인증이 유효하다.
: 클라이언트가 페이지를 요청하면 서버에서 쿠키를 생성하여 HTTP 헤더에 쿠키를 포함시켜 응답시켜 주는 방식이다.
: 로그인 자동 완성, 쇼핑몰의 장바구니, 팝업의 '오늘 더 이상 이 창을 보지 않음' 체크 등 일시적으로 필요한 가벼운 데이터 저장이 필요할 때 사용된다.
 

세션과 쿠키의 차이
1. 데이터 저장 위치 : 사용자 정보를 로컬에 저장하여 참조하는 쿠키와 달리 세션은 서버 측에서 관리
2. 보안 : 쿠키는 로컬에 저장되어 스니핑에 당할 위험이 있지만 세션은 쿠키를 이용해 세션 아이디만 저장하고 서버에서 처리하기 때문에 보안상에서 세션이 더 안전하다.
3. 라이프사이클 : 쿠키는 브라우저를 종료해도 만료기간이 남아있으면 존재하지만 세션은 브라우저 종료 시 만료기간에 상관없이 종료된다.
4. 속도 : 세션은 정보가 서버에 있기 때문에 쿠키보다 세션이 비교적 느리다.


웹에서 데이터를 클라이언트에 저장하는 브라우저 저장소에는 key-value형태의 만료기한이 있는 쿠키의 단점을 보완해 만들어진 것이 있는데 그것이 웹 스토리지이다.


3. 웹 스토리지 (Web Storage)

: 클라이언트에 데이터를 저장할 수 있도록 HTML5부터 추가된 저장소
: Key-Value 스토리지 형태
: 쿠키와 달리 서버로 전송되지 않아 서버에 부담이 없다.
: 유효기간이 존재하지 않는다.
 
웹 스토리지의 종류는 2가지로 window 객체의 프로퍼티로 존재하며 같은 Storage 객체를 상속하기 때문에 동일한 메소드를 가진다. 이 둘의 가장 큰 차이점은 영구성이다.

  3-1. 로컬 스토리지(localStorage)
  : 사용자가 데이터를 지우지 않는 이상, 브라우저를 종료해도 계속 브라우저에 남아있는다.
  : 지속적으로 필요한 데이터 저장이 필요할 때 사용된다.(자동 로그인 등)
 
  3-2. 세션 스토리지(sessionStorage)
  : 데이터가 오리진뿐만 아니라 브라우저 탭에도 종속되기 때문에, 윈도우나 브라우저 탭을 닫을 경우 제거
  : 일시적으로 필요한 데이터 저장이 필요할 때 사용된다.(일회성 로그인 정보, 입력폼 저장, 비로그인 장바구니 등)
 
 

참고
: https://interconnection.tistory.com/m/74
: https://doqtqu.tistory.com/m/306

: https://it-eldorado.tistory.com/90

'TIL' 카테고리의 다른 글

[TIL] 브라우저의 동작 방식 및 렌더링 원리  (0) 2023.02.25
[TIL] 프로세스와 스레드  (0) 2023.02.25
[TIL] Rest, Rest API, Restful  (0) 2023.02.25
[TIL] CSR과 SSR  (0) 2023.02.25
마크다운(Markdown) 사용법  (0) 2023.01.08