[Web] 쿠키(cookie)와 세션(session)
HTTP의 특징 2가지
1. 무상태 (stateless)
- 통신이 끝나면 상태정보를 유지하지 않는다는 특성 (이전의 요청과 다음의 요청이 관련이 없다는 의미)
- 장점 : 다수의 요청에 대해 서버가 추가 정보를 관리할 필요가 없어 부하를 줄일 수 있음
- 단점 : 서버측에서 클라이언트의 식별이 불가능함
2. 비연결성 (connectionless)
- 요청에 대한 응답이 끝나면 연결(connection)을 끊는다는 특성
- 장점 : 연결에 필요한 리소스를 효율적으로 관리하게 해줌 (불특정 다수의 클라이언트)
- 단점 : 동일한 클라이언트의 경우에도 연결, 해제에 대한 오버헤드 발생
쿠키와 세션의 사용 이유
웹을 사용하다보면 서버가 클라이언트의 정보를 알아야하는 경우가 많다. 예를들어, 쇼핑몰에서 물건을 구매하려면 사용자는 보통 로그인-물건고르기-장바구니담기-결제하기 등의 과정을 거쳐야 한다. HTTP 자체로는 위에 언급된 특징들(무상태, 비연결성)로 인해 상품 구매의 모든 과정마다 로그인을 해줘야 한다. 이를 보완하기 위해 서버측에서 클라이언트를 식별할 수 있도록 할 필요가 있었고, 이를 위해 만들어진 요소가 쿠키와 세션이다.
쿠키
- 서버를 통해 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일
- 클라이언트에 주요 정보 저장. 서버를 필요로 하지 않음
- 접속이 끝나도 로컬 저장소에 데이터를 보존할 수 있음
- 구성요소 : 이름, 값, 속성 (만료 기간, 도메인, 플래그 등)
- 단점 : 클라이언트에 저장되어 있기 때문에 내용이 변경되거나 요청을 보낼 때 누군가가 데이터를 가로챌 수 있음
- 예시 : 쇼핑몰 장바구니, 자동 ID 완성, 로그인 유지 등
세션
- 사용자가 서버에 접속해있는 상태를 하나의 단위로 파악하여 연결을 유지시켜주는 기술
- 서버에 주요 정보 저장. 사용자는 서버로부터 고유한 세션 ID를 받아 세션쿠키에 저장하여 사용함
- 일정 시간 또는 브라우저 종료 시 삭제됨
- 장점 : 서버에만 정보가 저장되어 보안이 쿠키에 비해 우수한 편임
- 단점 : 사용자가 많아질수록 서버에 과부하가 걸림 (사용자당 하나의 세션 생성)
- 예시 : 사용자 로그인 등
쿠키와 세션 비교
- 쿠키는 클라이언트에, 세션은 서버에 저장됨
- 쿠키는 탈취, 변조의 위험이 있고 세션은 비교적 안전함
- 쿠키는 로컬 저장소에 유지되나 세션은 브라우저 종료 또는 세션 만료시 소멸 (세션쿠키는 세션과 함께 소멸)
- 쿠키는 속도면에서 유리하고 세션은 그에비해 느린 편