시스템 로그 페이지 조회 성능 최적화

2024. 4. 4. 12:12·프로그래밍

개발 과정에서 성능 최적화는 매우 중요한 과제 중 하나입니다. 특히, 대용량 데이터 처리 시, 데이터 조회 성능은 사용자 경험에 직접적인 영향을 미칩니다. 본 포스트에서는 시스템 로그 페이지 조회 성능을 개선한 사례를 공유하고자 합니다.

 

문제 상황

라이브 환경에서 시스템 로그 페이지 조회 시, 약 8.10초가 소요되는 문제가 발생했습니다. 조회 대상 데이터는 약 76,040건이었습니다.

 

문제 분석

ListView를 사용하는 클래스에서 전체 시스템 로그 데이터 갯수를 조회하는 과정에서 성능 저하가 발생했습니다. 특히, get_context_data 메서드에서 len(self.get_queryset())을 호출할 때 전체 테이블 데이터에 대한 조회 쿼리가 발생했습니다.

def get_context_data(self, **kwargs):
    ...
    context['objects_count'] = len(self.get_queryset())
    ...

데이터베이스 로그를 확인해보니, limit 없이 system_log 테이블에 대한 전체 데이터 조회 쿼리가 두 번 전송되었습니다. 이로 인해 성능 저하가 발생했습니다.

 

len(self.get_queryset()) 대신 context['paginator'].count를 사용하는 방식으로 변경하여, Paginator 클래스의 count 속성을 사용했습니다. 이 방식은 전체 데이터 수를 조회할 때 데이터베이스에 쿼리를 날리지 않고, Paginator가 이미 계산한 결과를 사용합니다.

 

또한, get_queryset() 메서드에서 queryset에 대한 반복 처리 시, 쿼리셋이 평가되어 전체 데이터 조회 쿼리가 발생했습니다.

def get_queryset(self):
    ...
    for query in queryset:
        query.convert_log_data()
    return queryset

 

이를 context의 object_list를 사용해 처리하도록 변경함으로써, ListView에서 지정한 paginated_by 값만큼만 처리되도록 개선했습니다. 이는 불필요한 전체 데이터 조회를 방지하고 성능을 향상시킵니다.

개선 결과

개선 전

  • 소요 시간: 약 1분

개선 후

  • 소요 시간: 0.7 밀리초

결론

이번 최적화 과정을 통해 데이터 조회 성능이 크게 향상되었습니다. Django의 Paginator 클래스와 쿼리셋의 평가 시점을 이해하고 적절히 활용함으로써, 대규모 데이터 처리 시 성능을 개선할 수 있음을 확인했습니다.

참고 자료

  • Django QuerySets
  • Django DB Optimization
  • Django QuerySets Evaluation
  • Django Paginator

 

 

'프로그래밍' 카테고리의 다른 글

6초에서 0.2초로: 레거시 API 성능 개선 이야기  (0) 2024.12.14
번역 API 개선기: 번역 가능 언어 추가 요청을 받으며 배운 점  (0) 2024.12.03
F-Lab 자바 백엔드 코스 멘토링 후기  (2) 2023.12.03
MSW?  (3) 2023.11.23
REST API란?  (0) 2023.09.06
'프로그래밍' 카테고리의 다른 글
  • 6초에서 0.2초로: 레거시 API 성능 개선 이야기
  • 번역 API 개선기: 번역 가능 언어 추가 요청을 받으며 배운 점
  • F-Lab 자바 백엔드 코스 멘토링 후기
  • MSW?
황심지
황심지
  • 황심지
    꾸준함이 진리다
    황심지
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • 프로그래밍 (12)
        • 운영체제 (0)
        • Spring (4)
        • Java (10)
        • SQL (0)
        • HTTP (2)
        • 회고 (2)
        • Network (0)
        • 프로젝트 (12)
        • Infra (2)
        • 데이터베이스 (3)
        • TIL (1)
        • 파이썬 (2)
      • 운동 (0)
        • 거인화 루틴 일지 (0)
        • 과부하 훈련 일지 (0)
        • 운동 관련 이모저모 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    패스트캠퍼스
    패스트캠퍼스후기
    세션
    대용량 트래픽
    직장인인강
    CAP Theorem
    CAP 이론
    그런 RESTAPI로 괜찮은가?
    에프랩 후기 자바 백엔드 부트캠프
    배포 방식
    레디스 세션
    한번에끝내는코딩테스트369Java편초격차패키지Online
    페이징 최적화
    Java
    에프랩 후기
    쿼리 성능
    webflux
    position argument
    django orm
    패캠챌린지
    에프랩 후기 자바 백엔드
    spring
    개인회고록
    python
    1년회고록
    2023년회고
    chatops
    직장인자기계발
    F-Lab 후기
    개인성장
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
황심지
시스템 로그 페이지 조회 성능 최적화
상단으로

티스토리툴바