파이썬(17)
-
Django ORM에서 Subquery 사용하기
사용자의 다양한 요청에 대한 응답을 하기 위해서는 DB Level에서 다양한 연산이 필요합니다. Django ORM을 사용하게되면 직접 Query를 작성할 수도 있지만 이보다는 ORM에서 제공하는 메서드들을 활용하는 것이 더 나을 수 있습니다. 왜냐하면 Raw Query로는 Django REST Framework에서 제공하는 다양한 기능(e.g Filtering, Ordering)을 사용하는데 제한이 있을 수 있기 때문입니다. 아래의 예시를 통해 Sub Query를 사용하는 방법을 알아보도록 합니다. # models.py class Video(models.Model): id = models.AutoField(primary_key=True) title = models.TextField(max_length=..
2019.04.16 -
Python에서 Datetime과 Timezone 다루기
Datetime은 python에서 날짜와 시간을 표현하는 아주 유용한 패키지입니다. 대다수의 데이터베이스의 시간은 기본적으로 UTC 시간을 기준으로 설정이 되어 있습니다. 국내에서만 서비스를 한다고 하면 데이터베이스의 시간을 한국표준시간(KST)로 설정할 수도 있습니다. 하지만 글로벌 서비스의 경우에는 해당 유저에 따라 적절한 시간대를 보여주어야 할 경우도 생기게 됩니다. 이럴때에는 데이터베이스에 UTC시간으로 저장을 해놓고 데이터를 가공할 때 Timezone을 원하는 지역의 Timezone으로 변경하면 됩니다. 이제 그 방법을 알아보도록 합니다. Timezone 변경하기from datetime import datetime from pytz import timezone # 현재 시간을 UTC로 표시한다 ..
2019.04.10 -
Django의 Simple Template Response와 Template Response에 대해서
Django는 강력한 웹 프레임워크입니다. 쉽게 사용할 수 있는 Python언어로 구현되어 있으며 10만개가 넘는 다양한 패키지들을 제공하기 때문에 뛰어난 생산성을 자랑합니다. Django에서는 웹 프론트엔드 구현을 더 빠르고 쉽게하기 위해서 다양한 템플릿들을 제공합니다. Django에서 기본적으로 제공하는 HttpResponse는 정적인 파일들(웹 페이지에 동적으로 데이터가 들어가지 않는 파일들)을 렌더링해서 응답으로 보내줍니다. HttpResponse는 객체가 생성됨과 동시에 이미 렌더링된 컨텐츠(HTML 파일) 받습니다. 해당 컨텐츠를 수정할 수 있지만 쉽게 수정할 수 있는 구조는 아닙니다. 이것은 마치 가게에서 이미 포장까지 완료된 상품을 바꿔달라고 하는 것과 같습니다. 만약 상품 포장을 하기 전..
2018.07.24 -
CGI와 WSGI을 파헤치다
CGI란 무엇인가? CGI(Common Gateway Interface)는 웹서버에서 정적인 컨텐츠가 아닌 동적인 컨텐츠를 사용자에게 제공하기 위한 인터페이스입니다. 보통 웹서버의 역할은 사용자의 요청에 알맞은 페이지 혹은 데이터를 내보내는 것으로 알려져 있습니다. 하지만 그 내용이 계산이 필요하다거나, 데이터베이스에서 가져와야 해서 매번 결과가 다르다면 웹서버 혼자서는 이에 대체할 수 없습니다. 결국 웹서버가 사용자가 만든 프로그램과 통신하여 처리가 완료된 결과값을 받은 뒤 클라이언트에게 응답을 보낼 수 있는 인터페이스가 필요한 것입니다. CGI는 이 문제를 해결하기 위해 고안되었습니다. CGI는 인터페이스이며 특정 플랫폼에 의존하지 않고, 웹 서버로부터 외부 프로그램을 호출하는 방식을 정의해 놓은 것..
2018.06.06 -
Pycharm pip 10.0.1 버전 AttributeError: module 'pip' has no attribute 'main'에러 해결하기
pip 10.0.1에서 특정 메서드를 지원하지 않게되면서 패키지 설치 시 에러가 발생하게 되었습니다. 내용을 확인해 보면 더이상 pip에서 main이라는 속성을 지원하지 않는다는 내용입니다. pip를 이용하여 개발에 필요한 패키지들을 설치하기 때문에 이 상태로는 프로젝트 진행이 어렵습니다. 따라서 이 경우 10.0.1 버전을 9.0.3 버전대로 다운그레이드 해주어야 하는데 Pycharm에서는 잘 되지 않습니다. 이를 수동으로 해주어야 합니다. 먼저 프로젝트 디렉토리로 이동합니다. 가상환경(venv) → Scripts로 이동하면 해당 프로젝트의 가상환경에서 사용하는 Python파일이 있습니다. 여기에서 PowerShell을 열어줍니다. .\python.exe -m pip install --upgrade p..
2018.06.05 -
Django ORM 성능 튜닝
Django 뿐만 아니라 어떤 ORM을 사용하던지 성능 이슈는 발생할 수 밖에 없습니다. ORM은 데이터베이스의 테이블을 객체지향 프로그래밍에서 흔히 사용하는 객체(Class)처럼 사용할 수 있도록 해주는 기술입니다. 기존 쿼리문을 작성하여 데이터베이스를 조작하는 것을 넘어서서 더 효율적이고 가독성 및 유지 보수에 적합한 코드를 만들기 위해 나오게 되었습니다. 무엇보다도 데이터베이스 종류에 따라 백엔드 로직이 수시로 바뀌는 문제를 해결할 수 있습니다. 즉, MySQL을 사용하다가 검토에 의해 PostgreSQL로 바꾸게 된다고 하더라고 ORM에 정의되어 있는 Model들을 가지고 몇 분이 채 되지 않아 PostgreSQL에 테이블들을 생성할 수 있습니다. 물론, 비즈니스 로직은 거의 수정하지 않은 채 말..
2018.06.04