일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- REACT
- Spring Security
- 에러
- react simple captcha
- 스프링 시큐리티 로그인
- Spring Boot
- maven
- SpringBoot
- Security 로그인
- 스프링
- react 상태
- react captcha
- 리액트 심플캡차
- 젠킨스
- spring error
- CI
- 깃
- react 자동입력방지
- 리액트 캡차
- react 캡차
- myBatis
- react 심플캡차
- git
- error
- 스프링 시큐리티
- Docker
- spring security 로그인
- jpa
- build
- ChatGPT
- Today
- Total
I can do it(Feat. DEV)
[Django Silk]로 성능 최적화 및 분석 시작하기! 본문
포스팅 계기
최근 Django DRF를 사용해 API를 개발하면서 요청-응답 속도가 매우 느리게 나오는 이슈를 경험함. 이를 해결하기 위해 여러 방법을 시도했는데, 그중에서도 모든 데이터를 쿼리해오는 것이 아니라 상황에 맞는 데이터만 최대한 가져오는 방식으로 쿼리셋을 최적화하는 등 여러 가지 개선을 해봤음. 하지만 이 과정에서 여전히 불편한 점이 많았음.
그 중 하나가 바로 기존에 사용하고 있던 Django Debug Toolbar 라이브러리였음. 이 툴은 swagger에서 요청-응답 속도를 확인할 수 없어서, 따로 서버에서 디버그 모드로 수동으로 확인하며 성능을 체크해야 했음. 이런 방식이 시간이 많이 걸리고 비효율적이라 느꼈고, 응답 속도뿐만 아니라 성능 최적화에 도움이 되는 다른 라이브러리가 필요하다고 생각함.
이런 고민을 해결할 수 있는 라이브러리로 Django Silk를 알게 되었고, 이번 포스팅에서는 Django Silk가 무엇인지, 어떻게 사용하는지 알아보겠음.😋(매우 간단한 건 안 비밀~🤫)
https://github.com/jazzband/django-silk
GitHub - jazzband/django-silk: Silky smooth profiling for Django
Silky smooth profiling for Django. Contribute to jazzband/django-silk development by creating an account on GitHub.
github.com
※ Django Silk란?
Django Silk는 Django 애플리케이션의 성능을 분석하고 최적화하는 데 도움을 주는 프로파일링 도구임. Silk는 요청-응답 주기의 성능을 실시간으로 모니터링하고, 데이터베이스 쿼리의 실행 시간과 빈도를 분석하여 애플리케이션의 성능 병목 지점을 식별할 수 있게 도와줌.
Django Silk 설치 및 설정 방법
1. Django Silk 설치
pip install django-silk
2. INSTALLED_APPS에 추가
settings.py 파일에서 INSTALLED_APPS에 'silk'를 추가함
INSTALLED_APPS = [
# 기존 앱들...
'silk',
]
3. MIDDLEWARE에 추가
MIDDLEWARE에 SilkyMiddleware를 추가함
MIDDLEWARE = [
# 기존 미들웨어들...
'silk.middleware.SilkyMiddleware',
]
주의: SilkyMiddleware는 일반적으로 세션 미들웨어와 인증 미들웨어 사이에 배치하는 것이 좋음.
4. urls.py에 Silk URL 패턴 추가
urls.py에 Silk의 URL 패턴을 추가하여 대시보드에 접근할 수 있도록 설정함:
from django.urls import path, include
urlpatterns = [
# 기존 URL 패턴들...
path('silk/', include('silk.urls', namespace='silk')),
]
5. 데이터베이스 마이그레이션 및 정적 파일 수집(DB에 반영)
python manage.py migrate
python manage.py collectstatic
Django Silk 사용법
프로파일링 활성화
settings.py에 다음 설정을 추가하여 프로파일링 기능을 활성화함
SILKY_PYTHON_PROFILER = True
해당 기능을 추가하지 않으면 모든 요청이 프로파일링됨
또한 운영 환경에서 성능 부하를 줄이기 위해, 예를 들어, 특정 요청에 대해서만 프로파일링을 적용할 수 있음. 이를 위해 SILKY_INTERCEPT_PERCENT를 사용해 몇 퍼센트의 요청에 대해서만 프로파일링을 할지 결정할 수 있음.
SILKY_INTERCEPT_PERCENT = 5 # 5%의 요청만 프로파일링
특정 뷰에 프로파일링 적용
프로파일링을 원하는 뷰에 @silk_profile 데코레이터를 추가하여 성능 데이터를 수집함
from silk.profiling.profiler import silk_profile
@silk_profile(name='View Blog Post')
def post(request, post_id):
p = Post.objects.get(pk=post_id)
return render(request, 'post.html', {'post': p})
이렇게 설정하면 해당 뷰에 대한 성능 데이터가 Silk 대시보드에 표시됨.
실무 경험을 바탕으로 한 장단점
장점:
- 상세한 성능 분석: Silk를 통해 각 요청에 대한 처리 시간, 데이터베이스 쿼리 실행 시간, 쿼리 빈도 등을 상세하게 분석할 수 있었음. 이를 통해 성능 병목이 발생하는 지점을 명확히 파악하고 최적화할 수 있었음.
- 실시간 모니터링: Silk는 실시간으로 성능 데이터를 시각화해 주므로, 즉각적인 피드백을 제공하고 필요한 부분을 신속하게 최적화할 수 있었음.
단점:
- 운영 환경에서의 데이터베이스 부하: Silk는 모든 요청과 응답 데이터를 데이터베이스에 저장함. 이로 인해 운영 환경에서 사용할 때 데이터베이스 부하가 증가할 수 있음. 이를 해결하려면, 프로파일링을 일부 트래픽에 대해서만 적용하도록 설정하는 것이 좋음.
- 보안 및 개인정보 보호: Silk는 요청 및 응답 본문을 기록하는데, 이로 인해 민감한 정보가 노출될 수 있음. 이를 방지하기 위해 Silk의 설정을 통해 민감한 데이터를 마스킹하거나 제외하는 보안 조치가 필요함.
결론
Django Silk는 애플리케이션의 성능 분석과 최적화에 유용한 도구로, 개발 및 운영 환경에서 성능 모니터링을 쉽게 할 수 있게 도와줌. 다만 운영 환경에서의 데이터베이스 부하와 보안 문제를 고려하여 신중하게 사용해야 하며, 필요한 설정을 조정하여 최적의 성능을 유지하는 것이 중요할 듯.
Django Silk를 활용하여 애플리케이션의 성능을 정확하게 분석하고 최적화할 수 있었던 경험을 바탕으로, 앞으로의 프로젝트에도 큰 도움이 되지 않을까.. 생각함!! 그럼 다음에 또 찾아오겠음!🙂
'개발자 모드 > 응용' 카테고리의 다른 글
[Log] 개발자 감성 저격🎯 터미널 로그에 색 입히는 법(feat. Python) (0) | 2025.04.01 |
---|---|
[CI/CD] Docker로 Jenkins Server 설치 및 실행(Feat. 우분투)[4편] (1) | 2024.09.13 |
[CI/CD] Docker로 Jenkins Server 설치 및 실행(Feat. 우분투)[3편] (2) | 2024.09.12 |
[CI/CD] Docker로 Jenkins Server 설치 및 실행(Feat. 우분투)[2편] (0) | 2024.09.12 |
[CI/CD] Docker로 Jenkins Server 설치 및 실행(Feat. 우분투)[1편] (2) | 2024.09.11 |