Search

Session

Session

1. ์„ธ์…˜(Session)์ด๋ž€?

ํ•ญ๋ชฉ
์„ค๋ช…
์„ธ์…˜(Session)
ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
์‹๋ณ„์ž
ํด๋ผ์ด์–ธํŠธ๋Š” ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด sessionid ์ „๋‹ฌ
์ €์žฅ ์œ„์น˜
Django๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„ ์ธก DB์— ์„ธ์…˜ ์ €์žฅ
์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜๊ฑฐ๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ์ •๋ณด ๋“ฑ ๊ฐœ์ธ๋ณ„ ์ƒํƒœ ์ €์žฅ์— ์‚ฌ์šฉ

2. Django์˜ ์„ธ์…˜ ์„ค์ •

# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.db' # DB ์ €์žฅ ๋ฐฉ์‹ (๊ธฐ๋ณธ๊ฐ’)
Python
๋ณต์‚ฌ
์˜ต์…˜
์„ค๋ช…
'db'
DB์— ์ €์žฅ (๊ธฐ๋ณธ)
'file'
ํŒŒ์ผ๋กœ ์ €์žฅ
'cache'
๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ์ €์žฅ
'cached_db'
์บ์‹œ + DB ๋ณ‘ํ–‰ ์ €์žฅ
'signed_cookies'
ํด๋ผ์ด์–ธํŠธ ์ฟ ํ‚ค์— ์ง์ ‘ ์ €์žฅ

3. ์„ธ์…˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• (View์—์„œ)

# ์„ธ์…˜์— ๊ฐ’ ์ €์žฅ request.session['username'] = 'hong' # ์„ธ์…˜์—์„œ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ username = request.session.get('username', '์ต๋ช…') # ์„ธ์…˜ ์‚ญ์ œ del request.session['username'] # ๋ชจ๋“  ์„ธ์…˜ ์‚ญ์ œ (๋กœ๊ทธ์•„์›ƒ ๋“ฑ) request.session.flush()
Python
๋ณต์‚ฌ

4. ์„ธ์…˜ ์„ค์ • (์„ ํƒ)

# settings.py SESSION_COOKIE_NAME = 'my_sessionid' # ๊ธฐ๋ณธ: sessionid SESSION_COOKIE_AGE = 60 * 30 # 30๋ถ„ (๊ธฐ๋ณธ: 2์ฃผ) SESSION_EXPIRE_AT_BROWSER_CLOSE = True # ๋ธŒ๋ผ์šฐ์ € ๋‹ซ์œผ๋ฉด ์„ธ์…˜ ๋งŒ๋ฃŒ
Python
๋ณต์‚ฌ

5. ์„ธ์…˜ ๋™์ž‘ ํ๋ฆ„

sequenceDiagram
    participant Client
    participant Server
    participant DB

    Client->>Server: ์ตœ์ดˆ ์ ‘์†
    Server->>Client: sessionid ์ฟ ํ‚ค ๋ฐœ๊ธ‰
    Server->>DB: ์„ธ์…˜ ๋ฐ์ดํ„ฐ ์ €์žฅ
    Note over DB: django_session ํ…Œ์ด๋ธ”

    loop ์š”์ฒญ๋งˆ๋‹ค ๋ฐ˜๋ณต
        Client->>Server: sessionid ์ฟ ํ‚ค ์ „์†ก
        Server->>DB: ์„ธ์…˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ
        DB->>Server: ์‚ฌ์šฉ์ž ์ƒํƒœ ์ •๋ณด
        Server->>Client: ์‘๋‹ต
    end
Mermaid
๋ณต์‚ฌ
1.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์† ์‹œ sessionid ์ฟ ํ‚ค ๋ฐœ๊ธ‰
2.
์„œ๋ฒ„๋Š” ํ•ด๋‹น ID์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ DB(django_session)์— ์ €์žฅ
3.
ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ๋งˆ๋‹ค sessionid๋ฅผ ์ฟ ํ‚ค๋กœ ์ „์†ก
4.
์„œ๋ฒ„๋Š” ID๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด๋‹น ์‚ฌ์šฉ์ž ์ƒํƒœ ์ถ”์  ๊ฐ€๋Šฅ

6. ์‹ค์Šต ์˜ˆ์ œ

๋กœ๊ทธ์ธ ์ƒํƒœ ์ €์žฅ

def login_view(request): if request.method == 'POST': request.session['user_id'] = request.POST['username'] return redirect('mypage') return render(request, 'login.html') def mypage(request): user_id = request.session.get('user_id', '๊ฒŒ์ŠคํŠธ') return render(request, 'mypage.html', {'user_id': user_id})
Python
๋ณต์‚ฌ

์žฅ๋ฐ”๊ตฌ๋‹ˆ ์˜ˆ์ œ (๋ฆฌ์ŠคํŠธ ์ €์žฅ)

def add_to_cart(request, product_id): cart = request.session.get('cart', []) cart.append(product_id) request.session['cart'] = cart return redirect('cart_view') def cart_view(request): cart = request.session.get('cart', []) return render(request, 'cart.html', {'cart': cart})
Python
๋ณต์‚ฌ

7. ์„ธ์…˜ ๋ฐ์ดํ„ฐ ํ™•์ธ (๊ด€๋ฆฌ์ž ๋ชจ๋“œ or DB)

# DB ํ…Œ์ด๋ธ”: django_session python manage.py dbshell SELECT * FROM django_session;
Shell
๋ณต์‚ฌ

8. ์ฃผ์˜์‚ฌํ•ญ

ํ•ญ๋ชฉ
์„ค๋ช…
์„ธ์…˜์— ์ €์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ’
๊ธฐ๋ณธ์ ์œผ๋กœ JSON ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ๊ฐ’๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ (dict, str, list ๋“ฑ)
๋ณด์•ˆ
๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ์ ˆ๋Œ€ ์ €์žฅํ•˜์ง€ ๋ง ๊ฒƒ (๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ)
์„ธ์…˜ ํฌ๊ธฐ ์ œํ•œ
๊ธฐ๋ณธ DB backend ๊ธฐ์ค€ ํฌ๊ธฐ ์ œํ•œ ์—†์Œ (๋‹จ, ์ฟ ํ‚ค ๋ฐฉ์‹์€ ์ œํ•œ ์žˆ์Œ)

9. ์‹ค์Šต ๊ณผ์ œ

์‹ค์Šต๋ช…
๋ชฉํ‘œ
์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„ ์ €์žฅ
์ž…๋ ฅ๊ฐ’์„ ์„ธ์…˜์— ์ €์žฅ โ†’ ํŽ˜์ด์ง€์— ์ถœ๋ ฅ
๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€
์„ธ์…˜์— ID ์ €์žฅ โ†’ ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ์ถœ๋ ฅ
์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ตฌํ˜„
๋ฆฌ์ŠคํŠธ ์ €์žฅ โ†’ ์ถ”๊ฐ€/์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„
session.flush() ์‹ค์Šต