본문 바로가기

카테고리 없음

Cookie와 Session

 HTTP 프로토콜을 통한 통신을 할 때 사용되는 CookieSession은 HTTP 프로토콜의 특징이자 약점인 Stateless, Connectionless를 보완하기 위해서 사용된다. 

 

 

 

Stateless와 Connectionless

 

Stateless: 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식으로, 클라이언트와의 이전 통신에서 데이터를 주고받았다 해도, 다음 통신에서 이전 데이터를 유지하지 않는다. 상태 정보가 없기 때문에 서버는 클라이언트의 정보를 기억하고 있을 수 없다.

 

 

 

Connectionless: 클라이언트가 서버에 요청을 보내면 Connection을 하고, 응답을 보낸 뒤 Connection을 닫는다. 각 통신마다 새로운 Connection을 맺는다.

 

 

 

 

 위 특징들은 HTTP 프로토콜의 성능, 복잡도를 줄여 주지만, 클라이언트와 서버 간에 지속적인 상태 정보를 유지하지 않아 페이지를 이동할 때마다 로그인을 다시 해야 하거나, 상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없거나 하는 일이 발생할 수 있다.

 

 

 

 이런 문제는 웹 서비스를 개발할 때 많은 어려움을 유발한다. 무언가를 할 때마다 로그인을 다시 하는 건 매우 번거로운 일이기 때문이다. 

 HTTP의 Stateless와 Connectionless 문제를 해결하기 위해 우리는 Cookie와 Session(Session도 Cookie를 통해 동작한다)을 사용할 수 있다.

 

 

 

 

 

Cookie

 

 Cookie는 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트의 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용한다. 

 

Cookie의 특징

 

  • 각각 4KB로, 최대 300개까지 저장 가능한 텍스트 파일이다.
  • 클라이언트에 저장된다.
  • 이름, 값, 만료 시간, 경로 정보를 포함한다.
  • 웹 브라우저가 종료되면 삭제되지만, 만료 시간을 정해 두면 만료 시간에 삭제된다.
  • 브라우저에 해당 서버의 쿠키 정보가 있으면 HTTP 요청에 쿠키를 실어 보낸다.

 

 

Cookie의 동작 과정

 

  1. 클라이언트가 요청을 보낸다(로그인)
  2. 서버는 쿠키를 생성한다.
  3. 생성한 쿠키에 정보를 담아 응답을 보낼 때 포함시켜 클라이언트에게 돌려준다.
  4. 넘겨받은 쿠키는 클라이언트가 로컬 PC에 가지고 있다가 서버에 다시 요청할 때 요청과 함께 쿠키를 전송한다.
  5. 동일 서버에 재요청을 보낼 때 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청과 함께 쿠키를 전송한다.

 

 

 

Cookie 사용 예시

 

  • 팝업 창에서 "하루 동안 보지 않기"와 같은 기능을 구현할 때 사용한다.
  • 주로 장바구니 같은 보안이 중요하지 않은 정보를 저장한다.
  • 광고 서비스를 위해 사용자의 활동 기록을 쿠키를 통해 수집한다.

 

 

 

 

 

 

 

Session

 

 Session은 클라이언트가 브라우저에 접속하여 서버와 접속이 종료하기 전의 상태를 의미한다. 사용자가 웹사이트에 접속해 해당 창을 닫기 전까지의 상태이다. 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 부른다. 

 

Session의 특징

 

  • 용량의 제한이 서버의 능력에 달렸다.
  • 서버에 세션 객체를 생성하고 클라이언트마다 고유한 세션 ID를 부여한다.
  • 쿠키를 사용하여 세션 ID 값을 클라이언트에 전송한다.
  • 웹 브라우저가 종료되면 세션 쿠키를 삭제한다.

 

 

Session의 동작 과정

 

  1. 클라이언트가 웹 사이트에 접속해 서버에 요청을 보낸다.
  2. 서버는 접속한 클라이언트에게 세션 ID를 부여해서 Cookie에 넣어 응답을 보낸다.
  3. 클라이언트는 해당 세션 ID를 가지고 있는 Cookie와 함께 데이터를 요청한다.
  4. 서버는 Cookie로 넘겨받은 세션 ID를 통해 클라이언트를 구별하여 데이터를 알맞게 응답한다.
  5. 클라이언트가 접속을 종료한다.
  6. 서버는 Cookie와 세션 ID를 제거한다.

 

 

Session 사용 예시

 

  • 화면이 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지된다.
  • 아이디, 비밀번호 같은 보안이 중요한 정보를 저장한다.

 

 

 

 

 

 

 

 

Cookie vs Session

 우선, Cookie와 Session은 다른 방식이 아니라는 것을 짚고 넘어가야 한다. Session도 결국 Cookie를 통해 Session ID를 저장하기 때문에 방법의 차이일 뿐, 둘은 같은 기술을 사용한다. 

 

 

Cookie와 Session의 비교

 

  1. Cookie는 서버에 저장할 것이 없지만, Session은 서버에 세션을 저장해야 하므로, 사용자가 많으면 서버에 부하가 올 수 있다.
  2. Cookie는 text를 저장하지만, Session은(Session ID는 text로 Cookie에 저장될 것이지만) Object 형식으로 저장된다.
  3. Cookie는 클라이언트 리소스를 사용하지만, Session은 서버 리소스를 주로 사용한다.
  4. Cookie는 총 300개, 하나의 도메인 당 20개, 하나의 쿠키 당 4KB를 저장할 수 있지만, Session은 서버가 허용하는 한 용량 제한이 없다.
  5. Cookie는 서버 측에서 데이터 관리와 상호작용을 할 필요가 없기 때문에 Session보다 속도가 빠르다.
  6. Cookie는 정보를 클라이언트에 저장하기 때문에 Session보다 보안에 취약하다.
  Cookie Session
저장되는 위치 클라이언트 서버
저장 타입 text Object
사용 리소스 클라이언트 서버
용량 총 300개, 하나의 도메인 당 20개, 하나의 쿠키 당 4KB 서버 자원에 따라
속도 비교적 빠름 비교적 느림
보안 비교적 약함 비교적 강함

 

 

 

 

 

참고:

https://hahahoho5915.tistory.com/32

 

쿠키(Cookie), 세션(Session) 특징 및 차이

개요 > 쿠키(Cookie), 세션(Session) 각각 특성 및 차이 확실히 분류하기 메모 1. 공통점 : 웹 통신간 유지하려는 정보(ex:로그인 정보 등)를 저장하기 위해 사용하는 것(?) 2. 차이점 : 저장위치, 저장형

hahahoho5915.tistory.com

https://fomaios.tistory.com/entry/Network-%EC%84%B8%EC%85%98Session%EC%9D%B4%EB%9E%80-What-is-a-Session