Django(15)
-
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에서 Many To Many 필드 다루기
Many To Many 관계란? Django에서 Many To Many 관계는 하나의 모델이 다른 여러 모델과 관계를 가질 수 있고, 이것의 역도 가능한 관계입니다. 위의 그림에서 사람과 고양이가 존재합니다. Mike는 Tigger와 Max의 주인입니다만, Max는 또 다른 주인으로 Eva를 섬기고 있습니다. 이렇게 모델들이 서로 다 대 다의 관계를 가지는 것이 바로 Many To Many 관계라고 할 수 있습니다. One To Many 관계라면 Max는 Mike나 Eva 둘 중 한명을 주인으로 정해야 할 것입니다. 위의 관계를 Django는 아래처럼 데이터베이스에 관계가 저장되는 테이블을 생성합니다. 자, 이제 코드를 살펴봅시다. Many To Many구조가 아래와 같이 잡혀있다고 가정합니다. # mo..
2019.03.27 -
Django Admin 기본 설정하기
Django Admin이란?Django는 Python으로 개발된 풀 스택 웹 프레임워크입니다. 수 많은 웹 프레임워크가 존재하지만 그 중 Django를 사용하는 이유 중 하나는 바로 관리자 페이지 즉, Admin 사이트가 함께 제공이 된다는 것입니다. 어떤 서비스를 운영할 때 관리자 페이지는 반드시 필요합니다. 따라서 실제 서비스의 서버단에는 아래와 같은 항목들이 필요한 것입니다. 데이터베이스 설계 및 구성모바일 클라이언트와 통신을 위한 REST API서비스 운영을 위한 관리자 페이지서비스 규모에 따라 다르지만 위의 모든 일을 소수의 서버 개발자로 처리하기는 어려움이 따릅니다.특히, 규모가 크지 않은 서비스 초기의 스타트업에서는 말할 것도 없지요. Django는 위의 세가지를 좀 더 쉽게 할 수 있도록 ..
2019.03.25 -
Django의 Simple Template Response와 Template Response에 대해서
Django는 강력한 웹 프레임워크입니다. 쉽게 사용할 수 있는 Python언어로 구현되어 있으며 10만개가 넘는 다양한 패키지들을 제공하기 때문에 뛰어난 생산성을 자랑합니다. Django에서는 웹 프론트엔드 구현을 더 빠르고 쉽게하기 위해서 다양한 템플릿들을 제공합니다. Django에서 기본적으로 제공하는 HttpResponse는 정적인 파일들(웹 페이지에 동적으로 데이터가 들어가지 않는 파일들)을 렌더링해서 응답으로 보내줍니다. HttpResponse는 객체가 생성됨과 동시에 이미 렌더링된 컨텐츠(HTML 파일) 받습니다. 해당 컨텐츠를 수정할 수 있지만 쉽게 수정할 수 있는 구조는 아닙니다. 이것은 마치 가게에서 이미 포장까지 완료된 상품을 바꿔달라고 하는 것과 같습니다. 만약 상품 포장을 하기 전..
2018.07.24 -
Django ORM 성능 튜닝
Django 뿐만 아니라 어떤 ORM을 사용하던지 성능 이슈는 발생할 수 밖에 없습니다. ORM은 데이터베이스의 테이블을 객체지향 프로그래밍에서 흔히 사용하는 객체(Class)처럼 사용할 수 있도록 해주는 기술입니다. 기존 쿼리문을 작성하여 데이터베이스를 조작하는 것을 넘어서서 더 효율적이고 가독성 및 유지 보수에 적합한 코드를 만들기 위해 나오게 되었습니다. 무엇보다도 데이터베이스 종류에 따라 백엔드 로직이 수시로 바뀌는 문제를 해결할 수 있습니다. 즉, MySQL을 사용하다가 검토에 의해 PostgreSQL로 바꾸게 된다고 하더라고 ORM에 정의되어 있는 Model들을 가지고 몇 분이 채 되지 않아 PostgreSQL에 테이블들을 생성할 수 있습니다. 물론, 비즈니스 로직은 거의 수정하지 않은 채 말..
2018.06.04