[CS]쿠키와 세션

HOU·2022년 8월 2일
0

CS

목록 보기
9/9
post-thumbnail

맛있는 쿠키!🍪

등장배경

HTTP를 알아야 한다.
HTTP의 가장 큰 특징 두가지가 있다.
1. 비 연결성
2. 무상태성

HTTP는 데이터를 요청하고 응답하는 프로토콜인데 요청이 들어오고 응답을 하면 연결을 끊어버린다.(비 연결성),그리고 클라이언트의 상태를 식별할 수 없다.(무상태성)

이러면 어떤 문제가 생길까?

  1. 클라이언트를 식별 할 수 없다. 로그인을 해도 다른 페이지로 옮기면 다시 또 로그인을 해야하는 문제가 생길 것이다.

🍪쿠키란?

  1. 쿠키는 클라이언트(사용자)의 상태 정보를 로컬에 저장했다가 참조합니다.
  2. 하나의 쿠키값은 4kb까지 저장 가능
  3. Response header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키 생성가능
  4. 쿠키는 사용자가 따로 요청하지 않아도 Request Header에 넣어서 자동으로 서버에 전송 가능
  5. 서버에서는 브라우저가 다르면 다른 사용자로 인식합니다.

확인방법

개발자 도구 (F12) -> application tab -> 왼쪽 nav바 -> Cookies 확인

구성요소

  • 이름 (Name): 각각으 쿠키를 구별하는데 사용되는 이름
  • 값 (value): 쿠키의 이름과 관련된 값
  • 도메인(Domain): 쿠키를 전송할 도메인
  • 경로(Path): 쿠키를 전송할 경로
  • 유효시간(Expire): 쿠키를 전송할 요청 경로

쿠키는 서버를 대신해서 이러한 정보를 웹 브라우저에 저장. (웹 브라우저를 이용하고 있는 컴퓨터에 저장)하고 사용자가 요청을 할 때 그 정보를 함께 보내서 서버가 사용자를 식별할 수 있게 해줍니다.

목적

아래의 세 가지 목적을 위해 사용된다.
1. 세션관리 : 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야할 정보들을 저장합니다.
2. 개인화: 사용자 마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있습니다.(고객과 admin, 휴먼고객)
3. 트레킹: 사용자의 행동과 패턴을 분석하고 기록합니다.

예시

  1. 로그인
  2. 일주일간 다시 보지 않기
  3. 최근 검색한 상품들을 광고에서 추천
  4. 쇼핑몰 장바구니 기능

작동방식

쿠키도 결국 HTTP 통신으로 이루어지는 것이기 때문에 HTTP의 응답과 요청에 따라 작동합니다. 아래와 같은 순서로 작동합니다.

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

단점

  1. 개인 정보가 기록되기 때문에 사생활 침해 우려가 있다.
  2. 서버가 가지고 있는 것이 아니라 사용자에게 저장되기 때문에, 고칠수도 있고 가로채기도 쉬워 보안이 취약합니다. 쿠키에는 민감하거나 중요한 정보를 담는 것은 위험합니다.

그래서 이런 단점을 보완하는것이 세션입니다.


🕐세션이란?

  1. 사용자 정보 파일을 서버에서 관리
  2. 클라이언트가 Request를 보내면, 해당 서버에서 클라이언트에게 유일한 ID를 부여하는데 이것이 세션ID이다.
  3. 사용자에 대한 정보를 서버에 두기 때문에 보안에 좋다. 단 사용자가 많아질 수록 서버 자원을 많이 사용한다.
  4. 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때 까지 인증상태를 유지한다.
  5. 아이디, 닉네임 등의 정보를 세션에 담아두면 요청이 있을 때 마다, DB에 접근할 필요가 없어서 효율적입니다.

세션 특징

  1. 각 클라이언트에게 고유 ID를 부여
  2. 웹서버에 저장되는 쿠키
  3. 저장 데이터에 제한이 없다.
  4. 브라우저를 닫거나, 서버에서 세션을 삭제했을 때 삭제되므로, 쿠키보다 보안이 좋다.
  5. 세션ID로 클라이언트를 구분하여 각 클라이언트에 맞는 서비스를 제공한다.
  6. 보안 면에서 쿠키보다 우수하다.

세션 작동 방식

  1. 클라이언트 요청(사용자가 웹사이트 접근)
  2. 서버는 접근 클라이언트의 request-header필드인 cookie를 확인하여, 클라이언트가 해당 세션 ID를 보냈는지 확인한다.
  3. 세션ID가 존재하지 않는다면, 서버는 세션ID를 생성해 클라이언트에게 전송.
  4. 서버에서 클라이언트로 준 세션 ID를 쿠키를 사용해 서버에 저장한다.
  5. 클라이언트 재접속시 , 이 쿠키를 이용하여 세션ID값을 서버에 전달한다.

쿠키 vs 세션

CookieSession
저장위치클라이언트서버
저장형식text(string)Object
리소스클라이언트의 리소스서버의 리소스
용량제한도메인당 20개, 1쿠키당 4kb,최대 300개제한없음
만료시점쿠키저장시 설정(설정 없을 시 브라우저 종료시 만료)알수 없음

정리

쿠키와 세션에 대해서 알아보았다. 세션이 브라우저가 삭제 되면 지워진다고 생각했었는데 그건 세션스토리지이야기였다. 어설프게 알면 힘들다.

쉽게 정리해보면
http프로토콜의 비연결성과 무상태성에서 오는 상태를 기억하지 못하는 단점을 해결하기 위해서 쿠키가 나왓다. 쿠키는 http프로토콜로 요청을 하면 서버에서 할당해주는 것으로 로컬에 저장된다. 브라우저에 저장되는 만큼 보안에 취약한 면이 있어서 이런 문제를 해결하기 위해서 Session이 등장했다. 세션은 sessionID를 발급해주고 이 ID를 통해서 서버자원을 활용한다. 얼틋보면 session이 마냥 좋아보이지만 session은 서버자원을 활용하기 때문에 트래픽이 많아지면 서버에 부하가 걸린다는 단점이 존재한다. 상황에 맞게 적절히 사용하자!


참조

너구리님 블로그
인파님 블로그

profile
하루 한 걸음 성장하는 개발자

0개의 댓글