목록Programming/Django (19)
몰입공간

#1. Decorator 파이썬의 Decorator는 일종의 sugar syntax입니다. 자주 쓰거나 중복되는 코드를 함수로 설정하여 적용하듯이 데코레이터 역시 비슷한 기능을 하면서 코드를 간결하게 작성하거나 확장하는데 유용한 기능입니다. 처음 장고를 사용하면서 가장 많이 사용하는 데코레이터가 아마 @login_required 일겁니다. 다만, 기존의 장고의 login 기능은 세션을 이용하기 때문에 이전에 JWT로 구현한 토큰 인증 방식을 적용한 새로운 데코레이터를 생성하였습니다. 파이썬의 데코레이터는 함수와 클래스 두가지로 구현이 가능하며 여기서는 클래스로 구현하였습니다. #2. LoginConfirm Decorator 구현 먼저 유저 기능을 관리하는 app에 따로 파이썬 파일을 새로 만들어 관리합니..

#1. 세션과 쿠키 그리고 토큰 토큰 인증 방식에 대해 서술한 대부분의 포스팅을 보면 세션과 쿠키 (+토큰)의 개념에 대한 설명을 거의 필수적으로 수반합니다. 매우 중요한 개념이긴 하지만 여기서는 JWT를 이용해 사용자 인증 방식을 바꾼 방법과 경험에 대해 서술하기 때문에 따로 지면을 할애하지는 않겠습니다. 사실 개념을 멋지게 설명해놓은 포스팅이 너무 많습니다. 제가 공부한 내용은 (세션과 토큰), (쿠키와 세션 개념)을 참조하였습니다. 토큰 인증이 대세라고는 하지만 분명 세션과 토큰 인증 방식은 각각의 장단점이 있을뿐 무엇이 더 우월한 방식이다라는 것은 따로 없는 것으로 알고 있습니다. #2. JWT JWT(JSON Web Token)는 인증에 필요한 정보를 암호화하고 JSON 형식으로 인코딩하여 발행..

#1. Service layer Service layer는 기존의 View에 종속되어 처리한 비즈니스 로직을 Service라는 위치로 분리한 형태를 의미합니다. 만약, 모든 비즈니스 로직을 View에서 처리하게 되면 진보하는 서비스에 비례하여 view 함수가 방대해지고, 이러한 이유로 가독성/비즈니스에 대한 직관적인 이해/유지보수 및 관리면에서 상당한 수고를 요구하게 됩니다. 하지만 Service에 비즈니스 로직을 최소 단위로 구현함으로써, 위에 나열한 문제들을 어느정도 해결할 수 있습니다. #2. Service layer 구현 다음과 같이 단건조회와 전체조회를 담당하는 기능을 service에서 구현하였습니다. (보통 모델별로 파이썬 파일을 구성하거나 하나의 파이썬 파일에서 클래스로 서비스 레이어를 구성..

#1. Chart.js 넷플릭스 클론 프로젝트 중에 리뷰를 작성한 유저들의 연령과 성별 통계 정보를 이용하여 차트를 구현한 부분이 있어 공유하고자 합니다. Chart.js는 통계 정보를 차트 형식으로 표현시켜주는 자바스크립트 라이브러리 입니다. 장고 백엔드에서 템플릿에 렌더링하는 과정에서 통계 정보를 context로 넘겨주기만 하면 끝나는 아주 심플한 라이브러리 입니다. 데이터를 시각화해주는 라이브러리 답게 공식문서 또한 심플하고 이쁘게 꾸며져 있습니다. 내용이 다소 쉬운편이니 공식문서를 참고하는데 그리 어렵지 않습니다. Chart.js | Open source HTML5 Charts for your website New in 2.0 New chart axis types Plot complex, spar..

