# πŸŽ“ μ„Έμ…˜ 4: λ‘œκΉ… μ‹œμŠ€ν…œ ꡬ좕 ν•™μŠ΅ 정리

문건희·2025λ…„ 8μ›” 1일

insurance-rag

λͺ©λ‘ 보기
3/3

πŸ“‹ μ„Έμ…˜ κ°œμš”

  • 주제: Python λ‘œκΉ… μ‹œμŠ€ν…œ ꡬ좕 및 이해
  • κΈ°μ€€ μ½”λ“œ: insupanda-rag의 src/config/logger.py
  • ν•™μŠ΅ 방식: 직접 타이핑 + 상세 μ£Όμ„μœΌλ‘œ κ°œλ… ν•™μŠ΅
  • μ™„μ„± κ²°κ³Ό: μ½˜μ†”κ³Ό νŒŒμΌμ— λ™μ‹œ 좜λ ₯λ˜λŠ” λ‘œκΉ… μ‹œμŠ€ν…œ

πŸ” 핡심 κ°œλ… ν•™μŠ΅

1. λ‘œκΉ…(Logging)μ΄λž€?

  • μ •μ˜: ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒν•˜λŠ” μ΄λ²€νŠΈλ“€μ„ κΈ°λ‘ν•˜λŠ” μ‹œμŠ€ν…œ
  • λΉ„μœ : ν”„λ‘œκ·Έλž¨μ˜ "일기μž₯" - μ–Έμ œ 무슨 일이 μΌμ–΄λ‚¬λŠ”μ§€ 상세 기둝
  • ν•„μš”μ„±: 디버깅, λͺ¨λ‹ˆν„°λ§, 뢄석, 증거 보전

2. λ‘œκΉ… 레벨 5단계

DEBUG < INFO < WARNING < ERROR < CRITICAL
  • DEBUG: 개발자용 상세 정보 (κ°€μž₯ μžμ„Έν•¨)
  • INFO: 일반적인 정보 ← 우리 ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©
  • WARNING: κ²½κ³  λ©”μ‹œμ§€
  • ERROR: μ—λŸ¬ λ°œμƒ
  • CRITICAL: 치λͺ…적 였λ₯˜ (κ°€μž₯ 심각함)

3. ν•Έλ“€λŸ¬(Handler) κ°œλ…

둜그λ₯Ό "어디에" 보낼지 κ²°μ •ν•˜λŠ” 배달원 μ—­ν• 

StreamHandler

  • μ—­ν• : μ½˜μ†”(터미널 ν™”λ©΄)에 μ‹€μ‹œκ°„ 좜λ ₯
  • μž₯점: μ¦‰μ‹œ 확인 κ°€λŠ₯, 개발 쀑 디버깅 용이
  • 단점: ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ‹œ 사라짐

FileHandler

  • μ—­ν• : νŒŒμΌμ— 영ꡬ μ €μž₯
  • μž₯점: 영ꡬ 보관, λ‚˜μ€‘μ— 뢄석 κ°€λŠ₯
  • μ„€μ •: ("app.log", "a", "utf-8")
    • "app.log": 파일λͺ…
    • "a": append λͺ¨λ“œ (κΈ°μ‘΄ λ‚΄μš©μ— μΆ”κ°€)
    • "utf-8": ν•œκΈ€ 지원 인코딩

πŸ’» μ‹€μŠ΅ κ³Όμ •

1. ν”„λ‘œμ νŠΈ ꡬ쑰 확인

insurance-rag-learning/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ config/     ← 여기에 logger.py 생성
β”‚   β”œβ”€β”€ db/
β”‚   β”œβ”€β”€ models/
β”‚   └── ...
β”œβ”€β”€ tests/
└── README.md

2. logger.py 핡심 μ½”λ“œ

import logging

def setup_logging() -> None:
    logging.basicConfig(
        level=logging.INFO,  # INFO μ΄μƒλ§Œ 기둝
        format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
        handlers=[
            logging.StreamHandler(),  # μ½˜μ†” 좜λ ₯
            logging.FileHandler("app.log", "a", "utf-8"),  # 파일 μ €μž₯
        ],
    )

3. ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 및 μ‹€ν–‰

  • 파일: test_logging.py
  • ν…ŒμŠ€νŠΈ λ‚΄μš©:
    • λͺ¨λ“  λ‘œκΉ… 레벨 ν…ŒμŠ€νŠΈ
    • λ‹€μ–‘ν•œ λͺ¨λ“ˆλ³„ λ‘œκΉ… ν…ŒμŠ€νŠΈ
    • μ½˜μ†”κ³Ό 파일 λ™μ‹œ 좜λ ₯ 확인

βœ… ν…ŒμŠ€νŠΈ κ²°κ³Ό 뢄석

성곡적인 λ™μž‘ 확인

  1. DEBUG 필터링 βœ… - INFO 레벨 μ„€μ •μœΌλ‘œ DEBUG λ©”μ‹œμ§€ 차단
  2. 둜거 이름 ꡬ뢄 βœ… - __main__, database, openai_api λ“± λͺ¨λ“ˆλ³„ ꡬ뢄
  3. μ‹œκ°„ μ •ν™•μ„± βœ… - λ°€λ¦¬μ΄ˆ λ‹¨μœ„ μ •ν™•ν•œ νƒ€μž„μŠ€νƒ¬ν”„
  4. λ™μ‹œ 좜λ ₯ βœ… - μ½˜μ†”κ³Ό νŒŒμΌμ— λ™μΌν•œ λ‚΄μš© 기둝
  5. Append λͺ¨λ“œ βœ… - μ—¬λŸ¬ 번 싀행해도 둜그 λˆ„μ  μ €μž₯
  6. UTF-8 인코딩 βœ… - ν•œκΈ€ 깨짐 없이 μ™„λ²½ μ €μž₯

