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() ์ค์ต |