요점정리 - 2025-10-31

오늘 공부한 내용
오늘 공부한 내용:
    
    ## 📌 학습 목표 요점 정리: 예외 처리, 로깅, 파일 입출력
    
    ### 1. 🛑 예외 처리 (Exception Handling)
    
    * **개념**: **예외(Exception)**는 시스템의 비정상적인 종료를 막고, 예상치 못한 상황(`IndexError`, `ValueError` 등)을 알려 대처하여 정상적인 흐름으로 복귀시키기 위한 방법.
    * **기본 구조**:
        * **`try`**: 예외가 발생할 수 있는 코드를 포함.
        * **`except [Exception 타입] as 별칭`**: `try` 블록에서 발생한 예외를 처리하는 영역. (`Exception`은 모든 예외의 최상위 부모).
        * **`else`**: **예외가 발생하지 않았을 때**만 수행되는 영역.
        * **`finally`**: 예외 발생 여부와 **상관없이 항상** 수행되는 영역 (리소스 해제 등에 사용).
    * **강제 예외 발생**: `raise ExceptionType('메시지')` 구문을 사용하여 의도적으로 예외를 발생시켜 입력값의 **유효성 검증(보안적 관점)** 등에 활용.
    
    ---
    
    ### 2. 🛡️ 로깅 (Logging) 및 보안 관점
    
    * **개념**: 서버 환경에서 `print()` 대신 사용되며, 예외나 시스템 상태를 **일반화된 메시지**로 기록하여 보안과 디버깅에 활용.
    * **로깅 레벨 (Level)**: 메시지의 중요도에 따라 구분.
        * `DEBUG`, `INFO`, **`WARNING`**, **`ERROR`**, `CRITICAL`.
    * **설정**: `logging.basicConfig()`를 사용하여 레벨, 포맷 (`%(asctime)s - %(levelname)s - %(message)s`), 출력 파일 (`filename`) 등을 설정.
    * **보안적 활용**:
        * **입력 검증**: 함수 진입 시 `isinstance()`를 사용해 매개변수 타입(예: `list`, `dict`)을 검증하고, 오류 시 `TypeError`를 발생시킴.
        * **마스킹 처리**: 사용자 이름 등 민감 정보를 로그에 기록할 때 일부를 `*` 등으로 가려 **개인 정보 노출을 방지**함.
    
    ---
    
    ### 3. 📁 파일 입출력 (File I/O)
    
    * **파일 열기/닫기**:
        * `open(filePath, mode='r|w|a', encoding='utf-8')`: 파일을 열어 파일 객체를 반환.
        * `file.close()`: 파일 사용 후 **반드시** 닫아 리소스를 해제해야 함.
    * **`with open(...) as file:`**:
        * 파일 입출력에 가장 권장되는 방식. 블록을 벗어나면 예외 발생 여부와 상관없이 `file.close()`가 **자동으로 호출**됨.
    * **주요 모드**:
        * **`r`**: 읽기 (Read).
        * **`w`**: 쓰기 (Write, 파일이 없으면 생성, 있으면 **내용을 덮어씀**).
        * **`a`**: 추가 (Append, 파일 끝에 내용을 **추가**).
    * **데이터 읽기/쓰기**:
        * `file.read()`: 전체 내용을 **문자열(str)**로 읽음.
        * `file.readlines()`: 각 줄을 요소로 하는 **리스트(list)**로 읽음.
        * `file.write(data)`: 문자열 데이터를 파일에 씀.
    * **JSON 처리**:
        * `import json` 모듈 사용.
        * `json.dump(dict_data, file)`: 파이썬 **딕셔너리(dict)**를 파일에 **JSON 형식으로 저장**.
        * `json.load(file)`: **JSON 파일**을 읽어 파이썬 **딕셔너리(dict)**로 로드.