본문 바로가기
프로그래밍/Django

[Django][Python]Silk라이브러리를 활용한 Django 서버부하 프로파일링 설치

by 우주를놀라게하자 2022. 4. 6.
반응형
SMALL

Silk 설명

Django Silk는 라이브되고 있는 서버의 부하 지점을 알아낼 수 있는 프로파일링 툴이다.

Django를 활용하면서 Query문의 성능을 확인하여야 할 경우가 있다. Query문을 튜닝한다던가? 혹은 병목을 확인하기

위해서 활용될 경우인데 이 경우에 활용될 수 있는 툴이 2가지 방식이 있다

1. Django-debug-toolbar

2. Silk

그러나 Django-debug-toolbar(이하 DJDT라고함) 같은 경우는 로컬에서만 가능하기 때문에 실제 서비스중인 서버에선 활용하지 못한다는 단점이 있다.

그렇기 때문에 Silk를 활용하여, 라이브로 활용하여 처리 하였다.

아래는 설치방법을 정리해두었다.

기본적으로 큰 흐름은 아래와 같다.

 

내 프로젝트에 접목은 아래와 같이 진행하였다.

Django silk를 설치해준다.

pip install django-silk

다음은 미들웨어에 skil를 추가해준다.

'silk.middleware.SilkyMiddleware',

미들웨어에 추가한 후, installed_app에 silk를 추가해준다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
	
    """
    중략
    """
	#위와 같이 추가해준다.
    'silk',
]

마지막으로 내 프로젝트 최상단?에 URL을 추가해준다.

다른건 중요하지 않고, (다른 URL은 내 프로젝트이다..) 3번쨰 줄에 silk만 추가해주면 된다.

마지막으로 makemigraions, migrate 명령어로 DB에 알려준다.

이제 내가 원하는 View내부 쿼리의 성능을 시험해 볼 수 있다.

아래는 실제 내 프로젝트의 기능중 하나이므로 사람마다 구조는 다를 수 있다.

# Silk_profile 추가!!!
from silk.profiling.profiler import silk_profile


class HomeView(ListView):

    model = Cafe
    paginate_by = 12
    paginate_orphans = 5
    ordering = ['created']
 
    context_object_name = 'cafes'
    
	# 아래와 같이 내가 체크하고자 하는 함수에 데코레이터를 활용하여 Silk를 활용한다.
    @silk_profile()
    def get_context_data(self, **kwargs):
       
        cafe = Cafe.objects.all()

        if isinstance(cafe, QuerySet):
            print('Query Set 스타트')
            print(cafe.query)
        # print(City.continent.objects.all())
        context = super().get_context_data(**kwargs)
        context["cityList"] = City.objects.all()
        return context

이제 URL에 지정한 경로로 들어가면 위와 같은 페이지를 확인 할 수 있고, 

데코레이터를 붙인 Url에 대해서 응답이 오기까지 걸린 시간과 쿼리 총 갯수, 쿼리 시간을 다 확인할 수 있다.

이제 내가 확인해보고 싶은 url을 들어간 후 좌측 상단에 SQL을 클릭하면, 아래와 같은 목록을 확인 할 수 있다.

실제 내가 사용하는 쿼리문들의 상세를 확인할 수 있다 맨 왼쪽은 걸린시간이다.

저 중에서 내가 확인해보고자 하는 부분(내가 보고자하는 데이터베이스의 쿼리를 보면??) 설명하기가 좀 어려운거같다...

하튼 눌러보면 아래와 같은 목록들이 나온다.(원래 더 나오는데 필요없는 부분이라 중략했다.)

이렇게 내가 불러오는 쿼리문의 요청시간을 확인 할 수 있다.

해당 정보들의 원래 좌표는 아래와 같다

https://www.youtube.com/watch?v=HpMYWk566OA

반응형
LIST