dj-rest-auth는 업데이트가 중단된 django-rest-auth를 잇는 프로젝트입니다. 기능으로는 DRF를 베이스로 인증과 관련된 기능들을 간단하게 제공해 주고, django-allauth와 함께 사용하여 소셜 로그인(OAuth) 로그인과 이메일 인증등의 기능도 탑재되어 있습니다. 또한 djangorestframework-simplejwt등과 함께 사용하여 JWT기능도 지원하고 있습니다. dj-rest-auth의 기능 REST API 인증/유저 기능 dj-rest-auth가 기본적으로 제공하는 기능은 DRF에 맞춰 REST API로 인증기능을 지원하는 것입니다. DRF는 기본적으로 따로 편리하게 제공되는 유저 인증기능은 따로 없어서 일일이 제작해야 했습니다. dj-rest-auth는 우선 기본적..
MVC 패턴 장고의 뷰는 MVC패턴의 컨트롤러에 대응하는 부분이다. 뷰(View) 뷰는 클래스로 만드는 class-based-view 나 함수로 만드는 방식이 존재한다. 이번 글에서는 기초적인 함수형 뷰에 대해 소개하겠다. 뷰는 기본적으로 첫 번째 인자에 HttpRequest형의 객체를 일반적으로 request라는 이름으로 전달받는다. 이때 뷰의 이름은 임의로 정할 수 있다(임의로 정한 이름을 URL에 맵핑하기만 해 주면 되기 때문에). # books/urls.py from django.urls import path from books import views urlpatterns = [ path("/", views.index), ] # books/views.py def index(request: Http..
이진 탐색 트리는 이진트리로서, 중위순회(In-order traversal) 시 정렬된 형태라는 특징을 가지고 있다. ADT lookup(key): key값을 가지는 노드를 리턴하고, 없다면(NULL일시) NULL의 부모를 리턴한다 put(key): key값을 가지는 노드에 삽입한다. delete(key): key값을 가지는 노드를 삭제한다. 구현 이진탐색트리 구현의 핵심은 계속 중위순회순으로 정렬된 상태를 유지하는 것이다. 탐색 루트에서 시작해서 노드의 값이 탐색값보다 크면 left child로 탐색, 작으면 right child로 탐색을 반복하면 된다. 삽입 삽입은 탐색을 한 후 값을 변경하거나 추가만 해주니 단순하다. 경우를 나누어 보자면, 탐색하여 노드를 발견했다면 그대로 값을 수정하면 되고, 값..
맵 & 딕셔너리(Map & Dictionary) 맵과 딕셔너리는 매우 유사한 자료구조다. 이에 맵에 대해서 먼저 설명하고, 맵과 딕셔너리의 차이점을 알아보겠다. 우선 맵은 키-값(key-value) 쌍으로 이루어진 집합이다. 키를 통해서 값을 추가, 탐색하고 이를 수정, 삭제할 수 있다. 이때 맵의 특징은 같은 키를 가지는 여러 값이 존재할 수 없다는 것이다. 그렇다면 딕셔너리는 무엇일까? 딕셔너리는 기본적으로 맵과 동일하지만, 중복된 키값이 존재할 수 있다는 특징이 있다. 다만 실제로 맵과 딕셔너리의 차이를 엄밀하게 다들 지키는 것은 아니고, 반대의 의미로 쓰이거나 하여 사실상 같은 의미를 가진다고 볼 수 있다. 예를 들어 파이썬의 딕셔너리는 기본적으로 키 중복을 허용하지 않지만 딕셔너리(dict)라는..
힙(Heap) 힙은 완전 이진 트리(Complete binary tree)의 형태를 가집니다. 즉, 완전 이진 트리의 성질에 따라 트리의 높이 h arr[idx]) { swap(parent, idx); upHeap(parent); } } void downHeap(int idx) { int left = 2 * idx; int right = 2 * idx + 1; int child; if (left > getSize()) return; else if (left == getSize()) child = left; else { if (arr[left]
우선순위 큐에 대해 소개하기 전에 ADT(Abstract Data Type)와 implementation(구현 방법)의 차이에 대해서 잠시 다시 짚어보겠습니다. ADT(자료구조) Implementation(구현 방법) List Array, Linked list Stack Array, Linked list Queue Array, Linked list Tree Linked structure Binary tree Array, Linked structure Priority queue Heap, Binary search tree, List 위와 같이 각 자료구조는 여러가지의 구현 방법이 있을 수 있습니다. 또한 다른 자료구조 자체도 다른 자료구조의 구현 방법이 될 수 있습니다. 이를 여기서 다시 짚어보는 이유는 ..
이진 트리(Binary tree) [이미지] 이진 트리는 특별한 트리로, 자식을 최대 2개 가질 수 있는 트리입니다. 이떄 두 자식을 left child, right child라고 합니다. 용어 n: 노드의 개수 m: internal node(자식이 있는 노드)의 개수 l: leaf node(자식이 없는 최하위 노드)의 개수 h: 트리의 높이 이진 트리의 특성 이진 트리의 성질은 수학적으로 몇가지 특정지을 수 있습니다. [이미지] 이진트리의 특성상 높이는 log2(n+1) - 1 오른쪽 자식 순으로 탐색을 하는 방식으로, 그 특성상 자식이 2개로 제한되는 이진 트리에서만 가능합니다. 오일러 투어(Euler tour traversal) dfs방식으로 탐색을 하며 마주치는 모든 노드(이미 방문하여 되돌아간 ..
장고에서는 MVC패턴의 컨트롤러(Controller)에 대응하는 뷰(View)가 존재하는데, 이 뷰를 URL 엔드포인트에 연결하는 것이 장고의 URL 부분이다. URL, urls.py 장고에서는 각 뷰에 대응하는 URL을 맵핑한다. 그리고 이 URL을 맵핑하는 파일을 URLConf라고 하는데, 보통 우리는 urls.py에 URLConf를 정의한다. urls.py는 최초 프로젝트 생성 시에 프로젝트 폴더에 하나(해당 가이드에서는 django_basic/urls.py) 생성된다. 그리고 보통 여기서 앱별로 urls.py를 추가적으로 생성하여 사용한다. 우선 django_basic/urls.py 파일을 확인해 보자. """ URL configuration for django_basic project. The ..