본문으로 건너뛰기
Python 기초집LESSON 21

디버깅, logging, 코드 점검

난이도입문
예상 시간30분
선수지식이전 강의

21강. 디버깅, logging, 코드 점검

1. 이번 강의에서 해결할 문제

중간값을 무작정 print하면 정상 출력과 진단 정보가 섞이고 배포 후 수준을 조절하기 어렵습니다. 오류 위치를 체계적으로 좁히고 구조화된 로그를 남깁니다.

2. 학습 목표

3. 핵심 개념

traceback의 마지막 줄은 예외 종류와 메시지, 위쪽 프레임은 호출 경로입니다. logging은 DEBUG, INFO, WARNING, ERROR, CRITICAL 수준을 제공합니다. 라이브러리 모듈은 전역 설정 대신 logger만 만들고 진입점이 출력 형식을 설정합니다.

4. 단계별 코드 예시

파일 경로: C:\dev\game-log-analyzer\battle_analyzer\analysis.py

battle_analyzer/analysis.py
import logging

from .models import BattleRecord

logger = logging.getLogger(__name__)


def average_damage(records: list[BattleRecord]) -> float:
logger.debug("평균 피해 계산: records=%d", len(records))
if not records:
logger.warning("빈 전투 기록의 평균을 요청했습니다.")
return 0.0
return sum(record.damage for record in records) / len(records)

파일 경로: C:\dev\game-log-analyzer\main.py

main.py
import logging

logging.basicConfig(
level=logging.INFO,
format="%(levelname)s %(name)s: %(message)s",
)
PowerShell · 점검과 실행
.\.venv\Scripts\python.exe -m compileall -q .\battle_analyzer .\main.py
.\.venv\Scripts\python.exe .\main.py

의심 지점에 breakpoint()를 잠시 넣고 실행한 뒤 p 변수, n, s, c, q로 조사할 수 있습니다. 확인 후 breakpoint는 제거합니다.

5. 코드가 동작하는 이유

logger 이름에 모듈 경로가 들어가 로그 출처를 구분합니다. % 자리표시자에 값을 별도 인자로 주면 해당 수준이 비활성일 때 불필요한 문자열 조합을 피합니다. compileall은 파일을 실행하지 않고 기본 문법 오류를 찾습니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

디버깅, logging, 코드 점검 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“디버깅, logging, 코드 점검”의 두 선택을 비교할 때 기준이 되는 설명은 무엇인가요?
  2. 문제 2‘민감한 원본 로그를 DEBUG에 출력’ 실수를 판단할 때 “디버깅, logging, 코드 점검” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

21강. 디버깅, logging, 코드 점검 미완료 상태