코딩 개발일지

장고(Django) stateful/stateless/쿠키/토큰 본문

AI 본 교육/AI 7주차

장고(Django) stateful/stateless/쿠키/토큰

호기호 2023. 9. 21. 00:24

stateful / stateless

stateful: server side 에 client와 server의 연속된 동작 상태정보를 저장하는 형태

             쉽게 말해, 서버에 사용자 정보 저장


stateless: server side 에 client와 server의 연속된 동작 상태정보를 저장하지 않는 형태

                서버에 사용자 정보 저장X


쿠키방식 / 토큰방식 차이

- 면접 단골 -

 

  • 서버 기반 인증 (Cookie-Session)

전통적 방식. HTTP가 stateless 해서 탄생함

따라서 장점이자 단점이 stateful 하다는 것이다 (서버 부하 가능성)

  • 토큰 기반 인증 (oAuth 2.0, JWT)

stateless 한 방식이다. 서버 부하를 덩 수 있다.

1. oAuth 

Access Token, Refresh Token을 이용

Authorization Server에서 인증+권한 관리를 하고 Resource Server에서는 자원에 대한 관리만 한다.


장점: 보안성 좋다. (Access Token을 지속적으로 발급받아야 함)
단점: 필요한 Resource가 너무 많다. Access Token이 만료될 때마다 새롭게 발급하는 과정에서 생기는 HTTP 요청이 잦다.

 

 

2. JWT (JSON Web Token)

토큰 자체가 data를 가지고 있다.


장점: 토큰 기반 인증의 장점 (서버 부하 덜 수 있음)
단점: 보내는 데이터 양이 크다. 토큰 자체를 탈취하면 ID, PW 자체를 알 수 있다. (따라서 HTTPS 통신을 권장한다.)


JWT를 이용해서 프로젝트를 진행했다.

rest_framework_simplejwt 를 install하고 공식문서에서 하라는대로 추가해준다.

 

JWT에서 계정정보를 확인해 볼 수 있다. JWT web token 사이트에서 조회할 수 있고, 조회방법은 포스트맨들 통해 "refresh"키와 "access"키를 확인 후 붙여넣어주면 확인 가능하다.

위 사진처럼 POST로 users/api/token/ 을 send 해주면 된다. Body 에서 raw, JSON 바꿔주고, 가입되어있는 username과 password를 입력하면 token key값이 나온다.

signature 부분에 settings.py의 SECRET_KEY를 붙여넣어주면 valid로 바뀐다.

secret_key는 나중에 꼭 숨겨둬야 한다.


name= : test코드 혹은 template에서 사용

name없을 경우 : /api/todo/

name있을 셩우 : {{ url todo }}

 

get은 1개만 받고 filter는 여러개를 받을 수 있음

get은 object 가져오고

filter는 queryset 가져옴. queryset은 object의 집합이다.

get : "<Todo:3>"

filter : ["<Todo:3>"]

 

팀프로젝트 진행 시

1. python 버전 맞추기

2. 정렬 extension 맞추기

3. 사전계획(API, ERD, model 대략짜기) - 역할 분담 쉬워짐