쿠키🍪와 세션/캐시 + 웹 스토리지Frontend/웹 관련 지식2022. 5. 17. 23:01
Table of Contents
쿠키와 세션을 사용하는 이유
- HTTP의 connectionless, stateless 프로토콜 때문에 클라이언트가 서버와 통신을 할 때마다 계속 인증을 해야하기 때문 ㅠㅠ
- 아주 간단히 말해 쿠키는 클라이언트, 세션은 서버가 사용자에 대한 인증을 유지하는 것이다
- HTTP 특징 → https://duckgugong.tistory.com/156
쿠키 - Cookie🍪
특징
- 쿠키는 클라이언트(브라우저)에 저장되는 key, value가 들어있는 데이터 파일이다.
- 쿠키에 사용자 인증이 유효한 시간을 명시할 수 있고, 유효 시간이 정해지면 브라우저가 종료되도 인증이 유지된다.
- 쿠키는 클라이언트의 상태를 클라이언트의 브라우저에 저장하고 참조한다.
- 클라이언트에 300개의 쿠키를 저장 가능하고 하나의 도메인당 20개의 값을 가질 수 있고, 하나의 쿠키값은 4KB까지 저장이 가능하다!
- HTTP 요청 헤더에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다!
- 쿠키는 클라이언트가 요청하지 않아도 브라우저가 요청시에 요청 헤더(Request Header)에 자동으로 넣어서 서버로 전송한다
- SameSite 옵션이 Strict가 아닐 경우, 다른 도메인에서 요청할 때도 자동으로 전송되는 위험성이 있다
→CSRF에 취약!! - 크롬 개발자도구 → 애플리케이션에서 쿠키를 확인할 수 있다!
구성요소
- 이름
→ 각각의 쿠키를 식별 - 값
→ 쿠키가 가지고 있는 값 - 유효시간
→ 쿠키의 유지시간 - 도메인
→ 쿠키를 전송할 도메인 - 경로
→ 쿠키를 전송할 요청 경로
동작 순서
- 클라이언트가 페이지를 요청 (웹사이트에 접근)
- 웹 서버에서 쿠키 생성
- 서버에서 생성한 쿠키 정보를 HTTP 헤더에 포함시켜 클라이언트에게 응답
- 서버에서 응답결과로 보내준 쿠키가 만료되지 않았다면 클라이언트(로컬 PC)가 보관하다 다시 서버에 요청할 때 쿠키를 전송
- 만약, 동일한 페이지를 요청할 때(사이트 재방문), 클라이언트가 해당 쿠키를 가지고 있으면 HTTP 헤더에 쿠키를 자동으로 넣어서 요청
- 서버에서 쿠키를 읽어서 이전 상태 정보를 변경할 경우 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
사용 예시
- 로그인할 때, "아이디와 비밀번호를 저장하시겠습니까?"
- 자동로그인 기능
- 쇼핑몰 장바구니
- "24시간동안 이 창 다시 보지 않기" 체크
세션 - Session💻
특징
- 방문자가 웹 서버에 접속하고 있는 상태를 하나의 단위로 보는 것
- 웹 서버에 저장되는 쿠키(=세션 쿠키)
- 세션은 쿠키를 기반으로 하지만, 사용자의 정보를 브라우저에 저장하는 쿠키와 달리 세션은 서버에서 관리
- 브라우저를 닫거나 서버에서 세션을 삭제했을 때만 삭제가 된다 → 쿠키보다 비교적 보안이 좋음
- 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정 가능
- 각각의 클라이언트에게 고유 session-ID를 부여해서 클라이언트의 요구에 맞는 서비스를 제공한다.
- 사용자에 대한 정보를 서버에서 저장하기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 사용하게 된다!
→ 성능 저하의 요인
동작 순서
- 클라이언트가 페이지를 요청. (웹사이트에 접근)
- 서버는 클라이언트의 HTTP 요청 헤더의 쿠키를 확인해서 클라이언트가 session-ID를 보냈는지 확인
- session-ID가 존재하지 않으면 서버는 session-ID를 클라이언트에게 발급
- 클라이언트는 서버에서 발급한 session-ID를 쿠키에 저장
- 클라이언트가 서버에 다시 접속할 경우 이 쿠키를 사용해서 session-ID값 서버에 전달
사용 예시
- 로그인과 같이 보안과 관련된 작업을 할 때사용
- 페이지를 새로고침하거나 로그인을 한 상태에서 화면을 이동해도 로그아웃이 되지 않는 경우
쿠키 VS 세션
- 세션이 쿠키를 기반으로 하기 때문에 세션과 쿠키는 비슷하지만 몇가지 차이점이 있다. 가장 큰 차이점은 사용자의 정보가 저장되는 위치이다
Cookie | Session | |
저장 위치 | 클라이언트(브라우저) | 서버 |
요청속도 | ||
보안 | 클라이언트의 로컬환경에 저장되므로 변질되거나 request에서 스니핑 당할 수 있음 | session-ID만 사용해서 비교적 보안성이 높음 |
속도 | 쿠키에 정보가 있기 때문에 서버에 요청시 빠름 | 정보가 서버에 존재하므로 비교적 느리다 |
라이프 사이클 | 브라우저를 종료해도 만료기간이 남으면 정보가 유지될 수 있음 | 브라우저 종료시 삭제 |
캐시
- 캐시는 웹 페이지를 빠르게 렌더링할 수 있도록 도와주는 임시 저장소이다.
- 쿠키/세션이 사용자의 인증을 도와주는 것과 대비된다.
- 캐시는 이미지, 동영상, CSS, Javascript 파일이나 데이터를 미리 복사해 놓은 리소스 파일들의 임시 저장소이다.
- 저장 공간이 작고 비싸지만 빠른 성능을 제공한다.
- 같은 웹 페이지를 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다!
- 사용된 데이터가 다시 사용될 확률이 높으면 캐시 서버에 있는 데이터를 사용
로컬/세션 스토리지 = 웹 스토리지
- 만일 쿠키 정보가 많으면 많을수록 HTTP 헤더의 용량은 커지게 된다.
- 이 문제점을 해결하기 위해서 html5에서는 쿠키 대신 storage라는 개념이 등장하였다.
- 웹 스토리지는 HTML5를 지원하는 브라우저에서만 사용할 수 있다!
- 간단한 key와 value를 저장할 수 있다!
- 웹 스토리지는 쿠키와 달리 서버에 전송되지 않고 명시적으로 전송이 가능하기 때문에 서버에 부담이 가지 않는다
- 쿠키의 용량은 4kb인데 비해 스토리지는 한 페이지당 5mb를 제공하므로 용량이 넉넉하다
로컬 스토리지 VS 세션 스토리지
로컬 스토리지 | 세션 스토리지 | |
데이터 | O (사용자가 지우지 않는 한) | X (윈도우, 탭 닫을시 내용 제거) |
사용방법 | 자동 로그인 | 일회성 로그인 |
주의사항 | 비밀번호와 같은 중요 정보는 절대 저장 X |
'Frontend > 웹 관련 지식' 카테고리의 다른 글
Rest API / Rest-ful (0) | 2022.05.30 |
---|---|
JWT TOKEN🍗 (0) | 2022.05.23 |
Proxy (Forward, Reverse) (0) | 2022.02.15 |
서버와 서버리스 (0) | 2021.08.22 |
DOM (1) | 2021.07.12 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!