본문 바로가기
Programming/Django

Django에서 세션(Session)을 다루는 방법

by Mandy's 2025. 7. 28.

웹 개발을 하다 보면 사용자 정보를 일정 시간 동안 유지해야 할 일이 생깁니다.

예를 들어, 로그인 상태 유지, 장바구니 기능, 최근 본 상품 등을 들 수 있죠.
이때 사용하는 개념이 바로 세션(Session)입니다.
이번 글에서는 세션이란 무엇인지, 그리고 Django에서 세션을 어떻게 다루는지에 대해 정리해보겠습니다.


📌 세션(Session)이란?

세션은 서버가 클라이언트의 상태를 일정 시간 동안 기억하는 기술입니다.
기본적으로 HTTP는 Stateless(무상태) 프로토콜이라, 서버는 매 요청마다 클라이언트를 기억하지 못합니다. 이 문제를 해결하기 위해 도입된 것이 쿠키(Cookie)세션(Session)입니다.


🍪 쿠키와 세션의 차이

항목 쿠키(Cookie) 세션(Session)

항목 쿠키 세션
저장 위치 클라이언트 (브라우저) 서버 (DB, 메모리, 캐시 등)
보안 취약할 수 있음 (클라이언트에 저장) 비교적 안전 (서버에 저장됨)
용량 제한 약 4KB 제한 없음 (서버에 따라 다름)
사용 용도 사용자 설정 기억, 세션 ID 저장 로그인 상태 유지, 장바구니 등

💡 세션의 기본 원리

  1. 사용자가 로그인 등의 동작을 하면,
  2. 서버는 세션 ID를 생성하고, 클라이언트에게 쿠키 형태로 전달합니다.
  3. 이후 클라이언트는 요청마다 이 세션 ID를 함께 보냅니다.
  4. 서버는 세션 ID에 연결된 데이터를 찾아 사용자 정보를 확인합니다.

⚙️ Django에서 세션 설정하기

Django는 세션을 매우 간단하게 사용할 수 있도록 지원합니다.

1. settings.py 확인

# 세션 엔진 (기본값은 DB 세션)
SESSION_ENGINE = 'django.contrib.sessions.backends.db'

# 세션 데이터 저장 위치 설정
# DB 외에도 캐시, 파일 기반 저장 가능

지원되는 엔진:

  • 'django.contrib.sessions.backends.db' (기본값, DB에 저장)
  • 'django.contrib.sessions.backends.cache'
  • 'django.contrib.sessions.backends.file'
  • 'django.contrib.sessions.backends.signed_cookies'

2. 세션 테이블 마이그레이션 (DB 세션인 경우)

python manage.py migrate

✏️ Django에서 세션 사용하기

▶ 세션에 값 저장

def set_session(request):
    request.session['username'] = 'minjoo'
    return HttpResponse("세션에 저장 완료!")

▶ 세션에서 값 불러오기

def get_session(request):
    username = request.session.get('username', 'Guest')
    return HttpResponse(f"Hello, {username}")

▶ 세션 삭제하기

def delete_session(request):
    try:
        del request.session['username']
    except KeyError:
        pass
    return HttpResponse("세션 삭제 완료!")

🧯 세션 유지 시간 설정하기

기본 세션 유효 시간은 2주입니다.
settings.py에서 아래와 같이 변경할 수 있습니다.

# 초 단위 (예: 1시간 = 3600초)
SESSION_COOKIE_AGE = 3600  

🧠 추가 옵션

# 브라우저 종료 시 세션 삭제
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

# 사용자가 활동할 때마다 세션 갱신 여부
SESSION_SAVE_EVERY_REQUEST = True

✅ 정리

  • 세션은 클라이언트 상태를 서버에서 관리하는 방식
  • Django는 세션 기능을 기본 제공하며 매우 쉽게 다룰 수 있음
  • 세션은 보안에 강하고, 인증/로그인 유지 등에 매우 유용

🔚 마무리

세션은 웹 개발에서 가장 많이 쓰이는 개념 중 하나입니다. Django처럼 프레임워크가 지원하는 경우, 어렵지 않게 적용할 수 있으니 꼭 직접 실습해보세요!
궁금한 내용이 있다면 댓글로 남겨주세요 :)