HTTP는 stateless, connectionless한 특성을 가진다. 서버는 매번 클라이언트가 누구인지 확인해야하고, 이러한 점들을 보완하기 위해 쿠키, 세션을 사용한다.
Cookie
브라우저 로컬에 저장되는 key, value가 들어있는 데이터 파일
특징
- 사용자 인증이 유효한 시간 명시, 브라우저가 종료돼도 인증이 유지된다.
- Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
- 사용자가 따로 요청하지 않아도 브라우저가 Request Header에 쿠키를 자동으로 넣어서 서버에 전송한다.
- 300개까지 쿠키를 저장 가능하고, 한 도메인당 20개의 값만 가질 수 있다.
구성 요소
- 이름: 쿠키를 구별하는데 사용되는 이름
- 값: 쿠키 이름과 관련된 값
- 유효시간
- 도메인: 쿠키를 전송할 도메인
- 경로: 쿠키를 전송할 요청 경로
동작 방식
- 클라이언트가 페이지 요청
- 서버에서 쿠키 생성, HTTP 헤더에 쿠키 포함하여 응답
- 브라우저가 종료되어도 쿠키 만료기간까지 클라이언트가 보관
- 같은 요청을 할 경우 클라이언트가 HTTP 헤더에 쿠키를 포함시켜 요청 전송
- 서버에서 쿠키를 읽고 이전 상태 정보를 변경할 필요가 있을 경우 쿠키를 업데이트하고 변경된 쿠키를 다시 HTTP 헤더에 포함시켜 응답
사용 예시
- 자동로그인
- 사이트 로그인 시 아이디와 비밀번호 저장
- 쇼핑몰의 장바구니
- 오늘 더 이상 이 창을 보지 않음 팝업창
Session
서버에서 저장, 관리하는 쿠키 기반 사용자 정보 파일
특징
- 서버가 클라이언트를 구분하기 위해 고유한 세션 ID 부여
- 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증 상태 유지
- 서버에 저장하기 때문에 쿠키보다 보안에 좋다.
- 사용자가 많아질수록 서버의 메모리를 많이 차지한다.
- 세션을 무분별하게 만들다보면 과부하로 인해 성능 저하의 요인이 된다.
동작 방식
- 클라이언트가 서버 접속시 세션 ID를 발급 받는다.
- 클라이언트는 세션 ID를 쿠키를 사용해서 저장한다.
- 클라이언트는 서버에 세션 ID와 같이 요청한다.
- 서버는 세션 ID로 세션에 있는 일치하는 클라이언트 정보를 가져와 사용한다.
- 서버는 클라이언트에게 응답한다.
사용 예시
비교
- 저장 위치
- 쿠키: 클라이언트(브라우저) 로컬
- 세션: 서버
- 보안
- 쿠키: 로컬에서 변질되거나 요청시 스니핑당할 수 있다.
- 세션: 로컬에서는 쿠키를 이용하여 session id만 저장. 서버에서 구분, 처리하기 때문에 더 보안이 좋다.
- 요청 속도
- 세션은 서버의 처리가 필요하기 때문에 쿠키가 더 빠르다.
- 유효 시간 (life cycle)
- 쿠키: 파일로 저장되기 때문에 브라우저를 종료해도 유지된다.
- 세션: 브라우저가 종료되면 만료 시간과 상관없이 삭제된다.
- 다른 브라우저를 사용하면 다른 세션을 사용한다.
- 같은 브라우저(크롬 등)의 다른 탭을 사용하면 세션을 공유한다.
출처