프로젝트에서 대량의 ListView를 구현해야 할 일이 생겼다. 과거에는 페이지네이션을 사용해 문제를 해결했다. 페이지네이션은 클라이언트가 한 번에 전체 데이터를 요청하는 대신, 필요한 만큼만 나눠서 가져오는 방식이다. 이를 통해 한 번에 처리해야 하는 데이터 양을 줄여서 성능을 개선할 수 있었다. 그러나 최근에 django-debug-toolbar를 알게 되면서 내가 작성한 코드가 성능 면에서 부족하다는 것을 깨달았다. 특히 API 호출과 SQL 쿼리 실행 과정에서 쿼리 수가 많아지는 문제를 발견했다. 이를 해결하기 위해 쿼리 수를 줄이는 방법에 대해 찾아보았다. Django ORM에서 쿼리 개수를 줄이면 성능을 크게 향상할 수 있다는 것을 알게 되었고, ORM 최적화 기법을 사용하면 데이터베이스에 대..
gisa-plus
프로젝트를 진행하면서, DB베이스에 저장된 데이터셋에서 조건을 통해 필터링한 객체들을 랜덤 하게 불러와야 할 상황이 생겼고, 이를 구현하기 위해 다양한 방법들을 찾아보았다. 프로젝트 규모나 현재 상황에 따라 효율적인 방법이 달라지는 문제들의 최고의 호율을 찾는것이 정말 어려운것 같다. order_by("?")order_by("?")는 Django ORM에서 가장 간단하게 객체를 무작위로 정렬하는 방법이다. SQL 쿼리에서 ORDER BY RAND() 또는 ORDER BY RANDOM()과 유사하게 작동하며, 무작위 객체를 정렬한 후 필요한 개수 만큼 가지고 온다.random_objects = MyModel.objects.order_by('?')[:10] 장점매우 직관적이고 간단하게 사용할 수 있다.모든..
권한 관리는 요청자가 특정 리소스에 접근할 권한이 있는지 확인하는 과정이다. DRF에서는 permission모듈을 통해 권한 체크를 쉽게 구현할 수 있다. 기본 권한 체크 순서Django의 권한 체크 순서는 인증, 권한체크, 쿼리셋 필터링으로 진행된다. 인증가장 먼저 인증 단계에서, 사용자가 누구인지 확인하는 과정을 거친다. 주로 사용자가 로그인이 되어 있는지 또는 API 토큰을 사용하고 있는지와 같은 내용을 확인하는 과정이다. 예를 들어, 사용자가 API요청을 보낼 때, 헤더나 쿠키를 통해 사용자의 신원을 확인하게 된다. 이 단계는 기본적으로 누가 요청했는지를 식별하는 과정이다. DRF의 인증 방식은 다양하게 있지만 대표적으로는 아래와 같이 이야기할 수 있다.1. SessionAuthenticatio..
장고 개발을 하면서 여러 객체에 대한 데이터 베이스 업데이트를 진행해야 할 일이 있었다. 기존에는 for문을 이용하여 처리하였는데 대량의 데이터 처리를 효율적으로 처리할 수 있는 기능인 Bulk 연산에 대해서 알게 되었다. Bulk Operations 이란?Bulk 연산은 여러 개의 데이터 베이스 레코드를 한 번에 삽입, 업데이트, 삭제하는 작업을 의미한다. 이 기능을 사용하면 각각의 레코드에 대해 별도의 쿼리를 실행하는 것보다 훨씬 효율적으로 데이터를 처리하고 쿼리 성능을 높일 수 있다.기존에 for문을 이용하여 처리할 경우 개별적인 쿼리가 실행되는 반면 bulk는 적은 수의 쿼리로 실행이 되어 데이터 베이스 성능을 향상할 수 있고, 코드를 간결하게 유지할 수 있다는 장점이 있었다. 반대로, 하나의 쿼..
Django_extensionsDjango의 유용한 패키지중 하나로, 장고의 기본 명령어들의 기능을 확장해주고 여러 부가 기능을 추가해주는 모듈로 장고 프로젝트의 필수 설치 모듈로 불린다. GitHub - django-extensions/django-extensions: This is a repository for collecting global custom management extensions for the DjThis is a repository for collecting global custom management extensions for the Django Framework. - GitHub - django-extensions/django-extensions: This is a reposit..