<aside>
</aside>
안녕하세요, 고성능을 추구하는 개발자 여러분! 로깅은 애플리케이션의 상태를 파악하는 데 필수적이지만, 모든 작업에는 비용이 따릅니다. 로그를 기록하는 아주 짧은 순간도, 초당 수천 개의 요청을 처리하는 고성능 애플리케이션에서는 무시할 수 없는 성능 저하의 원인이 될 수 있죠. 🏎️
이번 챕터에서는 우리의 로깅 시스템이 애플리케이션의 발목을 잡지 않도록, 성능을 최적화하는 두 가지 고급 기술을 배워봅니다. 로그 기록을 비동기적으로 처리하여 메인 로직의 대기 시간을 없애는 방법과, 출력되지도 않을 로그를 위해 비싼 연산을 미리 수행하는 낭비를 막는 '지연 평가' 기법을 마스터하여 로깅 성능을 극한까지 끌어올려 봅시다!
이번 챕터를 마치면 여러분은 다음을 할 수 있게 될 거예요!
enqueue=True가 다중 프로세스 안전성 외에 갖는 성능적 이점을 이해하고 설명할 수 있습니다.logger.opt(lazy=True)를 사용하여 불필요한 함수의 실행을 막아 성능을 최적화할 수 있습니다.enqueue 사용 시의 장단점(trade-off)을 이해합니다.loguru-mastery 폴더에 performance_opt.py 파일을 새로 추가하여, lazy=True 옵션의 효과를 눈으로 직접 확인하는 실습을 진행합니다.
프로젝트 구조
loguru-mastery/
├── venv/
├── ... (이전 강의 파일들)
└── performance_opt.py <- 새로 추가된 파일!
performance_opt.py 전체 코드
# performance_opt.py
import sys
import time
from loguru import logger
# --- Part 1: enqueue=True의 성능적 이점 (개념 설명) ---
# enqueue=True는 로그 기록(특히 파일 쓰기)을 별도의 스레드에서 처리하여
# 메인 애플리케이션의 흐름을 막지(block) 않습니다.
# logger.add("some_file.log", enqueue=True) # Non-blocking
# logger.add("another_file.log", enqueue=False) # Blocking
# --- Part 2: 지연 평가 (Lazy Evaluation) 실습 ---
logger.remove()
# 로그 레벨을 "INFO"로 설정하여, "DEBUG" 레벨 로그는 출력되지 않도록 합니다.
logger.add(sys.stderr, level="INFO")
def get_expensive_system_stats():
"""1초의 시간이 걸리는 매우 비싼 연산을 시뮬레이션하는 함수"""
print("(💥 1초가 걸리는 무거운 함수가 실제로 호출되었습니다!)")
time.sleep(1)
return {"cpu_usage": "78%", "memory": "6.8GB"}
print("--- 지연 평가(lazy=True) 테스트 ---")
# 1. lazy=False (기본값): 로그 레벨이 DEBUG라 출력되진 않지만, 함수는 실행되어 1초를 낭비합니다.
print("\\n[1] lazy=False 테스트 (DEBUG 레벨 로그):")
logger.debug(f"시스템 현재 상태: {get_expensive_system_stats()}")
print("-> 로그는 출력되지 않았지만, 함수 호출로 인해 1초가 소요되었습니다.")
# 2. lazy=True: 로그 레벨이 DEBUG라 출력되지도 않고, 함수 자체를 실행하지 않아 1초를 절약합니다.
print("\\n[2] lazy=True 테스트 (DEBUG 레벨 로그):")
# .opt(lazy=True)를 붙이고, 포매팅 인자를 함수(또는 람다) 형태로 전달해야 합니다.
logger.opt(lazy=True).debug(
"시스템 현재 상태: {}", get_expensive_system_stats
)
print("-> 로그가 출력되지 않을 것을 미리 알고, 함수를 아예 호출하지 않았습니다!")
print("\\n테스트가 완료되었습니다.")
enqueue=True의 성능적 이점: 논블로킹 로깅15강에서 enqueue=True가 다중 프로세스 환경에서 로그를 안전하게 지켜준다고 배웠죠? 사실 이 옵션에는 성능 향상이라는 또 다른 엄청난 이점이 숨어있습니다.