[Django] 장고 회원 시스템 (Session과 User Model)

2026. 6. 8. 00:02·Django
반응형

 

Django Session

Django는 로그인 상태를 유지하기 위해 Session 기능을 제공한다.

Session은 사용자의 상태 정보를 서버에 저장하여 HTTP의 무상태성(Stateless)을 해결하는 역할을 한다.

 

HTTP의 무상태성(stateless)

  • 서버가 클라이언트의 이전 요청에 대한 상태 정보를 저장하지 않는 특성
  • 각 요청은 독립적이며, 서버는 요청마다 클라이언트를 식별할 수 있어야 함

 

HTTP는 기본적으로 상태를 저장하지 않는 프로토콜이다.

즉, 서버는 이전 요청을 기억하지 않는다.

예를 들어 사용자가 로그인 요청을 보냈다고 가정해 보자.

1. 로그인 요청
2. 메인 페이지 요청
3. 마이페이지 요청

각 요청은 서로 독립적으로 처리된다.

따라서 별도의 방법이 없다면 서버는 현재 요청을 보낸 사용자가 누구인지 알 수 없다.

이러한 특징을 HTTP의 무상태성(Stateless)이라고 한다.

 

Session의 역할

Session은 사용자의 상태 정보를 서버에 저장한다.

로그인에 성공하면 Django는 Session을 생성하고 사용자 정보를 저장한다.

login(request, user)

위 코드를 실행하면 Django가 자동으로 Session을 생성한다.

이후 사용자가 다른 페이지를 요청할 때 Session 정보를 확인하여 로그인 상태를 유지할 수 있다.

request.user

덕분에 사용자는 매 요청마다 아이디와 비밀번호를 입력하지 않아도 된다.

 


 

User Model 확장

Django는 기본 User 모델을 제공한다.

하지만 실제 서비스를 개발하다 보면 기본 User 모델만으로는 부족한 경우가 많다.

 

예를 들어 다음과 같은 요구사항이 생길 수 있다.

  • 프로필 이미지 추가
  • 전화번호 추가
  • 닉네임 추가
  • 생년월일 추가
  • 이메일을 로그인 ID로 사용

이처럼 사용자 정보를 확장해야 하는 경우가 많다.

 

 

AbstractUser

Django는 User Model 확장을 위해 AbstractUser를 제공한다.

Custom User를 만들 때는 기본 User 모델을 직접 수정하는 것이 아니라 AbstractUser를 상속받아 새로운 모델을 정의한다.

 

 

InconsistentMigrationHistory 에러 발생

이미 프로젝트 전체에 기본 User를 사용하도록 적용되어 있기 때문에 프로젝트 중간에 User 모델을 변경하는 것은 매우 까다롭다.

  • 쉬운 해결법: 데이터베이스 삭제하고 처음부터 다시 생성
    • db.sqlite3 파일 삭제 후, 다시 mgirate

 

그렇기에 새로운 Django 프로젝트 생성 시, User 모델 확장이 필요하지 않더라도 미래의 혹시 모를 변경을 위해 CustomUser를 정의하는 것을 권장한다.

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass

 

 

[참고] 실전! Django 입문 강의

반응형
'Django' 카테고리의 다른 글
  • [Django] URL 단축 서비스 만들기
  • [Django] Kakao 소셜 로그인
  • [Django] 장고 회원 시스템 (User 모델과 Admin 페이지)
  • [Django] Function-Based View와 Class-Based View
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (226) N
      • SSAFY (10)
      • Algorithm (123)
        • 이론 (6)
        • 백준 (BOJ) (114)
        • 프로그래머스 (2)
        • 코드트리 (1)
      • Trouble Shooting (11)
      • Frontend (7)
      • React (17)
      • Next.js (5)
      • Vue (4)
      • Django (12) N
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (13)
        • JavaScript (0)
        • Java (13)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
      • 기타 (1)
        • Tistory (1)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    html5
    DP
    오블완
    중복순열
    티스토리챌린지
    알고리즘
    싸피
    bfs
    우선순위큐
    백트래킹
    Algorithm
    dfs
    Heap
    강의
    순열
    블록체인
    django
    브루트포스
    힙
    SSAFY
    파이썬
    React
    SSAFYcial
    백준
    수학
    그리디
    Error
    Next.js
    구현
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
올콩
[Django] 장고 회원 시스템 (Session과 User Model)
상단으로

티스토리툴바