본문 바로가기
카테고리 없음

[TIL]내일배움캠프 - Django JWT, ORM

by Byeong 2024. 4. 26.

 

JWT

 

Json Web Token으로 Cookie와 Session을 대신하여 사용이 가능하다. 

 

Sesstion은 Cookie를 통해 데이터베이스에 저장하고 기억하는 방법이지만 JWT는 데이터베이스가 따로 필요가 없이 인증이 가능하다.

하지만 단점으는 Token 자체에 데이터를 담고 있기 때문에 탈취당하면 보안이 취약한다.

 

 보안에 취약한 부분을 보안하기 위해 Access Token, Refresh Token을 사용하여 보안한다.

 

JWT 구조 

 

 Header, Payload, Signature 구조로 나누어져 있는데

Header은 타입과 서명에 어떤 알고리즘을 사용하는지 나타나 있고 

Payload는 토큰의 발급일자, 토근의 대상자, 만료 시간 등 여러 데이터가 담겨있다.

Sifnature은 Header + Payload + 서명을 Header에 명시된 알고리즘 방식으로 생성된다. 그래서 조금이나도 정보가 다르면 다른 서명값을 가져오게 된다.

 

 

Access Token 

 

만료 시간을 가지고 있는 토큰으로 유효시간이 만료된다면 Refrash Token을 확인하여 새로운 토큰을 발급받는다.

 

Refrash Token

 

 Access Token이 만료되면 다시 발생하기 위한 토큰으로 Access Token 보다 만료 시간이 길다. 

사용자의 기기의 저장해 두며 두 토큰 모두 만료된다면 다시 인증 과정이 필요하다.

Refrash Token의 탈취를 막기 위해 사용 blacklist 등을 사용하여 인증을 까다 곱게 한다.

 


JWT 설치하기 

 

 

pip install djangorestframework-simplejwt

 

이제부터는 공식문서 읽기!!

 

Simple JWT — Simple JWT 5.2.2.post30+gfaf92e8 documentation

Simple JWT provides a JSON Web Token authentication backend for the Django REST Framework. It aims to cover the most common use cases of JWTs by offering a conservative set of default features. It also aims to be easily extensible in case a desired feature

django-rest-framework-simplejwt.readthedocs.io

 


 

복잡함 Qurey 

 

 DB에서 가져온 데이터를 python을 이용해서 원하는 데이터도 추출이 가능하지만 db에서 조건을 만들어 가져온다면 더욱 깔끔하고 쉽게 이용이 가능할 것이다. 그거를 또 django ORM이 지원도 한다.

 

 

Q()

 여러 조건을 연결해서 사용이 가능하면 SQL의 WHERE 절처럼 사용이 가능하다.

 & : and 

| : or 

~: not 

사용이 가능하고 https://docs.djangoproject.com/en/4.2/ref/models/querysets/#gt 여기에 들어가면 여러 조건을 확인 가능하다.

 

F()

원하는 필드의 데이터를 가져오지 않고 데이터베이스에서 바로 실생이 가능하다.

 

annotate() 

추가적인 정보를 제공이 가능하다.  데이터 베이스의 두 개의 값을 곱해서 가져오거나 하는 것도 가능

https://docs.djangoproject.com/en/4.2/ref/models/querysets/#annotate   

 

 

aggregate()

 조회하는 전체 카레 셋의 결과를 집계가 가능하다. ( Avg, Sum, Count )와 같이 사용한다. 

 

 

Group by 

Product.objects.values('name').annotate( name =Count('name'))

이런 식으로 사용이 가능하다.

annotate 안에 이름을 설정을 안 해주면 자동적으로 name__Count 이런 식으로 출력이 된다.

 

이 방법 이외에도 직접 raw 카레를 작성해서 하는 방법도 있지만 대부분 ORM 선에서 해결된다고 하니 그런 방법이 있구나라고만 기억해 두자!!

 

 


마무리 

 

 심화강의 막바지 쯤인데 최적화와 Lazy roding 등 내용들이 많이 나온다. 아직은 어렵게 느껴지지만 이해해 보면 또 재미있고 이게 가능해 라면서 신기하기도 해서 재미있다. 

 내인을 심화과제 발제가 있는 날인데 과제를 잘 해결 할 수 있을까??라는 불안 감과 또 어떤 것을 구현하게 될까 라는 호기심 때문에 기대가 된다.