Meme's IT

[Django] 쿠키와 세션 본문

BackEnd/Django

[Django] 쿠키와 세션

Memez 2023. 10. 4. 14:07

서버로부터 페이지를 받고 페이지를 보고 있을 때, 그 페이지는 서버와 실시간으로 연결된 상태일까?

→ 아님, HTTP의 특징인 비 연결 지향에 따름

그니까 한번 연결하면 바로 끊김

 

# HTTP 특징

1. 비연결 지향(connectionless)

: 서버는 요청에 대한 응답을 보낸 후, 연결을 끊음

  • 왜 비연결 지향으로 설계했을까?
    • 인터넷 상에서 블특정 다수에게 정보를 제공하는 것을 기반으로 설계했는데,
    • 블특정 다수가 모두 연결을 유지 → 서버 터짐
    • 연결을 유지하는 것 보다는, 더 많은 새로운 연결을 할 수있도록..!
  • 단점은?
    • 매 요청마다 연결/ 해제해야함 → 리소스가 추가적으로 발생

2. 무상태(Stateless)

: 연결을 끊는 순간 클라이언트와 서버 간의 통신이 끝나며 상태 정보가 유지되지 않음

  • 장점: 서버 부담 최소화
  • 단점: 요청이 복잡해짐

 

상태가 없다는 것은....

- 장바구니에 상품을 담은게 유지가 안됨

- 로그인 상태가 유지가 안됨 등등...

 

그럼 어떻게 장바구니에 담은 상품을 유지하고, 로그인 상태를 유지시킬까?

쿠키나 세션을 사용한다!


# 쿠키란?

서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각

 사용자 인증, 추적, 상태 유지 등에 사용한다

  • 장점: 서버에 부담이 적음
  • 단점: 요청을 보낼 때 항상 같이 보냄 / 보안이 비교적 취약

 

쿠키를 사용하는 과정

1. 브라우저가 서버에 사이트를 요청함

2. 서버가 페이지 + 쿠키를 제공함

     - 브라우저는 쿠키를 KEY - VALUE의 데이터 형식으로 저장

3. 브라우저가 같은 서버의 다른 페이지 재요청 + 아까받은 쿠키를 전송

     - 그럼 서버는 쿠키를 통해 요청이 동일한 브라우저에서 보낸건지 판단할 수 있다.

 

 

쿠키를 사용하는 목적

1. 세션관리: 로그인, 아이디 자동완성, 공지 하루 안보기 등등...

2. 개인화: 사용자 선호, 테마 등의 설정

3. 트래킹: 사용자 행동을 기록 및 분석

 

 


# 세션(Session)

서버 측에서 생성되어 클라이언트와 서버 간의 상태를 유지위한 데이터

데이터 저장을 서버에 하고, 해당 데이터를 찾을 수 있는 key(세션 ID)를 클라이언트가 가짐

→ 요청 시 세션 ID를 전달, 서버는 ID를 이용해 사용자 데이터 조회

ex) 로그인이 되어있는지 확인

  • 장점: 비교적 보안이 좋음
  • 단점: 서버에 부담이 더 됨
    • 세션ID를 통해 저장된 데이터를 서버가 열어봐야 함
    • 데이터를 서버에 저장 → 리소스를 더 많이 먹는다

 

세션을 이용해 로그인이 되어있는지 확인하기 위한 과정

1. 클라이언트가 로그인을 하면, 서버가 세션 데이터를 생성 후 저장

2. 생성된 세션 데이터에 인증할 수 있는 세션 ID를 발급

3. 발급한 세션 ID를 클라이언트에게 응답

4. 클라이언트는 응답 받은 세션 ID를 쿠키에 저장

5. 클라이언트가 다시 동일한 서버에 접속하면, 요청과 함께 (세션 ID가 저장된) 쿠키를 서버에 전달

6. 쿠키는 요청 때마다 서버에 전송되므로 서버에서 세션 ID를 확인해 '로그인 되어있다'는 것을 확인

 

 


 

둘 사이의 차이점은 뭘까요? 

쿠키는 정보를 사용자의 PC에 저장, 만료기간이 정해져있음

→ 보안에 비교적 취약하지만 빠르게 불러올 수 있다는 장점이 있음

하지만 세션은 정보를 서버에 저장하므로 브라우저를 닫으면 초기화된다는 특징이 있음

→ 그래서 보안에는 좋지만 서버의 리소스를 차지하고 속도가 비교적 느리다는 특징이 있다.

 

 

 

# Django는 DB에 쿠키를 저장함!

# 추가적으로... 쿠키에서 더 발전된 방식 = JWT(Json Web Token)

 

'BackEnd > Django' 카테고리의 다른 글

[Django] 로그인(2) 가입/탈퇴/수정  (0) 2023.10.05
[Django] 로그인(1) 로그인, 로그아웃  (0) 2023.10.04
[Django] Static Files & Media Files  (0) 2023.10.04
[Django] view 함수 update  (0) 2023.10.04
[Django] ModelForm  (0) 2023.10.04