💻Django8
이제 Django를 통해 완벽한 회원가입, 로그인 구현하여 마무리하자!!!!!!!!
(장고 짤이제없숴..)
- 세션을 활용해서 로그인 및 로그아웃 구현
- 세션, 쿠키, 토큰의 차이점
📨세션(session)
서버가 클라이언트를 인지하게 하는 인증 정보

-
정의
- 브라우저가 종료 되기 전까지 클라이언트의 요청을 유지하게 해주는 기술이다.
-
사용처
-
동작원리
- 각 클라이언트에게 고유ID를 부여하고 구분하여 클라이언트의 요구에 맞는 서비스를 제공한다.
-
저장위치
- 서버 메모리에 저장한다.
(발급받은 세션 아이디를 쿠키에 저장후 서버로 전달)
-
보안
- 클라이언트 정보 자체는 서버에 저장되어 있으므로 비교적 안전하다.
-
세션만료
- 일반적으로 브라우저가 종료되었을때를 의미
- 사용자의 사용시간을 설정해 놓는데, 일정시간이 지남을 의미
🍪쿠키(cookie)
쿠키는 클라이언트에 저장되는 키와 값이 들이있는 작은 데이터 파일

- 정의
- 쿠키는 이름, 값, 만료날짜(쿠키 저장기간), 경로정보가 들어 있는데, 일정 시간동안 데이터를 저장하여 로그인 상태를 유지하는 기술이다.
- 사용처
- 방문사이트에 아이디, 비밀번호를 저장
- 쇼핑몰에서 장바구니
- 광고팝업창
- 동작원리
- 클라이언트가 페이지 요청시 서버에서 쿠키생성후 보내주고, 브라우저가 종료되어도 쿠키 만료시간이 있다면 클라이언트에서 보관하고 있다가 클라이언트 pc에 파일로 저장한다. (이게 맞아?.??)
- 저장위치
- 보안
- 클라이언트에 저장되기 때문에 변질되거나 스니핑 당할 우려가 있어서 보안에 취약하다.
- 쿠키확인
- 개발자도구(F12) -> aplication -> cookies
- 주소창옆 자물쇠 -> 쿠키

🤔세션과 쿠키의 차이점
가장큰 차이점은 저장위치, 속도, 보안, 라이플사이클
|
세션 |
쿠키 |
| 저장위치 |
서버 |
클라이언트 |
| 속도 |
느리다 |
빠르다 |
| 보안 |
안전 |
취약 |
| 라이프사이클 |
브라우저 종료시 삭제 |
만료시간에 따라 브라우저 종료시에도 유지하게 할 수 있음 |
📃토큰(token)
인증을 하고 필요한 데이터를 갖고 있는 토큰을 주고 받으며 인증을 합니다. (+ 추가)

- 동작원리
- 클라이언트가 서버에게 로그인 요청을 보내고,서버에서 토큰을 생성해줘서 응답하고 클라이언트가 요청할때 마다 토큰 정보를 붙여서 서버에게 요청하며, 이에 대한 응답을 주고 받는다.
- 대표적으로 JWT(JSON Web Token)이 있다.😍!!
- 세션과의 차이점
- 토큰은 유저의 정보가 클라이언트에 저장된다.
- 토큰은 xss 공격에 취약하다
🔐세션관리(Session Management) 실습
세션생성하여 로그인 성공했을때 해당 아이디 출력하며,
과제 하기전 세션 개념 잡고 넘어가기 (차려진 밥상에 숟가락)
- 세션저장
req.session['키'] = 값
- 세션로드
req.session.get('키') = 값
- 세션검사
req.session.get('키', )
- 세션삭제
req.session.pop('키') = 값
<views.py>
req.session["id'] = req.POST.get("id")
req.session["pw"] = req.POST.get("pw")
print( req.session["id"] )
📚과제
기존 회원가입, 로그인 기능에 세션 추가하기
- 로그인 시점에 세션을 생성 하여 임의의 경로로 접속
- 자유롭게 사이트 만들기
- ex) 쇼핑몰 등
- ~ing
🦈수업후기

세션, 쿠키 차이에 대해서 짧고 명료하게 설명해주셔서 이해가 수월했고, 실습시간과 과제를 미리 할 수 있는 시간을 통해 스스로 해보면서 익히게 하는 수업이 너무 좋았다. 그리고 그때 그때 저희 눈높이에 맞추어 친철하게 최선을 다해 질의응답해주시는 강사님이 멋져브러 멋있으셨다.
그리고 요즘 여러가지를 한번에 하려다보니 태스크 관리가 잘 되지 않아 과제를 제출하는걸 깜빡하거나, 벨로그를 늦게 업로드하게 되었는데 이번주부터는 그런일이 없도록 빡집중 하자 이.상.훈!!!!!!! (운동을 줄여야 하나,,)
서버에서 세션을 가지고 있잖아요?
JWT는 그럴필요없이 헤더에 토큰만 담아서 보내주면되기때문에 stateless한 서버가 구성이 가능해요.
또한 서버가 여러대 있는 경우 세션기반으로 인증을 하게 된다면 각 서버마다 똑같은 세션정보를 가지고 있어야 해서 RDB에 저장하거나 Redis 같은 in-memory-database(캐싱)를 사용해야하죠.
하지만 JWT의 경우 서버에서 가지고있을 필요가 없기 때문에 서버 확장에 용이해요.
그래서 두 방식중 무엇을 사용할지 고려할 때 제가 위에서 말씀드린 내용을 고려해서 결정하면 됩니다.
꿀팁
블로그 재밌게 잘보고있습니다. 화이팅!