cookie & session

수삼·2023년 3월 1일
0

개발지식

목록 보기
6/11

로그인을 통해 볼 수 있는 서비스, 장바구니 서비스 등 클라이언트가 정보를 유지하는 stateful한 성격의 서비스가 많아졌다. 정보를 유지할수 없는 Connectionless, Stateless의 성격을 가진 HTTP의 단점을 해결하기 위해 쿠키라는 개념이 도입됐다.

Set-Cookie 응답 헤더로 넘어온 쿠키를 다시 Cookie 요청 헤더로 돌려보내는 것은 브라우저라는 HTTP 클라이언트만 해주는 매우 독특한 작업이다

쿠키란?

- 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터 또는 메모리에 저장하는 작은 기록 정보 파일이다.
- 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있다.
- 본적으로 HTTP 통신을 기반으로 하며 브라우저에서 돌아가는 웹사이트나 웹애플리케이션에서 널리 사용되고 있다.

구성요소

- NAME : 쿠키의 이름
- VALUE : 저장된 값
- EXPIRES : 쿠키 만료일
- DOMAIN : 쿠키가 사용되는 도메인 지정. 한 도메인에서 다른 도메인에 대한 쿠키를 사용하지 못하게 설정
- PATH : 쿠키를 반환할 경로를 결졍. 도메인의 루트 경로로 이동할 경우 쿠키가 전송 된다
- SECURE : 보안 연결 설정

단점

매 헤더(Http Header)에 추가하여 보내기 때문에 상당한 트래픽을 발생시킨다
결제 정보 등을 쿠키에 저장하게 되면 보안에 대한 문제점(변조, 유실, 도난 등)이 발생할 수 있다


Session

session은 cookie의 트래픽 문제와 보안 문제를 해결하기 위해 등장했다.

<차이점>
cookie: 사용자의 로컬 컴퓨터에 정보를 저장한다.
session: 서버와 사용자의 메모리(브라우저)에 정보를 저장한다. 따라서 관리하기 편하고 효율적이다.

세션이란?

HTTP Session id를 식별자로 구별하여 접속한 서버 db에 정보를 저장한다.
클라이언트는 HTTP Session id를 쿠키로 저장된 형태로 가지고 있습니다.
메모리에 저장하기 때문에 브라우저가 종료되면 사라집니다.

절차

  1. 클라이언트가 서버에 resource 요청
  2. 서버에서 HTTP Request를 통해 쿠키에서 Session id를 확인 한 후, 없으면 Set-cookie를 통해 새로 Session-id를 발행해 보낸다
  3. 클라이언트는 HTTP Request헤더에 Session id를 포함해 원하는 Resource를 요청함
  4. 서버는 Session id를 통해 세션을 찾아 클라이언트 상태 정보를 유지하며 적절한 응답을 한다.

장점

서버에 저장하기 때문에 관리하기 편하고 효율적이다

단점

load-balancing(부하 분산 - 수많은 사용자로부터 동시에 들어오는 요청을 처리하기 위해 여러 대의 서버로 골고루 분산될 수 있도록 한다), 시스템 효율성에서 다루기 어렵다
세션 저장장치가 부족한 시스템에서는 적합하지 않다

정책

서버는 세션 데이터를 클라이언트에게 보내기 전에 암호화해야한다.
많은 세션 데이터를 허용하고 효율적으로 관리하기 위해서는 (브라우저들은 쿠키의 크기와 개수에 제한을 두고 있기 때문) 쿠키를 만들기전에 데이터를 압축하는 과정과 클라이언트에게 쿠키를 받기 전 압축 해제하는 과정이 필요할 것이다.

참고 블로그
참고 블로그2

0개의 댓글