본문 바로가기
Computer Science/네트워크

[네트워크] 쿠키와 세션 (쿠키와 세션의 필요성, 쿠키/세션 개념과 동작방식, 쿠키와 세션 차이, 쿠키를 사용하는 이유, 세션을 사용하는 이유, 웹캐시란?)

by 그적 2024. 2. 16.

목차

  • 쿠키와 세션의 필요성 : HTTP Stateless, Connectionless
  • 쿠키 개념과 동작 방식
  • 세션 개념과 동작 방식
  • 쿠키와 세션 차이
  • 쿠키를 사용하는 이유
  • 세션을 사용하는 이유
  • 웹캐시란?

 


1. 쿠키와 세션의 필요성 : HTTP Stateless, Connectionless

HTTP는 웹 상에서 서버와 클라이언트 간 데이터를 송수신하기 위해 사용되는 프로토콜이다.

 

HTTP는 서버와 클라이언트 구조를 띄며, Stateless하고 Connectionless하다는 특징을 가지고 있다. 그중 요청에 대한 응답이 끝나면 연결을 끊어버리는 Connectionless와 서버가 클라이언트의 상태를 저장하고 있지 않다는 Stateless 특성으로 인해, 클라이언트는 서버와 송수신할 때 요청하는 데이터 외에 인증 정보와 같은 추가적인 데이터를 포함해 데이터를 요청해야 한다. 이때 쿠키와 세션으로 인증된 클라이언트임을 증명하는 것이다.

 


2. 쿠키 개념과 동작 방식

쿠키는 클라이언트 측 로컬에 저장되는 파일이다. HTTP가 클라이언트의 상태 정보를 클라이언트 로컬에 저장해 두었다가, 필요시에 데이터를 참조하거나 재사용한다. 사용자가 따로 작업하지 않아도 HTTP가 쿠키를 Request 헤더에 포함시켜 데이터를 요청한다.

 

(구성 요소)

  • 쿠키 이름 (Name)
  • 쿠키 값 (Value)
  • 쿠키 만료 시간 (Expires)
  • 전송할 도메인 이름 (Domain)
  • 전송할 경로 (Path)
  • 보안 연결 여부 (Secure)
  • HttpOnly 여부 (HttpOnly)

 

(사용 예시)

  • 쇼핑몰 장바구니 기능
  • 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?" 기능
  • 팝업 창에서 "오늘 이 창을 다시 보지 않기" 기능

 

 


3. 세션 개념과 동작 방식

세션은 클라이언트의 정보를 서버 측에서 관리하는 방식이다. 서버는 클라이언트를 구분하기 위해 로그인 시 세션ID를 부여하고 저장해둔다. 응답을 받은 클라이언트는 쿠키에 세션ID를 저장해 사용하는데, 서버 측에서 세션ID 만료 시간을 설정함으로써 사용자 인증을 관리할 수 있다.

 

(사용 예시)

  • 로그인과 로그아웃

 

 


4. 쿠키와 세션 차이

쿠키는 클라이언트에 저장되는 정보이며, 세션은 쿠키를 기반으로 서버가 클라이언트의 정보를 관리하는 방식이다. 쿠키는 로그인 시에 "아이디, 비밀번호를 저장하시겠습니까?" 혹은 팝업 창에 "오늘 하루 이 팝업 보지 않기" 등의 기능을 수행하는데, 클라이언트의 정보를 클라이언트에 저장해 둠으로써 HTTP 요청 시에 쿠키를 담아 전달될 수 있도록 한다. 세션은 클라이언트가 로그인을 할 때 세션ID를 생성해 서버에 저장하고, 생성한 세션ID를 클라이언트에 전달함으로써 동작한다.

 

쿠키와 세션에서 가장 비교되는 특징은 라이프사이클과 보안성에 있다. 쿠키는 브라우저가 종료되어도 쿠키 만료 시간까지 정보가 남아있으며, 세션은 브라우저가 종료되면 세션ID 또한 삭제된다. 보안성은 세션이 좀 더 우수하다고 할 수 있는데, 그 이유가 쿠키는 클라이언트 로컬에 모든 정보가 저장되기 때문에 이를 악용할 수 있기 때문이다.

 

  쿠키 세션
저장 위치 클라이언트 서버
저장 형식 Text Object
보안성 클라이언트에 모든 정보가 저장되어
보안에 취약
클라이언트에는 전달받은 세션ID만 저장되어
보안성이 좋음
라이프 사이클 쿠키 만료 시간에 따르며,
브라우저 종료 시에도 쿠키가 남아있을 수 있음
브라우저 종료 시 세션ID 삭제
속도 빠름 비교적 느림
사용 예시 쇼핑몰 장바구니 로그인 및 로그아웃

 


5. 쿠키를 사용하는 이유

먼저 쿠키를 사용하는 예시를 생각해보면, 로그인 시에 "아이디 및 비밀번호를 저장하시겠습니까?" 혹은 팝업창에 "오늘 하루 이 팝업 보지 않기" 등이 있다. 이러한 기능은 클라이언트 로컬에 상태 정보를 저장해두는 쿠키를 이용함으로써 클라이언트가 HTTP 요청 시에 해당 데이터(쿠키)를 포함시켜 전달하여 속도가 빨라지는 효과를 낼 수 있다. 또한, 서버 자원을 사용하지 않아 서버 측 부하를 줄일 수 있다는 장점을 가지기 때문에, 보안적 측면에서 문제가 없는 데이터라면 쿠키를 이용하는 것이 좋다.

 


6. 세션을 사용하는 이유

세션은 인증 및 인가를 위해 사용된다고 할 수 있다. 세션은 각 클라이언트마다 세션 ID를 생성하고 메모리 혹은 데이터베이스에 저장하기 때문에, 서버에서 클라이언트의 정보를 관리할 수 있다. 따라서 로그인 및 로그아웃 시에 서버는 클라이언트의 세션ID를 생성 혹은 삭제시킬 수 있고, 클라이언트는 전달받은 세션ID를 쿠키에 담아 로그인 상태를 유지할 수 있다.

 


7. 웹캐시란?

CPU가 디스크에서 데이터를 꺼내올 때 시간이 오래 걸리기 때문에, 그 중간에 캐시를 둠으로써 디스크보다 더 빠르게 데이터를 조회할 수 있다. 이를 기반으로 웹캐시는 한번 방문했던 사이트에 대한 정적 컨텐츠를 로컬에 저장해 둔 데이터를 의미한다. HTML, CSS, 이미지 등을 저장함으로써, 페이지 로드 속도를 높일 수 있다.

 

HTTP 헤더 내 Etag와 Last-Modified 필드를 통해 내가 가진 웹캐시 만료 시간을 확인한다. 만료되었다면 사이트의 전체 데이터를 새로 로드하고, 만료되지 않았다면 웹캐시를 로드하는 방식으로 동작한다.

 

댓글