SY 개발일지

쿠키와 세션에 대해 알기 위해서는 우선 이것들이 왜 사용되는지에 대해 알아볼 필요가 있다.

https://soyeonnnb.tistory.com/16

 

HTTP Protocol 의 특징

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 한다. 클라이언트-서버 프

soyeonnnb.tistory.com

HTTP Protocol 환경은 비연결성, 무상태라는 특징을 가지고 있다. 즉 서버가 클라이언트에 대해 매번 확인해야 한다. 예를 들어 어떠한 페이지에 로그인을 했어도, 비연결성, 무상태로 인해 다른 페이지로 넘어갈 때마다 로그인 상태가 유지가 되지 않기 때문에 새로이 로그인을 계속해서 해야한다는 것이다.

 

이러한 특성을 보완하기 위해 쿠키와 세션을 사용한다.

 

쿠키

쿠키란 서버가 생성하는 클라이언트 정보를 가지고 있는 파일이다. 클라이언트 컴퓨터에 저장되며, 필요에 따라 요청시 서버로 함께 전송된다. 쿠키는 쉽게 장바구니를 생각하면 된다. 우리의 브라우저와 쇼핑몰 사이트가 있을 때, 장바구니에 물건을 넣으면 해당 쇼핑몰에서는 익명의 유저에 대해 그 장바구니에 대한 쿠키를 생성해 response에 담아 유저에게 보낸다. 그런 다음 다시 그 쇼핑몰에 방문해도 장바구니가 유지되는데, 이는 쿠키를 브라우저가 저장하고 있기 때문이다. 쿠키는 브라우저(크롬, 엣지, 파이어폭스 등) 별로 별도로 저장되기 때문에 다른 브라우저로 방문하면 장바구니 내역이 비어있다.

쿠키의 특징

1. 이름(key), 값(value), 만료일(Expire date, 저장 기간), 경로 정보로 구성되어 있다.

2. 클라이언트에 최대 300개의 쿠키를 저장할 수 있다.

3. 하나의 도메인 당 20개의 쿠키를 저장할 수 있다.

4. 쿠키 하나는 4KB(=4096byte) 까지 저장가능하다.

    → 즉 최대 300개의 쿠키를 저장할 수 있으므로, 총 1.2MB(1200kb)까지 저장 가능하다. 이미지 등은 이미지 주소에 대해서 저장을 해놓아 용량을 줄여 저장한다.

 

쿠키의 동작 순서

1. 클라이언트가 페이지를 요청한다.(사용자가 웹사이트에 접근한다.)

2. WAS(Web Application Server)는 (필요하다면) 쿠키를 생성하고, Http Header에 쿠키를 넣어 응답한다.

3. 클라이언트(Browser)는 쿠키를 가지고 있다가 해당 서버에 다시 요청할 때 요청과 함께 쿠키를 전송한다.

    이 때 항상 쿠키를 전송하는 것이 아니라 해당 URL에 맞는 쿠키가 있다면 요청시에 이를 넘긴다.

4. 쿠키는 브라우저가 종료되더라도 계속 저장되어 있기 때문에(만료기간 전까지) 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우에 요청 페이지와 함께 쿠키를 전송한다.

 

세션

사용자가 웹 서버에 접속해있는 상태를 하나의 단위로 보고, 그것을 세션이라고 한다. 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술이다. 세션은 로그인을 생각하면 쉽다. 세션에 로그인한 사용자의 정보를 저장함으로써 화면이 이동해도 로그인이 풀리지 않고 로그아웃 하기 전까지 유지가 된다.

세션의 특징

1. 각 세션은 세션ID로 구분한다. 여기서 세션ID는 JSESSIONID이다.

2. WAS의 메모리에 객체 형태로 저장되는데, 따라서 서버에 저장되기 때문에 용량에 제한 없이 저장이 가능하다.

3. 쿠키는 클라이언트에 저장되기 때문에 공유PC의 경우 보안에 취약할 수 있다. 하지만 세션은 서버에 저장되기 때문에 쿠키에 비해 보안이 좋다.

세션의 동작 순서

1. 클라이언트가 페이지를 요청한다.

2. 서버는 접근한 클라이언트의 Request-Header 필드인 쿠키를 확인하여 클라이언트가 해당 세션ID를 보냈는지 확인한다.

2-1. 이 때 세션ID가 없으면 쿠키를 생성해 저장한 후, 클라이언트에게 돌려준다.

3. 생성된 세션ID를 이용하여 서버 내 메모리를 생성한다.

4. 클라이언트가 다음 요청 시 쿠키(JSESSIONID)에 세션ID를 포함하여 전달하면, 서버 내 저장된 세션ID와 비교하여 데이터를 조회한다.

 

쿠키 사용 이유

세션이 쿠키에 비해 보안이 좋은 편이나 쿠키를 사용하는 이유는 저장되는 위치에 있다. 세션은 서버에 저장되고, 서버 자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 상당하다. 이러한 자원관리 차원에서 쿠키와 세션을 적절한 요소 및 기능에 병행 사용하여 서버 자원의 낭비를 방지하며 웹사이트의 속도를 높일 수 있다.

쿠키와 세션의 차이

  쿠키(Cookie) 세션(Session)
저장 위치 클라이언트(=접속자 PC) 웹 서버
저장 형식 text Object
만료 시점 쿠키 저장시 설정
(브라우저가 종료되어도, 만료 시점이 지나지 않으면 자동 삭제되지 않음)
브라우저 종료시 삭제
(기간 지정 가능)
사용하는 자원(리소스) 클라이언트 리소스 웹 서버 리소스
용량 제한 총 300개
하나의 도메인 당 20개
하나의 쿠키 당 4KB(=4096byte)
서버가 허용하는 한 용량 제한 없음
속도 세션보다 빠름 쿠키보다 느림
보안 세션보다 안좋음 쿠키보다 좋음

 

 

자료 출저

  • https://hahahoho5915.tistory.com/32
  • https://interconnection.tistory.com/74

'CS 정리 > 개발 상식' 카테고리의 다른 글

GoF(Gang of Four) 디자인패턴  (0) 2023.05.06
쓰레드(Thread)란?  (0) 2023.05.02
동기와 비동기, 블록과 논블록  (0) 2023.04.27
HTTP Protocol 의 특징  (0) 2023.04.18
GIT과 GITHUB  (0) 2023.04.16
profile

SY 개발일지

@SY 키키

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!