쿠키와 세션
웹 어플리케이션을 만들고 있는 사람이라면 누구나 세션과 쿠키를 접해봤을 것이다. 로그인할 때 세션에 로그인 정보를 저장하고, 자동로그인(로그인 상태 유지) 기능이라던지 팝업창 다시 보지 않기 등등의 기능은 쿠키를 사용하고.. 이 작업들의 차이는 무엇일까? 쿠키나 세션이나 뭔 정보 저장하는건 알겠는데 왜 로그인 할 때는 세션을 쓰고, 자동로그인할 때 쿠키를 쓸까? 반대로 쓰면 안되는 것일까? 궁금하다면 쿠키와 세션이 어떻게 다른지 알아보도록 하자.
COOKIE
쿠키란?
HTTP 쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다.
사용자의 컴퓨터(클라이언트)에 설치되는 작은 데이터 기록 파일
클라이언트의 상태 정보를 하드 디스크에 임시 text 파일로 저장했다가 필요할 때 참조 및 재사용한다.
이름, 값, 유효기한, 경로, 도메인 등으로 구성된다.
이름(Name)
- 쿠키 파일을 서로 구별하기 위해 사용
- 콤마, 세미콜론, 공백, 등호를 제외한 아스키 문자로 구성되며, 보통 알파벳과 숫자로 이루어져있다.
값(Value)
- 쿠키의 이름에 대응하는 값
- 콤마, 세미콜론, 공백을 제외한 아스키 문자로 구성
- 값으로 사용할 수 있는 문자가 한정되어있다.
유효기한(Expires)
- 쿠키가 유지될 수 있는 기한
- 별도로 기한을 지정하지 않으면 브라우저 종료시에 쿠키를 삭제한다.
경로(Path)
- 쿠키를 전송할 요청 경로
도메인(Domain)
- 쿠키를 전송할 도메인
- 한 도메인에서 생성한 쿠키를 다른 도메인에서 사용할 수 없음
일반적인 브라우저에서 하나의 쿠키에 최대 4MB의 데이터를 저장가능
하나의 도메인 당 20개의 값만 가질 수 있으며 범위를 초과하면 가장 적게 참조된 쿠키부터 삭제된다.
클라이언트에 최대 300개의 쿠키를 저장할 수 있으며 범위를 초과하면 오래된 쿠키부터 삭제된다.
쿠키의 동작 방식
쿠키 생성
- 클라이언트에서 페이지를 요청하면 웹 서버에서 쿠키 생성
- 서버에서 페이지 응답시 헤더에 쿠키를 저장해서 전송
쿠키 저장
- 응답 데이터에 포함된 쿠키를 클라이언트에 저장
쿠키 전송
- 클라이언트가 다음 요청을 할 때 저장한 쿠키를 함께 전송
- 서버에서 쿠키 정보를 읽어와 이전 상태 정보를 확인
- 상태정보를 변경해야 할 경우 쿠키를 업데이트해서 응답
쿠키의 단점
- 매번 쿠키정보를 HTTP 헤더에 포함해서 보내야 한다.
- 클라이언트 정보가 클라이언트의 하드디스크에 파일로 남겨지기 때문에 쿠키 파일의 유출 가능성이 있어 보안에 취약하다.
SESSION
세션이란?
- 웹 서버에 접속한 후 사용자를 식별해 브라우저를 종료할 때까지 접속상태를 유지하는 기술
- 클라이언트가 요청을 하면 서버에서 클라이언트에 Session ID를 부여하는데, 이 ID를 메모리 쿠키로 저장 (세션 종료시 삭제)
- 접속 정보는 서버에 저장되며 세션 ID에 대응된다.
세션의 동작 방식
- 클라이언트가 서버에 접속을 시도
- 서버에서 요청 헤더의 쿠키를 확인해 세션 ID가 없으면 새로 발행한 후 응답
- 클라이언트가 재요청시 헤더에 세션 ID를 포함해서 요청
- 서버에서 세션 ID에 대응되는 세션을 찾아 클라이언트의 접속상태 정보를 유지하며 응답
세션의 단점
- 데이터가 서버에 저장되므로 서버에 저장 공간이 부족한 시스템에서는 부적합
쿠키와 세션을 사용하는 이유
HTTP를 통해 데이터를 주고받을 때, 클라이언트가 서버에 데이터를 요청하면 서버는 그에 따른 응답을 보낸 후 접속을 끊는다. 이 때, 클라이언트와 서버의 통신은 끝나고 서버의 상태 정보는 유지하지 않는다. 만약 쿠키와 세션을 통해 데이터를 저장하지 않는다면, 우리는 페이지가 이동될 때마다 로그인을 새로 해주어야 할 것이다.
쿠키 vs 세션
- 쿠키는 클라이언트에 파일로 저장되어 서버의 자원을 사용하지 않지만 세션은 서버에 저장된다.
- 쿠키는 변질되거나 request 도중 도청되는 등 보안에 취약하지만 세션은 쿠키를 이용해 세션 ID만 저장하고 사용자 정보는 서버에 저장하기 때문에 쿠키보다 보안이 우수하다.
- 쿠키는 지정한 유효기한만큼 정보가 유지되지만 세션은 지정한 기한과 상관없이 브라우저가 종료되면 삭제된다.
- 쿠키는 클라이언트에 저장되어 응답 속도가 빠르지만 세션은 서버에 정보가 있기때문에 서버에서 처리를 해주어야 하므로 쿠키보다 느리다.
'공부 > web' 카테고리의 다른 글
[node.js] route에서 반복문(forEach 문)으로 만든 배열 rendering하기 (0) | 2018.09.05 |
---|---|
[jQuery/datepicker] 특정일 비활성화(disabled) 하기 (0) | 2018.09.04 |
Naver SMTP 서버로 임시비밀번호 보내기 (0) | 2018.07.15 |
[HTTP] GET vs POST (0) | 2018.07.14 |
웹서버 vs WAS (0) | 2018.05.31 |
댓글