#1. TDD 좀 더 심화된 장고의 REST api를 공부하다보니, 개발 실무에 많이 쓰인다는 TDD(Test Driven Development)도 살짝 경험해봤습니다. TDD(Test Driven Development), 즉 테스트 주도 개발을 의미합니다. TDD는 보통 대규모 프로젝트나 서비스를 제공하는 비즈니스 실무에서 필수로 가져가야할 개발 방식입니다. 만약 대규모 프로젝트를 구현하는 와중에 오류가 발생한다면 방대한 양의 코드와 모듈, 함수간의 호환성 등을 모두 염두해 두고 고통의 디버깅을 해야합니다. 오류가 발생할 때마다 많은 시간과 수고를 필수적으로 수반해야하죠. (물론 서비스 단위로 앱을 구성하다보니 디버깅 할 때 모든 부분을 봐야하는 것은 아니지만, 그래도 치명적임에는 틀림없습니다.) TD..

#1. include tag 장고에 템플릿을 연결시키는 방법은 extends 태그말고도 include 태그가 있습니다. extends는 보통 base 템플릿에 하위 템플릿을 연결시키기 위해 사용하는 반면에, include는 한 템플릿에 다른 템플릿을 포함시키는 것을 의미합니다. 여기서 중요한 점은 포함시키려는 템플릿 또한 상위 템플릿의 context로 렌더링할 수 있다는 것입니다. 이는 파일 단위로 작업이 가능하기 때문에 협업을 하는 경우 효율적인 작업이 가능합니다. 사용법은 다음과 같습니다. {% include "포함시킬템플릿.html" %} #2. 예제 이전에 실습해본 Tweet 어플리케이션에 한번 적용해보죠. {% for tweet in tweets %} '''생략''' {% include 'twe..

#1. related_name 구현하려는 웹 어플리케이션이 다양한 서비스를 제공한다면, 이에 따른 데이터 관계도 분명 복잡해집니다. 이러한 참조관계에 이름을 부여하여 직관적인 이해를 돕는 장고 모델의 related_name 속성이 있습니다. related_name은 한 모델에 같은 모델을 2개 이상 참조하는 등의 상황에 따라 필수적으로 부여해야 할 때도 있습니다. (사실, related_name을 설정하지 않을 때 더욱 직관적인 경우도 있습니다..) 여기서는 1:N 관계의 대표격인 게시글-댓글 관계를 통해 참조와 related_name 속성을 알아보려고 합니다. Post모델을 미리 설정했다는 가정하에 Comment모델을 생성합니다. post 속성을 ForeignKey로 설정하고 related_name 속..

#1. 카테고리 트리 대부분의 웹사이트는 카테고리와 세부카테고리의 트리를 구성하여 포스팅하거나 필터링합니다. 쇼핑몰을 구현한다면 아이템마다 세부적인 항목들을 정해야 하기 때문에 거의 필수적으로 구현하여야 합니다. 특히, 다음과 같이 카테고리 항목들을 breadcrumb 형식으로 구현해야할 때도 있는데 찾아보면 좋은 튜토리얼들이 몇 개 있습니다. 장고의 카테고리 트리를 구성하는 패키지로 MPTT 가 있습니다. 현재는 사용하지 않는다고 알고 있습니다만, 정확한 정보인지는 모르겠습니다. (예전에 한번 구현해보려다가 실패한 경험은 있습니다.) 메인 카테고리와 서브 카테고리 모델을 생성하고 단순히 관계 설정을 통해 카테고리 트리를 구현한 적이 있는데, 카테고리 항목이 많지 않으면 나름 쓸만한 기능이 될 수도 있다..

#1. Django All-auth Django allauth는 장고 프레임워크로 구성된 웹 어플리케이션에서 유저 가입, 로그인 , 인증, 소셜로그인 등 account 영역의 전반적인 기능을 도와주는 패키지입니다. 여기서는 allauth 백엔드를 기반으로 유저 로그인을 ID가 아닌 e-mail로 처리하도록 하겠습니다. allauth 설치 명령어는 다음과 같습니다. $ pip install django-allauth #2. CustomUser 모델 구축하기 우선 계정관련 기능들을 처리할 accounts 앱을 따로 생성하고 settings 등록합니다. $ django-admin startapp accounts # settings.py INSTALLED_APPS = [ ''' 생략 ''' # local 'ac..