1.쿠키(Cookie)란?
1)정의
쿠키(Cookie)란, Key와 Value의 쌍으로 이루어져 있으며 서버에서 클라이언트를 구분(식별)하는 목적로 이용되었기에,
일반적으로 클라이언트의 정보와 권한 등이 텍스트 형식으로 저장되어 있었다.
웹 서비스 이용 시 팝업창 다시보기 않기, 아이디 저장 등의 클라이언트의 옵션을 저장한 쿠키를 통해 팝업창 표시나 아이디 표시 여부를 결정하기도 한다.
웹 서비스에서 쿠키에 저장된 클라이언트의 정보가 필요 없는 경우에도, 통신 시마다 쿠키가 전송되는 점과, 쿠키의 저장 용량(4kb)이 작고, 로컬에 저장됨에 따라 보안적인 이슈가 발생한다는 단점이 있다.
※ 쿠키의 단점 해결을 위해, Modern Storage APIs가 이용되며, 가장 대표적인 예시는 Web Storage API이다.
※ 개발자 도구 → Application → Storage 에서 Local Storage와 Session Storage를 확인할 수 있다. (Chrome 기준)
※ 참조 : https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API
2)쿠키를 이용한 통신
쿠키는 클라이언트를 구분(식별)할 시, 이용된다고 했다. 이는 서버가 누가 요청했는지를 알 수 있도록 해주는 정보를 의미한다.
아래 그림을 예시로, 누군가가 본인이 작성한 비밀 게시글을 보고 싶을 때는 본인이 누군인지 서버에게 알려줘야 해당하는 비밀 게시글을 응답 받을 수 있다.

위 그림의 예시에서 쿠키의 생성은 서버이지만 클라이언트로 쿠키를 던짐으로, 유지/관리는 클라이언트에서 하게 된다는 점을 알 수 있다.
앞서, 쿠키는 텍스트 형식으로 로컬에 저장된다고 하였다. 이는, 클라이언트 로컬에 저장된 쿠키를 임의적으로 수정할 수 있다는 가능성을 가지게 된다.
user의 정보를 가진 쿠키를 admin으로 변경해서 보낼 시, 서버에서는 admin에 관련된 비밀 게시글을 응답하게 된다.

2.세션(Session)이란?
1)정의
세션(Session)이란, 웹 브라우저를 통해 각 클라이언트가 웹 서비스를 이용하고 종료하기 전 까지 상태 정보를 유지/저장한다. 이를 통해 일정 시간 동안 각 각의 클라이언트를 구분(식별)할 수 있으며, 각 클라이언트 별 요청을 하나의 상태로 보고 유지 관리하기 위해 이용된다.
세션은 서버에서, 128bit(16byte) 이상의 길이의 안전한 난수 알고리즘을 적용하여 예측이 불가능한 값으로 생성된다. 또한, 텍스트 형식으로 저장되던 쿠키와 다르게 Object 형식으로 저장할 수 있다.
2)세션을 이용한 통신

3.HTTP 프로토콜의 비연결성(connectionless), 비상태성(Stateless)
※ 비연결성 : 하나의 요청에 하나의 응답을 한 후 연결을 종료한다. 요청은 연결되지 않으며 매 새로운 연결을 수행한다.
※ 비상태성 : 통신(연결)이 끝나는 후, 상태 정보를 저정하지 않는다. 이전 연결에 사용된 데이터를 다른 연결에 사용할 수 없다.
한 번 로그인 뒤에 로그아웃을 하지 않는 이상, 메일이나 게시글 열람 등의 행동을 클라이언트는 지속적으로 행할 수 있다. 하지만 HTTP 프로토콜은 비연결성과 비상태성을 특성을 가짐으로, 클라이언트의 지속된 요청에 대한 구분(식별)을 할 수 없게 된다.
즉, 메일을 1개 열람할 때마다, 아이디와 비밀번호 그리고 열람할 메일 경로까지 같이 보내줘야 처리가 가능하다. 이런 문제점을 해결하기 위해 등장한 것이 쿠키고, 세션이다.
4.쿠키 (Cookie) 와 세션 (Sessions) 의 차이점
많은 차이점이 있겠지만, 관리하는 주체의 차이점이 가장 크다. 쿠키는 클라이언트에 저장됨으로 실질적인 관리는 클라이언트에서 수행하고, 세션은 서버에 저장됨으로 서버에서 관리한다.
이는, 클라이언트에서 쿠키는 변조하여 서버로 전송할 수 있지만 세션은 변조하여도, 서버에서 관리함으로 전송 값이 악용될 수 없게 된다.
| 쿠키 (Cookie) | 세션 (Sessions) | |
| 저장 위치 | 클라이언트 | 서버 |
| 저장 형식 | 텍스트 | Object |
| 자원 소모 | 클라이언트 | 서버 |
'기초 공부 > 웹' 카테고리의 다른 글
| [WEB] HTML / CSS / Javascript 란 ? _ 2편 CSS (0) | 2022.11.01 |
|---|---|
| [WEB] HTML / CSS / Javascript 란 ? _ 1편 HTML (0) | 2022.10.31 |
| [WEB] 웹 브라우저란? (0) | 2022.09.30 |
| [WEB] HTTP Method 및 HTTP Status Code (0) | 2022.09.28 |
| [WEB] HTTP /HTTPS 이란? (0) | 2022.09.27 |