본문 바로가기

기초 공부/웹

[WEB] 쿠키와 세션 (Cookie &Session)

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 입니다.

위 그림의 예시에서 쿠키의 생성은 서버이지만 클라이언트로 쿠키를 던짐으로, 유지/관리는 클라이언트에서 하게 된다는 점을 알 수 있다.

 

 앞서, 쿠키는 텍스트 형식으로 로컬에 저장된다고 하였다. 이는, 클라이언트 로컬에 저장된 쿠키를 임의적으로 수정할 수 있다는 가능성을 가지게 된다. 

 

 user의 정보를 가진 쿠키를 admin으로 변경해서 보낼 시, 서버에서는 admin에 관련된 비밀 게시글을 응답하게 된다.

나는 user가 아니라 admin이다!

 

 

2.세션(Session)이란?

1)정의

세션(Session)이란, 웹 브라우저를 통해 각 클라이언트가 웹 서비스를 이용하고 종료하기 전 까지 상태 정보를 유지/저장한다. 이를 통해 일정 시간 동안 각 각의 클라이언트를 구분(식별)할 수 있으며, 각 클라이언트 별 요청을 하나의 상태로 보고 유지 관리하기 위해 이용된다.

 

 세션은 서버에서, 128bit(16byte) 이상의 길이의 안전한 난수 알고리즘을 적용하여 예측이 불가능한 값으로 생성된다. 또한, 텍스트 형식으로 저장되던 쿠키와 다르게 Object 형식으로 저장할 수 있다.

 

2)세션을 이용한 통신

이름은 모르겠고, 그래서 SessionID가 뭡니까?

 

3.HTTP 프로토콜의 비연결성(connectionless), 비상태성(Stateless)

 

※ 비연결성 : 하나의 요청에 하나의 응답을 한 후 연결을 종료한다. 요청은 연결되지 않으며 매 새로운 연결을 수행한다.

※ 비상태성 : 통신(연결)이 끝나는 후, 상태 정보를 저정하지 않는다. 이전 연결에 사용된 데이터를 다른 연결에 사용할 수 없다.

 

 한 번 로그인 뒤에 로그아웃을 하지 않는 이상, 메일이나 게시글 열람 등의 행동을 클라이언트는 지속적으로 행할 수 있다. 하지만 HTTP 프로토콜은 비연결성과 비상태성을 특성을 가짐으로, 클라이언트의 지속된 요청에 대한 구분(식별)을 할 수 없게 된다.

 

 즉, 메일을 1개 열람할 때마다, 아이디와 비밀번호 그리고 열람할 메일 경로까지 같이 보내줘야 처리가 가능하다. 이런 문제점을 해결하기 위해 등장한 것이 쿠키고, 세션이다.

 

4.쿠키 (Cookie) 와 세션 (Sessions) 의 차이점

 많은 차이점이 있겠지만, 관리하는 주체의 차이점이 가장 크다. 쿠키는 클라이언트에 저장됨으로 실질적인 관리는 클라이언트에서 수행하고, 세션은 서버에 저장됨으로 서버에서 관리한다.

 

 이는, 클라이언트에서 쿠키는 변조하여 서버로 전송할 수 있지만 세션은 변조하여도, 서버에서 관리함으로 전송 값이 악용될 수 없게 된다.

  쿠키 (Cookie) 세션 (Sessions)
저장 위치 클라이언트 서버
저장 형식 텍스트 Object
자원 소모 클라이언트 서버