[GCP] Cloud Functions 로깅 전략: `print`에서 `logging`으로 전환한 이유

yeahcold·2025년 4월 1일
0

Data Engineering

목록 보기
13/20

Cloud Functions나 Lambda 환경에서 로그를 다루다 보면, 단순 print()만으로는 운영 환경에서의 추적성이 매우 떨어지기 때문에 logging을 사용해야합니다. 그래서 오늘은 logging에 대해 정리해보고자합니다.


🪵 문제: print()만 쓰면 운영 로그가 정리가 안 됨

처음엔 아래처럼 단순하게 로그를 찍었습니다.

print("raw TSV 파일 저장 완료")
print(f"업로드 대상 S3 버킷: {bucket_name}")

하지만 실제 운영 중엔 이런 문제가 생겼습니다.

  • Cloud Functions에서 로그는 남지만, 레벨 구분 없이 다 한 줄로 쌓임
  • 디버깅할 때 필요한 정보만 추적하기 어려움
  • 운영 중 에러가 발생해도 print만으로는 심각도를 파악하기 어려움

✅ 해결: logging 도입으로 로그 레벨을 분리하고 추적 용이성 향상

logging을 통한 구조적인 로그 구성(보통 main.py에 많이 작성합니다.)

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

이제 이렇게 원하는 정도에 맞춰 로그를 남길 수 있습니다.

logger.info("파일 저장 완료: %s", output_path)
logger.debug("전체 상품 수: %d", len(all_products))
logger.error("에러 발생: %s", str(e))

🔍 왜 logging.basicConfig(level=logging.INFO)를 써야 했을까?

  • 기본 logging 설정은 레벨이 WARNING 이상만 출력됩니다.
  • 따라서 INFO 이하 메시지를 보기 위해선 레벨 설정을 명시적으로 해야 합니다.
  • Cloud Functions에서도 이 설정을 적용하면 DEBUG, INFO, ERROR 등 레벨에 맞춰 구글 로그 뷰어에서 필터링이 가능합니다.

🧭 로그 레벨 어떻게 나눴는가?

레벨용도예시
DEBUG상세한 내부 상태 추적용 (로컬 디버깅 중심)상품 수, 카테고리 추출 등
INFO정상 처리 흐름 로그"TSV 저장 완료", "S3 업로드 완료"
WARNING경고 수준 (무시 가능하지만 기록 필요)일부 누락된 필드 등
ERROR예외 발생 시네이버 API 실패, 인증 오류 등

예시 : main.py 기준 기본 구성

# main.py 상단
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 예외 처리
try:
    ...
    logger.info("S3 업로드 완료: %s", final_output)
except Exception as e:
    logger.error("에러 발생 ❌: %s", str(e), exc_info=True)

📎 정리

  • print()로컬 디버깅에 적합, 운영에선 logging이 무조건 유리
  • 로그 레벨을 나누는 것만으로 운영 이슈 추적성이 매우 높아짐
  • 특히 Cloud Functions / GCP Logging에서는 로그 필터링을 위해 레벨별 구분이 필수
profile
Software Engineer

0개의 댓글