파이썬/기초 프로그래밍

파이썬에서 모듈 전역 변수는 왜 함수 파라미터 없이도 사용할 수 있을까

Data Jun 2026. 2. 3. 13:16

파이썬 코드를 작성하다 보면, 함수에 전달하지 않았는데도 모듈에 정의된 상수나 설정 값이 함수 안에서 자연스럽게 사용되는 경우를 자주 보게 됩니다.
처음 보면 “이게 왜 되지?”라는 생각이 들 수 있지만, 이는 파이썬의 스코프 규칙을 이해하면 아주 자연스러운 동작입니다.

 

핵심은 이 한 문장입니다.
같은 모듈에 정의된 변수는 해당 모듈 안의 모든 함수에서 읽을 수 있다는 점입니다.

 

파이썬은 함수 내부에서 변수를 찾을 때, 먼저 함수 안을 보고 없으면 그 함수를 감싸고 있는 모듈 공간을 확인합니다.
그래서 아래와 같은 코드가 문제없이 동작합니다.

# config.py
CSV_PATH = "/data/raw.csv"
# ingest.py
from config import CSV_PATH

def run():
    print(CSV_PATH)  # 파라미터로 안 받아도 사용 가능

이를 비유하자면,
함수는 같은 사무실(모듈) 에 놓인 공용 물품(전역 변수)을 꺼내 쓰는 것과 같습니다.
굳이 택배(파라미터)로 다시 받을 필요가 없는 것이죠.

 

다만 중요한 제한이 하나 있습니다.
이 방식은 읽기 전용으로 사용하는 것이 안전합니다.
함수 안에서 전역 변수를 수정하려 하면, 의도치 않게 새로운 지역 변수가 생기거나 혼란을 초래할 수 있습니다.

그래서 보통 이런 기준으로 나누는 것이 좋습니다.

  • 변하지 않는 설정 값 → 모듈 전역 상수
  • 실행 시마다 달라질 수 있는 값 → 함수 파라미터 또는 DAG params

이렇게 역할을 나누면 코드의 의도가 훨씬 또렷해집니다.

 

모듈에 정의된 변수는 같은 모듈의 함수에서 파라미터 없이 읽을 수 있으며, 고정된 설정 값일 때 전역 상수로 사용하는 것이 가장 깔끔하다.