개발을 하면서 버그를 잡아야 할 때 가장 먼저 떠오르는 방법이 있다. 바로 print()를 사용하는 것이다. 나는 자바에서도 주로 print()를 사용했기 때문에 파이썬에서도 자연스럽게 print()만 활용하게 되었다. 하지만 점점 코드가 복잡해지고 유지보수가 필요한 프로젝트에서는 logging이 더 유용한 경우가 많다는 것을 알게 되었다. 오늘은 print와 logging의 개념, 장단점, 그리고 실제 사용 예시를 다뤄보려고 한다.
print()의 개념과 특징
print()는 파이썬에서 콘솔에 값을 출력하는 가장 기본적인 함수다. 간단한 코드에서 디버깅을 할 때 자주 사용한다. 사용 방법이 쉽고 직관적이라 개발 초반에 많이 활용된다.
장점
- 간단하고 빠르다 - 별도의 설정 없이 즉시 출력 가능하다.
- 모든 타입을 출력할 수 있다 - 문자열, 숫자, 리스트, 객체 등 어떤 데이터든 출력할 수 있다.
- 빠른 디버깅 - 코드 어디에서나 바로 값을 확인할 수 있다.
단점
- 출력 관리가 어렵다 - 여러 개의 print()를 남발하면 코드가 지저분해지고 유지보수가 힘들어진다.
- 파일 저장 불가능 - 기본적으로 콘솔에만 출력되므로 로그를 파일로 남길 수 없다.
- 로그 레벨이 없다 - 중요한 메시지와 단순한 디버깅 메시지를 구분할 방법이 없다.
사용 예시
search_keywords = "테스트"
print(f"[keyword]: {search_keywords}")
실행 결과
[keyword]: 테스트
logging의 개념과 특징
logging은 파이썬의 기본 라이브러리로, 보다 체계적인 방식으로 로그를 관리할 수 있도록 도와준다. 로그를 파일로 저장하거나, 로그 레벨을 설정하여 필요한 정보만 출력할 수도 있다.
장점
- 로그 레벨 관리 가능 - DEBUG, INFO, WARNING, ERROR, CRITICAL 등 중요도에 따라 메시지를 관리할 수 있다.
- 출력 대상 설정 가능 - 콘솔뿐만 아니라 파일, 원격 서버, 데이터베이스 등에 로그를 저장할 수 있다.
- 다양한 포맷 지원 - 시간, 파일명, 함수명 등을 포함한 상세한 로그를 남길 수 있다.
- 대형 프로젝트에서 유용 - 여러 모듈에서 일관된 방식으로 로그를 관리할 수 있다.
단점
- 초기 설정이 필요하다 - print()보다 사용이 복잡하다.
- 속도가 조금 느릴 수 있다 - 내부적으로 다양한 설정을 처리하기 때문에 print()보다 성능이 약간 떨어질 수 있다.
로그 레벨 | 의미 |
DEBUG | 상세한 디버깅 정보, 개발자가 문제 해결할 때 유용함 |
INFO | 일반적인 정보 메시지 (시스템 작동 상태 확인) |
WARNING | 경고 메시지, 동작 가능하지만 주의가 필요함 |
ERROR | 오류 발생, 기능이 제대로 작동하지 않을 때 사용 |
CRITICAL | 심각한 오류, 프로그램이 중단될 가능성이 있을 때 사용 |
사용 예시
main.py에 logging 설정을 했다.
import logging
# 로그 설정
logging.basicConfig(
level=logging.INFO, # 로그 레벨 설정
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", # 로그 형식
datefmt="%Y-%m-%d %H:%M:%S", # 날짜 형식
handlers=[
logging.StreamHandler(),
],
)
logging.getLogger("sqlalchemy.engine").setLevel(logging.DEBUG)
logging.getLogger("sqlalchemy.pool").setLevel(logging.DEBUG)
logging.getLogger("sqlalchemy.orm").setLevel(logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info("로그 설정 완료")
search_keywords = "Python Logging"
logger.info(f"[keyword]: {search_keywords}")
실행 결과
2025-02-17 10:00:00 - __main__ - INFO - 로그 설정 완료
2025-02-17 10:00:01 - __main__ - INFO - [keyword]: Python Logging
print() vs logging, 언제 사용하면 좋을까?
- 빠르게 코드 확인할 때 - print() 사용
- 실제 서비스, 운영 환경에서 로그 관리할 때 - logging 사용
- 디버깅이 필요한 경우 - logging.debug() 활용
- 운영 상태를 기록할 경우 - logging.info() 사용
- 에러 발생 시 확인용 로그 - logging.error() 또는 logging.critical() 활용
비교 항목 | print() | logging |
사용 목적 | 단순한 값 출력 | 체계적인 로그 관리 |
로그 레벨 | 없음 | DEBUG, INFO, WARNING, ERROR, CRITICAL 지원 |
출력 대상 | 콘솔 | 콘솔, 파일, 원격 서버 등 다양한 옵션 가능 |
설정 필요 여부 | 불필요 | 초기 설정 필요 |
유지보수 용이성 | 어려움 | 쉬움 |
마무리
나는 처음엔 print()밖에 몰라서 주로 print()로만 값을 체크했었다. 하지만 팀원이 logging을 설정해둔 것을 보고 사용법을 익히면서 점점 활용하게 되었다. logging을 사용하니 로직을 더 명확하게 체크할 수 있었고, 여러 레벨의 로그를 활용하면서 어떤 부분이 중요한지 구분하기도 쉬워졌다. 앞으로는 print()보다는 logging을 적극적으로 활용해야겠다고 생각했다.
'Python' 카테고리의 다른 글
[Python] Redis를 활용한 중복 추천 방지 로직 상세 분석 (0) | 2025.02.20 |
---|---|
[Python] Redis를 활용한 중복 추천 방지 캐싱 서비스 개발 (0) | 2025.02.19 |
[Python] 동기 vs 비동기, 언제 그리고 어떻게 사용해야 할까? (0) | 2025.02.07 |
[Python] FastAPI와 React 연동 및 데이터 흐름과 처리 과정 (0) | 2025.01.31 |
[Python] Google Maps & SerpAPI를 활용한 맛집 추천 개발기 (0) | 2025.01.30 |