learn

Module Level이란

Module Level이란

한 줄 정의

파일을 import하는 순간 바로 실행되는 코드.

개념

Python은 파일을 import할 때 위에서 아래로 전부 실행한다. 함수/클래스 정의도 "실행"이고, 그냥 떠있는 코드도 다 실행된다.

# mymodule.py

import os                    # ← module level: import 순간 실행
DB_URL = "localhost:5432"   # ← module level: 상수 정의
logger = setup_logger()     # ← module level: 함수 호출도 실행됨

class MyClass:              # ← module level: 클래스 정의 (실행)
    pass

def my_func():              # ← module level: 함수 정의 (실행)
    ...                     #   단, 함수 내부는 호출 전까지 안 실행

if __name__ == "__main__":  # ← 직접 실행할 때만
    ...

if __name__ == "__main__"과의 차이

| | module level | __main__ 블록 | |---|---|---| | 실행 시점 | import 순간 | python mymodule.py로 직접 실행할 때만 | | 용도 | 항상 필요한 초기화 | 스크립트 진입점 |

what-to-centralize-imports|loguru 설정, DB 연결 같은 걸 module level에 두는 이유가 여기 있다. "이 모듈을 쓰는 누구든 이 초기화가 필요하니까"라는 의도.

주의: 부작용 있는 코드

module level에 부작용 있는 코드를 두면 import만 해도 실행돼서 테스트나 다른 곳에서 쓸 때 예상치 못한 동작이 생길 수 있다.

# 나쁜 예
send_email("서버 시작됨")  # import만 해도 메일 날아감 💀

# 좋은 예
def start():
    send_email("서버 시작됨")  # 명시적으로 호출할 때만