본문 바로가기

Django

(PostgreSQL) work_mem 메모리 설정 postgresql의 work_mem이란? 이 값은 정렬 / 해시 / 조인 등의 동작에 사용될 수 있는 메모리 사용량을 의미한다. 이 메모리는 임시 디스크에 데이터를 쓰기 전에 사용된다. 기본값은 4MB으로 설정된다. 그런데 어떤 아티클에서는 일반적으로 64MB 정도가 적합한 수치라고 한다. 만약 PostgreSQL이 temporary file을 사용하고 있다면, work_mem을 늘리면 좋다. work_mem은 한 쿼리에서 사용되는 메모리 양을 의미하는게 아니다. 정렬 / 해시 / 조인 작업이 한 쿼리에서 동시에 일어날 수 있기 때문에, 각각의 동작에서 사용할 수 있는 메모리 수치를 의미한다. 만약 10GB짜리 데이터베이스를 쓴다고 가정해보자. 기본적으로 10MB씩 사용하는 커넥션이 100개가 있다고 ..
[Django]Django 테스트코드 라이브러리 unittest VS pytest Django를 시작하면서 파이썬 테스트코드 라이브러리를 찾아봤었다. 파이썬에서는 unittest와 pytest가 많이 사용되는 편이였다 Ruby On Rails의 Rspec 같은 BDD + Unit Test 라이브러리를 찾아봤는데, 마음에드는 라이브러리를 찾지 못했다. ( 예를 들면, mamba라는 라이브러리가 있었는데, 대중적이지 않아 보여서 믿음직하지 않았다 ) Unittest와 Pytest 간단 소개 이 둘은 테스트코드를 함수단위로 작성하는 Unit Test 툴이다. unnitest는 파이썬 표준 라이브러리에 포함된 라이브러리다. pytest는 2007년에 첫 커밋되었고, 계속 활발하게 커밋되고 있는 라이브러리다. 그리고 unitest로 작성된 테스트코드와 호환된다. But. pytest 전용으로 ..
(django) get_XXX_display 함수 : 모델의 속성 값을 사람이 읽을 수 있는 문장으로 변환하기 Django Model Field에 choices 속성이 걸려있는 경우, 코드에 맞는 display용 텍스트를 볼 수 있게 하는 함수가 있다.음.. 말로하면 어려운데, 아무튼 이런거다. from django.db import models class Book(models.Model): CONDITIONS = ( (1, '새책'), (2, '중고책'), ) name = models.CharField(max_length=60) condition = models.CharField(max_length=2, choices=CONDITIONS)이 경우, Book의 상태값은 1과 2로 저장된다. 그런데 책 정보를 웹페이지에 보여줄 때는 '새책', '중고책'처럼 사람이 읽을 수 있는 문장으로 보여주고 싶을 때는 get_..
(django) 자주 사용되는 queryset 모아서 관리하기 자주 사용되는 query set들을 한군데 모아서 관리하는 방법을 설명해보고자 합니다 :) 1. manager.py 를 만들어서, query set을 추가합니다 class LessonQuerySet(models.QuerySet): def jazz(self): return self.filter(subject='jazz') 2. model에 queryset을 manager으로 등록합니다 class Lesson(models.Model): from_time = models.CharField() to_time = models.CharField() subject = models.CharField() objects = LessonQuerySet.as_manager() 3. custom queryset은 다음과 같이 ..
[pytest] 함수의 매개변수로 기대한 값이 전달되었는지 확인하는 테스트코드 작성하기 pytest에서 테스트 코드를 작성할 때, 특정 함수의 매개변수로 기대한 값이 잘 넘어갔는지 확인하고 싶을 때가 있습니다. 예를 들면, 외부 API와 연동하는 함수를 테스트해보고 싶을 때, 이 함수에 특정 값이 매개변수로 잘 전달되었는지 확인하고 싶어지죠. 이럴 때는 mocker 클래스와 assert_called_with 함수를 사용하면 됩니다. 예시아래의 예시는 viewset에서 내부 함수를 호출했을 때, 기대한 매개변수를 잘 전달했는지 확인하는 테스트코드입니다.class TestCommerceViewSet: def test_purchase_구매_이벤트가_로그에_남는다(self, rf, mocker): purchase_event = {'product_id': 1, 'created_time': datet..