우선순위 큐에 대해 소개하기 전에 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 ..
이전 글에서는 장고의 기본 구조와 프로젝트, 앱 생성에 대해 알아보았다. 장고 웹 프레임워크는 MVC 패턴을 따르고 있는데, 이에 대해 우선 잠시 살펴보겠다. MVC패턴 그리고 장고의 MTV MVC(Model-View-Controller) 패턴은 애플리케이션을 3가지로 구분한 디자인 패턴이다. 여기서 Model은 데이터를 관리하고, View는 레이아웃과 화면을, Controller는 모델과 뷰를 잇는 역할을 한다. 장고는 MVC패턴의 각각을 MTV(Model-Template-View)라는 이름으로 구현했다. 즉 Model은 Model 그대로, MVC패턴에서 View의 기능은 장고의 Template에 대응하고. 그리고 MVC의 Controller는 장고의 View에 대응한다. MVC 패턴 장고의 MTV M..
해당 글에서는 장고의 Applications, apps.py 파일에 관해 다룬다. 장고에서 앱이란 재사용 가능한 단위의 모듈을 의미한다. 앱은 모델, 뷰, 템플릿, 정적파일, URLs, 미들웨어등 다양한 것으로 이루어져 있다. 이를 프로젝트 설정의 INSTALLED_APPS에 넣어 앱을 프로젝트에 포함시킨다. 사실 apps.py는 기본적으로 크게 다루는 일이 적다. 그래서 이후에 소개할일이 없을 듯 하여, Django Basic 1장에서 간단히 소개해보려 한다. INSTALLED_APPS settings.py의 INSTALLED_APPS를 보면 기본적으로 다음과 같은 앱들이 포함되어 있다. INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth'..
파이썬의 패키지 관리는 까다롭기로 악명 높다. Node의 경우에는 당장 npm만 사용하더라도 정말 쾌적한 경험을 선사하지만, 파이썬의 경우에는 온갖 뒤죽박죽인 데다, 파이썬 버전마다 호환성도 제각각이고, 가상환경을 제공하는 앱도 정말 많아 어느 것을 사용해야 할지 결정하기 어렵다. 파이썬 가상 환경, 패키지 매니저 정리(venv, poetry, pipvenv...) 개인적으로 추천하는 방식은 아예 개발환경부터 Docker을 사용해서 가상환경을 만들거나, 간단하게 venv를 사용하거나, Poetry를 사용하는 것이다. 최근에 사용하는 방식은 Poetry를 개발환경에서 쓰되, 배포 시에는 requirements.txt를 추출해서 배포하는 방식인데, 이번 Django Basic 시리즈에서 사용할 프로젝트도 다..
트리 트리는 계층 구조를 가진 모델입니다. 트리는 노드로 이루어져 있으며 이들 노드 간에는 부모-자식 관계가 존재합니다. 트리가 트리라고 불리는 이유는 마치 나무의 가지가 뻗어나가는것과 같은 형태를 보이기 때문입니다. 다만 나무가 위로 뻗어나는것과 달리 트리는 위의 부모노드에서 아래의 자식노드로 뻗어나가는 특징을 가지고 있습니다. 그렇기에 각 트리의 노드는 하나의 부모만을 가지지만, 자식으로는 여러 노드를 가질 수 있습니다. 용어 루트 노드(Root): 부모가 없는 노드로 트리에 하나만 존재한다. 예시에서는 1. Internal node: 적어도 하나의 자식을 가지는 노드. 예시에서는 1, 2, 3, 5. External node: 자식을 가지지 않는 노드. 예시에서는 4, 6, 7. Ancestors ..