[Web] 쿠키(Cookie)와 세션(Session)의 차이, 쿠키란? 세션이란?

쿠키(Cookie)란?

쿠키는 클라이언트(로컬)에 저장되는 키와 값이 들어있는 작은 데이터 파일이다. 이러한 쿠키는 클라이언트에 저장되어 필요시 정보를 참조하거나 재사용할 수 있다.

 

보통 웹 환경에서는 클라이언트와 서버가 HTTP 프로토콜을 이용해 통신한다. 

하지만 HTTP 프로토콜은 아래와 같은 특징을 가지기 때문에 쿠키를 사용한다.

 

1. Connectionless(비연결성)

-> HTTP는 TCP 연결을 맺고 요청(Request)을 보내면 서버는 응답(Response)을 보내고 연결이 끊어진다.

물론 HTTP 1.1 버전은 커넥션을 계속 유지하는 keep-alive 옵션이 디폴트이긴 하다. 

하지만 HTTP 1.0 버전은 기본적으로 connectionless이다.

 

참고)

[Web] HTTP 1.0 과 HTTP 1.1의 차이

 

[Web] HTTP 1.0 과 HTTP 1.1의 차이

HTTP란? HTTP(Hyper Text Transfer Protocol)는 인터넷에서 주로 사용하는 데이터를 송수신하기 위한 프로토콜이다. HTTP에 대한 자세한 내용은 다음을 참고하자. [네트워크] HTTP란? non-persistent HTTP vs persistent

code-lab1.tistory.com

 

2. Stateless(무상태)

-> HTTP는 상태를 따로 저장하지 않는다. 즉, 연결이 끊어지는 순간 모든 상태 정보가 사라지게 된다.

따라서 서버는 클라이언트가 첫 번째 통신 때 보낸 정보를 두 번째 통신 때 알 수 없다.

 

이러한 HTTP의 특성 때문에 쿠키가 사용된다. 

 

쿠키는 다음과 같이 구성 되었다.

  • 이름 : 쿠키를 구별하는 이름
  • 값 : 쿠키에 저장되는 값
  • 유효시간 : 큐키 유지시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

 

쿠키의 동작 방식을 예를 들어 살펴보자.

 

 

쿠키의 동작(1)
[그림 1] 쿠키의 동작(1)

 

 

1. 클라이언트(웹 브라우저)가 서버에 로그인을 요청한다고 하자.

 

서버는 클라이언트의 요청을 받고 클라이언트의 정보를 담은 쿠키를 생성한다.

이후 HTTP 헤더에 set-cookie 옵션을 통해 쿠키를 포함해 응답을 보낸다.

 

클라이언트는 해당 쿠키를 쿠키 저장소에 저장해 놓는다.

 

[그림 2] 쿠키의 동작(2)
[그림 2] 쿠키의 동작(2)

 

 

클라이언트가 로그인을 완료하고 첫 페이지인 welcome 페이지에 접근한다고 하자.

 

이때 클라이언트는 쿠키 저장소에서 쿠키를 꺼내 HTTP 요청에 쿠키를 담아 전송한다.

 

그럼 서버는 HTTP 요청의 쿠키를 읽어 클라이언트를 식별할 수 있다.

 

만약 쿠키가 없었다면 다시 로그인 정보를 보내야 하는 불상사가 일어났을 것이다.

 

 

세션(Session)이란?

세션은 일정 기간 동안 같은 사용자(클라이언트)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.

 

세션은 쿠키를 기반으로 하지만 쿠키와 다르게 서버 측에서 저장하고 관리한다.

 

서버는 세션 ID를 이용해 클라이언트를 구분하며, 웹 브라우저가 서버에 접속해 브라우저를 종료할 때까지 세션을 유지한다.

 

이러한 세션의 동작 방식을 예를 들어 살펴보자.

 

세션의 동작 방식(1)
[그림 3] 세션의 동작 방식(1)

 

클라이언트(웹 브라우저)가 서버에 로그인을 요청한다고 하자.

 

서버는 클라이언트의 요청을 받고 클라이언트의 정보를 담은 세션을 생성한다.

이후 세션 ID를 담은 쿠키를 생성하고, HTTP 헤더에 set-cookie 옵션을 통해 쿠키를 포함한 응답을 보낸다.

 

클라이언트는 해당 쿠키를 쿠키 저장소에 저장해 놓는다.

 

세션의 동작 방식(2)
[그림 2] 세션의 동작 방식(2)

 

클라이언트가 로그인을 완료하고 첫 페이지인 welcome 페이지에 접근한다고 하자.

 

이때 클라이언트는 쿠키 저장소에서 쿠키를 꺼내 HTTP 요청에 쿠키를 담아 전송한다.

 

그럼 서버는 HTTP 요청의 쿠키를 읽어 쿠키 안의 세션 ID를 이용해 클라이언트를 식별할 수 있다.

 

 

쿠키와 세션의 차이

쿠키와 세션의 동작방식을 보면 어떤 차이가 있는지 알 수 있을 것이다.

 

  • 쿠키는 클라이언트에 저장되지만, 세션은 서버에 저장된다.
  • 세션은 서버에 저장되므로 서버의 자원을 사용한다.
  • 반면 쿠키는 클라이언트에 저장되므로 서버의 자원을 사용하지 않는다는 이점이 있다.
  • 서버에 요청을 보내는 사용자가 많을 경우 세션은 부하가 심할 수 있다.
  • 보안면에서 세션이 더 우수하다. 쿠키는 정보를 직접 저장하고 요청을 보낼 수 있다. 만약 쿠키에 사용자의 주민번호 같은 민감한 정보를 그대로 담아 HTTP 요청을 보낸다고 하자. 이때 중간에 정보를 스니핑 당할 수도 있다.
  • 세션은 쿠키를 이용해 쿠키에 세션 ID만 저장하고 서버에서 세션을 처리하기 때문에 비교적 보안성이 좋다.
  • 쿠키는 만료시간 동안 파일로 저장되므로 브라우저를 종료해도 정보가 남아있다.
  • 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제된다.

 

 

반응형

댓글

Designed by JB FACTORY