Python 코드 디버깅 기법
소프트웨어 개발에서 디버깅은 필수적인 과정입니다. 코드가 예상대로 동작하지 않을 때 문제를 찾아내고 수정하는 과정을 디버깅이라고 합니다. Python에서는 디버깅을 효과적으로 수행할 수 있는 다양한 도구와 기법을 제공합니다. 이 포스팅에서는 Python 디버깅 도구인 pdb
와 logging
을 활용하는 방법을 예제와 함께 살펴보겠습니다.
1. pdb(Python Debugger)
pdb
는 Python 표준 라이브러리에서 제공하는 디버깅 도구로, 코드 실행 중간에 멈춰서 변수 상태를 확인하거나 코드를 한 줄씩 실행하면서 동작을 추적할 수 있습니다.
1.1 기본 사용법
pdb
를 사용하려면 코드에서 중단점을 설정해야 합니다. Python 3.7 이상에서는 breakpoint()
함수를 사용하여 간단히 중단점을 설정할 수 있습니다.
# 예제 1: pdb 기본 사용
def buggy_function(a, b):
result = a + b
breakpoint() # 중단점 설정
result *= 2
return result
if __name__ == "__main__":
print(buggy_function(2, 3))
위 코드를 실행하면 breakpoint()
에서 실행이 멈춥니다. 명령어를 입력하여 디버깅을 진행할 수 있습니다.
1.2 주요 명령어
pdb에서 사용할 수 있는 주요 명령어는 다음과 같습니다:
n
(next): 현재 줄을 실행하고 다음 줄로 이동합니다.s
(step): 함수 내부로 들어가 디버깅을 계속합니다.c
(continue): 다음 중단점까지 실행을 계속합니다.l
(list): 현재 코드의 주변 줄을 보여줍니다.p
(print): 변수를 출력합니다.q
(quit): 디버깅을 종료합니다.
1.3 실제 예제
다음은 리스트의 요소를 합산하는 함수에서 발생한 오류를 pdb
로 디버깅하는 예제입니다.
# 예제 2: 리스트 합산 오류 디버깅
def sum_list(lst):
total = 0
for item in lst:
breakpoint()
total += item
return total
if __name__ == "__main__":
numbers = [1, 2, '3', 4] # 오류를 발생시키는 데이터
print(sum_list(numbers))
breakpoint()
에서 멈춘 후 p item
을 입력하면 현재 item
값을 확인할 수 있습니다. 이 예제에서는 문자열 '3'
이 오류를 발생시킴을 알 수 있습니다.
2. logging 모듈
logging
모듈은 프로그램 실행 중에 발생하는 이벤트를 기록할 수 있는 강력한 도구입니다. 디버깅뿐만 아니라 프로그램의 동작을 모니터링하는 데에도 유용합니다.
2.1 기본 설정
logging
을 사용하려면 로그 레벨과 출력 형식을 설정해야 합니다. 다음은 간단한 설정 예제입니다:
import logging
# 로깅 기본 설정
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.debug("디버깅 메시지입니다.")
logging.info("정보 메시지입니다.")
logging.warning("경고 메시지입니다.")
logging.error("에러 메시지입니다.")
logging.critical("치명적인 에러 메시지입니다.")
2.2 로그 레벨
로그 레벨은 중요도에 따라 메시지를 구분합니다. 기본 로그 레벨은 다음과 같습니다:
DEBUG
: 상세한 정보INFO
: 일반적인 정보WARNING
: 경고 메시지ERROR
: 오류 메시지CRITICAL
: 심각한 오류
2.3 파일에 로그 저장
로그를 파일에 저장하면 프로그램 실행 후에도 기록을 확인할 수 있습니다.
import logging
logging.basicConfig(filename='app.log', level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info("이 메시지는 파일에 저장됩니다.")
2.4 실제 예제
다음은 파일 처리 중 발생하는 오류를 기록하는 예제입니다:
# 예제 3: 파일 처리 로그 기록
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
def process_file(file_name):
logging.info(f"파일 처리 시작: {file_name}")
try:
with open(file_name, 'r') as file:
data = file.read()
logging.debug(f"파일 내용: {data}")
except FileNotFoundError:
logging.error(f"파일을 찾을 수 없습니다: {file_name}")
except Exception as e:
logging.critical(f"예상치 못한 오류 발생: {e}")
if __name__ == "__main__":
process_file("example.txt")
3. pdb와 logging을 결합한 디버깅
pdb
와 logging
을 함께 사용하면 디버깅 과정을 더욱 효과적으로 수행할 수 있습니다. logging
으로 기록한 정보를 참고하면서 pdb
로 코드 흐름을 분석할 수 있습니다.
3.1 결합 예제
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
def calculate(a, b):
logging.info("계산 시작")
result = a + b
logging.debug(f"중간 결과: {result}")
breakpoint()
result *= 2
logging.debug(f"최종 결과: {result}")
return result
if __name__ == "__main__":
logging.info("프로그램 시작")
print(calculate(5, 7))
위 코드는 logging
을 통해 로그를 남기면서, 중간중간 pdb
로 멈춰서 변수 상태를 확인할 수 있습니다.
4. 정리
Python의 디버깅 도구인 pdb
와 logging
은 각각 강력한 기능을 제공하며, 함께 사용하면 더욱 효과적입니다. pdb
로 코드를 단계적으로 분석하고, logging
으로 실행 기록을 남기면서 문제를 체계적으로 파악하세요.
이 포스팅이 Python 디버깅 기술을 향상시키는 데 도움이 되었기를 바랍니다. 디버깅 과정에서 발생하는 다양한 상황에 맞게 pdb
와 logging
을 활용해 보세요!
'Python 고급' 카테고리의 다른 글
Python TensorFlow와 PyTorch를 이용한 딥러닝 (0) | 2025.01.17 |
---|---|
Python OpenCV를 이용한 이미지 처리 (0) | 2025.01.17 |
Python pytest를 이용한 테스트 자동화 (0) | 2025.01.15 |
Python `unittest`를 이용한 단위 테스트 작성 (0) | 2025.01.14 |
Python 정기 작업 스케줄링 (0) | 2025.01.13 |