μ‹€μ œ ν…ŒμŠ€νŠΈ 좜λ ₯ μ˜ˆμ‹œ

2025-08-02 01:06:51,021 [INFO] __main__: ℹ️ ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ μ‹œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€
2025-08-02 01:06:51,021 [WARNING] __main__: ⚠️ 이것은 κ²½κ³  λ©”μ‹œμ§€μž…λ‹ˆλ‹€
2025-08-02 01:06:51,021 [ERROR] __main__: ❌ μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€
2025-08-02 01:06:51,021 [INFO] database: πŸ’Ύ λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 성곡

πŸ†š κΈ°μ‘΄ insupanda-rag와 비ꡐ

곡톡점 (잘 λ”°λΌν•œ λΆ€λΆ„)

  • βœ… λ™μΌν•œ λ‘œκΉ… 레벨 (INFO)
  • βœ… λ™μΌν•œ 포맷 ꡬ쑰
  • βœ… λ™μΌν•œ ν•Έλ“€λŸ¬ μ‘°ν•©
  • βœ… λ™μΌν•œ 파일 μ„€μ •

우리 λ²„μ „μ˜ μž₯점

  • μƒμ„Έν•œ 주석: 각 라인의 λͺ©μ κ³Ό λ™μž‘ 원리 λͺ…ν™•νžˆ μ„€λͺ…
  • κ΅¬μ‘°ν™”λœ μ½”λ“œ: setup_logging() ν•¨μˆ˜λ‘œ κΉ”λ”ν•˜κ²Œ 정리
  • ν•™μŠ΅ μΉœν™”μ : μ΄ˆλ³΄μžλ„ 이해할 수 μžˆλŠ” μƒμ„Έν•œ μ„€λͺ…

🎯 핡심 ν•™μŠ΅ 포인트

1. λ‘œκΉ… μ‹œμŠ€ν…œμ˜ 3κ°€μ§€ 핡심 κΈ°λŠ₯

  1. μ½˜μ†” 좜λ ₯: μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§
  2. 파일 μ €μž₯: 영ꡬ 보관 및 뢄석
  3. 레벨 필터링: ν•„μš”ν•œ μ •λ³΄λ§Œ 선별 기둝

2. Append λͺ¨λ“œμ˜ μ€‘μš”μ„±

  • "a" λͺ¨λ“œ: κΈ°μ‘΄ 둜그 λ³΄μ‘΄ν•˜λ©° μƒˆ 둜그 μΆ”κ°€
  • "w" λͺ¨λ“œ: κΈ°μ‘΄ 둜그 μ‚­μ œ ν›„ μƒˆλ‘œ μž‘μ„± (μœ„ν—˜!)
  • μ‹€μ œ 증λͺ…: 두 번 μ‹€ν–‰ν–ˆμ„ λ•Œ λͺ¨λ“  λ‘œκ·Έκ°€ λˆ„μ  μ €μž₯됨

3. 둜거 이름(%(name)s)의 κ°€μΉ˜

  • 문제 좔적: μ–΄λŠ λͺ¨λ“ˆμ—μ„œ λ°œμƒν•œ λ‘œκ·ΈμΈμ§€ μ¦‰μ‹œ 식별
  • 디버깅 νš¨μœ¨μ„±: μ—λŸ¬ λ°œμƒ μ‹œ ν•΄λ‹Ή λΆ€λΆ„λ§Œ 집쀑 뢄석 κ°€λŠ₯
  • μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§: 각 ꡬ성 μš”μ†Œλ³„ μƒνƒœ κ°œλ³„ 확인

πŸš€ λ‹€μŒ 단계 예고

λ‹€μŒ μ„Έμ…˜μ—μ„œλŠ” ν™˜κ²½ λ³€μˆ˜μ™€ μ„€μ • 관리λ₯Ό λ‹€λ£° μ˜ˆμ •μž…λ‹ˆλ‹€:

  • Pydantic을 ν™œμš©ν•œ μ„€μ • 관리
  • ν™˜κ²½λ³€μˆ˜(.env) ν™œμš©λ²•
  • 개발/운영 ν™˜κ²½ 뢄리 방법

πŸ“ ν•™μŠ΅ μ„±κ³Ό

  • βœ… λ‘œκΉ…μ˜ 핡심 κ°œλ… μ™„μ „ 이해
  • βœ… Python logging 라이브러리 μ‹€μŠ΅ μ™„λ£Œ
  • βœ… μ½˜μ†”/파일 λ™μ‹œ 좜λ ₯ μ‹œμŠ€ν…œ ꡬ좕
  • βœ… κΈ°μ‘΄ ν”„λ‘œμ νŠΈ μ½”λ“œμ™€ 비ꡐ 뢄석 μ™„λ£Œ
  • βœ… μ‹€λ¬΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ‘œκΉ… μ‹œμŠ€ν…œ μŠ΅λ“

0개의 λŒ“κΈ€