
쿠키 저장 방식
쿠키 전송 과정
쿠키의 주요 용도
- 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용됨
- 이를 이용해 사용자의 로그인 상태를 유지할 수 있음
- 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜주는 역할
⇒ 서버에게 ‘나 로그인된(인증된) 사용자야’라는 인증 정보가 담긴 쿠키를 매 요청마다 계속 보내는 것

| 구분 | 쿠키 | 세션 |
|---|---|---|
| 저장 위치 | 브라우저(클라이언트) | 서버 |
| 저장 내용 | 실제 데이터 | 세션 ID만 (실제 데이터는 서버) |
| 보안 | ❌ 상대적으로 취약 | ✅ 안전 |
| 속도 | ✅ 빠름 | ❌ 서버 처리 필요 |
| 용도 | 자동 로그인, 설정 저장 | 로그인 인증 |
세션도 결국 쿠키를 사용함 (세션 ID를 쿠키에 저장해서 보내기 때문)
[브라우저]
↓ (쿠키에 session_id 담아서 보냄)
[서버]
↓
session_id로 사용자 데이터 조회
브라우저
서버
클라이언트와 서버 간의 상태 정보를 유지하기 위해서 쿠키와 세션을 사용
클라이언트와 서버는 각기 다른 사용자를 식별해야 하는 상태
그래서 사용자를 식별하기 위해서 필요한 과정이 바로 ‘인증(Authentication)’
다양한 인증이 존재
- 아이디와 비밀번호
- 소셜 로그인(OAuth)
- 생체인증
⇒ Django에서는 사용자 인증과 관련된 가장 중요하고 기본적인 뼈대를 제공 (Django Authentication System)
Django에서 사용자 인증과 관련된 기능을 모아 놓은 시스템
인증에 중요한 기본적인 기능을 제공
- User Model: 사용자 인증 후 연결될 User Model 관리
- Session 관리: 로그인 상태를 유지하고 서버에 저장하는 방식을 관리
- 기본 인증(Id/Password): 로그인/로그아웃 등 다양한 기능을 제공
⇒ Django Authentication System을 활용하여 로그인/로그아웃/회원가입/회원정보수정 등 다양한 기능들을 구현해보자!
프로젝트의 특정 요구사항에 맞춰 사용자 모델을 확장할 수 있음
- 예를 들어, 기본 User 모델의 first_name, last_name처럼 우리 프로젝트에 필요 없는 필드를 제거하여 데이터베이스 모델을 더 간결하게 관리할 수 있음
⇒ Django에서 제공하는 기본 유저 모델이 아닌 우리가 직접 커스텀한 유저 모델을 사용해보자!
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = []urlpatterns = [
...,
path('accounts/', include('accounts.urls')),
]from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
passAUTH_USER_MODEL = 'accounts.User'from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)