쿠키와 세션

2023. 8. 8. 14:05브라우저&네트워크

HTTP

 

HTTP 는 클라이언트와 서버 사이에 이루어지는 요청-응답 프로토콜 이다. 

HTTP 는 두가지 특징을 가지고 있다.

- 비연결성(Connectionless)

- 무상태성(Stateless)

 

비연결성은 연결을 맺은 서버-클라이언트 관계에서 클라이언트의 요청에 대해 서버가 응답을 마치면 그 연결을 끊는 성질을 의미한다.

이로 인해서 A 클라이언트가 보내는 3번의 요청을 서버는 모두 A 클라이언트의 요청인지 A~C 클라이언트가 보내는 각각의 요청인지 알 수 없어진다. 이를 무상태성이라고 한다.

 


 

왜 이렇게 설계되었을까?

 

HTTP 는 인터넷 상 불특정 다수의 통신 환경을 기초로 설계 되었다.

따라서 한 번 맺은 연결을 지속적으로 유지한다면 쓸데 없이 많은 자원이 소요될 것이다.

매번 연결을 맺는 편이 지속적 연결 유지에 자원을 쓰는 것 보다 효율적일 것이다.

 


즉 클라이언트의 상태를 기억하기 위한 수단이 쿠키와 세션이다.

 

쿠키

 

쿠키는 서버에 인증하기 위한 클라이언트의 정보를 클라이언트에 저장하는 값이다.

set-cookie 는 HTTP 응답 헤더에서 서버가 클라이언트 측에 쿠키를 전송하기 위해 사용된다.

cookie 는 HTTP 요청 헤더에서 이전에 서버로 부터 받은 set-cookie 값을 포함한 값을 클라이언트가 전송하기 위해 사용된다.

 

순서는 아래와 같다.

 

1. 클라이언트가 서버에 페이지 정보를 요청

2. 서버는 클라이언트에 대한 쿠키 생성 후, HTTP 응답 헤더에 쿠키를 포함하여 응답한다. (set-cookie)

3. 클라이언트의 요청과 서버의 응답이 끝나면 HTTP의 비연결성으로 인해 연결이 끊긴다.

4. 새로운 요청을 할 경우, 이전에 받은 쿠키값을 보관하고 있다가 HTTP 요청 헤더에 값을 포함하여 요청한다.(cookie)

5. 서버는 쿠키값을 보고 이전에 요청을 보낸 클라이언트를 인식하여 상태를 기억한다.

 

 

장점

 

- 사용자의 입장에서 별도의 인증과정을 거치지 않고 서버가 나를 쉽게 기억하도록 할 수 있다.

 

단점

 

- 쿠키값은 쉽게 수정 가능하다. 따라서 변조될 가능성도 크다.

 


세션

 

인증하기 위한 클라이언트의 정보를 서버 단에서 저장 및 관리하는 방식이다.

쿠키가 쿠키값을 통해 클라이언트의 상태를 기억하게 한다면, 세션은 서버가 클라이언트에 부여한 세션 ID를 통해 기억하게 한다.

이 세션ID는 쿠키를 통해서 관리된다.

 

순서는 아래와 같다.

 

1. 클라이언트가 서버에게 페이지 정보를 요청

2. 서버는 클라이언트에 대한 쿠키 생성 후, HTTP 응답 헤더에 세션 ID 값이 담긴 쿠키를 포함하여 응답(set-cookie)

3. 클라이언트의 요청과 서버의 응답이 끝나면 HTTP 의 비연결성으로 인해 연결이 끊긴다.

4. 새로운 요청을 할 경우, 이전에 받은 쿠키값을 보관(SSID, JSESSIONID 등) 하고 있다가 HTTP 요청 헤더에 세션 ID 값이 담긴 쿠키를 포함하여 요청한다.(cookie)

5. 서버는 쿠키 내 세션 ID 값을 보고 이전에 요청을 보낸 클라이언트를 인식하여 상태를 기억한다.

 

 

장점

 

- 쿠키에 비해서 그나마 안전하다. 세션 ID 는 클라이언트에 저장된다고 해도 클라이언트의 정보 자체는 서버에 저장되어 있기 때문

 

단점

 

- 쿠키에 비해 느리다. 쿠키는 서버의 헤더를 바로 참조하면 되지만 세션은 세션 ID 를 주고 받은 다음 인증을 거쳐 서버의 데이터를 참조해야 하므로 속도가 비교적 조금 느리다.

- 세션은 서버의 자원을 사용한다. 한계가 존재하는 서버 자원을 사용하므로 속도 저하나 오버헤드 등 서버에 부하를 줄 수 있다.

- 해킹의 위험성이 있다. (세션 하이제킹)

 


참고 링크

 

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

 

HTTP 개요 - HTTP | MDN

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

developer.mozilla.org

https://hec-ker.tistory.com/368

 

[CS/보안 기초] (1) 쿠키(cookie)와 세션(session)의 차이

오늘부터 가볍게 면접 준비도 할 겸 헷갈리는 개념도 바로 잡을 겸 이 글을 보는 다른 학생들에게 도움도 될 겸! CS/보안 기초 개념을 정리할까 한다. 쿠키와 세션을 이해하려면, 먼저 쿠키와 세

hec-ker.tistory.com

https://code-lab1.tistory.com/298

 

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

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

code-lab1.tistory.com

https://hahahoho5915.tistory.com/32

 

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

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

hahahoho5915.tistory.com

 

'브라우저&네트워크' 카테고리의 다른 글

HTTP 와 HTTPS 차이점  (0) 2023.08.10
TCP와 UDP  (0) 2023.08.09
CORS 란?  (0) 2023.08.06
HTTP Method  (0) 2023.08.06
HTTP 상태코드  (0) 2023.07.05