목록Programming (38)
몰입공간
#1. Generator 제너레이터(Generator)는 파이썬 iterator의 한 종류로, 말그대로 값을 '생성'하는 함수입니다. yield문을 통해 원하는 값이 있을때 마다 함수를 호출하고 값을 생성합니다. 즉, yield문이 있다면 그 함수는 제너레이터 함수입니다. List, Tuple, Dict 등등 기존의 iterable한 파이썬 내장 컬렉션은 안에 있는 모든 데이터를 알아야 호출이 가능하고 그 데이터를 한번에 메모리에 적재합니다. 다만 그 데이터의 내용/처리시간/계산 등이 너무 방대하여 메모리 부하면에서 효율적이지 못한 경우, 혹은 무한루프로 처리해야 하는 반복문같은 경우 제너레이터를 통해 필요할때마다 호출하여 사용하는게 좋습니다. #2. Generator 생성 다음과 같이 몇 종류의 동물을..
#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. Poetry Poetry는 기존의 패키지 관리자/의존성 관리자인 pip을 대체할만한 강력한 툴입니다. 기존의 pip이 가진 태생적인 한계, 즉 호환 부분이나 의존성관리, 가상환경등을 poetry 하나로 정리할 수 있습니다. Poetry가 어떤식으로 패키지와 dependency를 관리하는지는 공식문서를 참고하거나 여기에 정리가 잘 되어있으니 참고하면 좋습니다. 만약 파이참을 사용하는 경우 프로젝트를 생성하는 단계에서 애초에 프로젝트폴더로 쓸 디렉토리를 지정하고, 가상환경이나 파이썬 버전을 손쉽게 설정할 수 있습니다. (이 단계에서 poetry 역시 손쉽게 세팅이 가능합니다.) 그러나 VScode를 사용한다면, 제 경우는 anaconda로 가상환경을 설정하고 vscode에서 인터프리터를 직접 지정하여..
#1. Bool 자료형 대부분 아시는 것 처럼, Bool 자료형은 True/False 두가지의 값을 가지는 자료형입니다. 파이썬 대부분의 자료형들은 보통 요소의 여부에 따라 Bool 값을 가지고 있습니다. 예를 들어 비어있는 리스트, 튜플, 딕셔너리, "" 등은 False 값을 가지고, 요소가 하나라도 있다면 True를 반환합니다. 숫자형의 경우는 1(True) / 0(False) 로 나타내죠. 근데 파이썬에서는 True / False의 값을 1, 0 숫자로 치환하여 연산에 적용할 수 있습니다. 대단한 건 아니지만, 흔히 소개되는 내용은 아니라서 혹시라도 설계에 도움이 될 까 싶어 공유합니다. #2. 실습 숫자 n을 매개변수로 받는 함수 num을 정의합니다. def num(n): return 20 - (..
#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..
#1. 문제 예를 들어 유저의 모든 post를 feed에 출력한다면 DB에서 쿼리를 조회하고 templates에 Jinja2 언어를 사용하여 렌더링하는것이 일반적이다. 이 경우 post 데이터는 참조 가능한 모든 데이터의 id 혹은 객체를 가지고 있다. (user, profile image, comment 등) @app.route('/show') def post_list(): posts = list(db.posts.find({})) return render_template('show.html', posts = posts) 다만 여기서 문제가 되는 것이 GridFS로 저장한 파일(여기서는 프로필 이미지)은 템플릿에 렌더링하기 위해 다음과 같은 일련의 인코딩 과정이 필요하다. def return_img(us..