쿠키와 세션
카테고리: Etc
태그: Web
서버와 클라이언트는 HTTP 프로토콜을 통해 통신을 합니다. 그리고 이 HTTP 프로토콜은 stateless
속성을 가지고 있습니다. 하지만 시대의 흐름에 따라, HTTP 프로토콜을 사용해 통신을 하면서 사용자의 상태(로그인 여부, 주문 중 등등)를 기억
해야할 필요성이 대두되었고, 그에 따라 나온 기술 중에는 쿠키
와세선
이 있습니다.
쿠키
쿠키란 클라이언트의 웹 브라우저에 저장되는 작은 데이터 조각으로, key=value
형식의 문자열 데이터 입니다. 브라우저는 이 문자열 데이터 조각들을 저장해놓았다가 동일한 서버에 재요청시 쿠키 데이터를 전송할 수 있습니다.
HTTP 프로토콜은 기본적으로 stateless한 속성을 가지고 있기 때문에, 서버와 클라이언트의 연결상태를 유지하기 위해서 서버가 클라이언트를 식별할 수 있는 식별 데이터가 필요하고 그것이 바로 쿠키
입니다.
쿠키는 클라이언트 브라우저에 저장되기 때문에, 보안에 취약하여 정보가 탈취당할 위험성이 존재합니다. 그래서 보안에 민감한 비밀번호나 주민번호와 같은 정보는 사용하면 안됩니다.
쿠키의 활용도
쿠키는 로그인 상태를 유지하기 위한 목적 외에 다양한 목적으로 사용될 수 있습니다.
- 세션 관리: 서버 간 일시적인 연결 유지에 이용 (로그인)
- 개인화: 웹사이트에 대한 사용자 선호, 테마 등의 세팅
- 트래킹: 사용자 행동을 기록하고 분석하는 용도 (광고)
쿠키의 파라미터
쿠키는 key=value
형태로 이루어진 단순한 문자열이지만, 각 쿠키값에 적용되는 쿠키의 유효 기간이나 도메인 설정 등에 대한 정보를 파라미터를 통해 추가할 수 있습니다. 이 파라미터들은 클라이언트에 적용되는 속성들이며, 서버에서 응답할 때 설정하여 응답할 수 있습니다.
필드 속성 | 설명 | 비고 | 필수 |
---|---|---|---|
NAME=VALUE | 쿠키에 부여된 이름과 | O | |
Expires=DATE | 쿠키 유효 기한 | 생략시 브라우저 종료시 까지 유지 | |
Path=PATH | 쿠키 적용 대싱이 되는 디렉토리 | 생략시 루트 경로로 자동 설정 | |
Domain=도메인 명 | 쿠키 적용 대상이 되는 도메인 명 | 생략시 현재 문서 기준 도메인만 적용 | |
Secure | HTTPS로 통신하는 경우에만 쿠키를 송신 | ||
HttpOnly | 쿠키를 자바스크립에서 액세스 하지 못하도록 제한 | ||
SameSite | 크로스 사이트로 전송하는 요청의 경우 서드 파티 쿠키의 전송에 제한 |
세션
세션은 비밀번호 등 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버 측에 저장하고 관리하는 기술을 말합니다. 서버의 메모리에 저장하기도 하고, 서버의 로컬 파일이나 데이터베이스에 저장하기도 합니다.
여기서 중요한 점은 민감한 정보는 클라이언트에 보내지말고 서버에서 모두 관리한다는 점 입니다.
쿠키와 세션
클라이언트는 서버가 보내준 세션 ID를 쿠키에 저장하고, 서버에 요청시 쿠키(세션 ID)를 함께 보내 본인에 대한 인증
을 수행하는 방식으로 세선과 쿠키는 함께 사용될 수 있습니다. 이와 같은 방식을 서버(세션) 기반 인증 시스템이라고 합니다.
쿠키와 세션을 함께 사용하면 쿠키만을 사용하는 방식에 비해 보안성이 높지만, 해커가 세션 ID 자체를 탈취하여 클라이언트인 척 위장할 수 있다는 한계가 존재합니다.
정리
HTTP 프로토콜은 stateless
속성을 가지고 있으니, 클라이언트와 서버간의 통신에서 상태를 부여하기 위해 쿠키와 세션을 사용하는 것입니다. 보통 쿠키는 세션없이 사용할 수 있지만, 세션과 함께 사용하는 경우가 많으니 쿠키와 세션의 차이점과 특징을 알고 사용하면 좋을 것 같습니다.
댓글 남기기