2026/04/08 Promise - 4

김기훈·2026년 4월 8일

TIL

목록 보기
185/194

mypy오류 수정

  • 원인

    • 에러 메시지의 대부분을 차지하는 "Missing library stubs"는
      • mypy가 장고 내부 코드를 읽을 수 없다는 뜻
    • 해결하기 위해서 장고 코드를 mypy가 읽을 수 있는 형태로 번역해 주는 패키지를 설치

django-stubs

  • poetry add -G dev django-stubs
    • 개발 환경에서만 사용할 수 있도록 dev 그룹에 django-stubs 패키지를 추가
[tool.poetry.group.dev.dependencies]
black = "^26.3.1"
ruff = "^0.15.8"
mypy = "^1.20.0"

——————————————————————————————————————[비교]—————————————————————————————————————————
[tool.poetry.group.dev.dependencies]
black = "^26.3.1"
ruff = "^0.15.8"
mypy = "^1.20.0"
django-stubs = "^6.0.2"
  • 이론

    • 파이썬은 코드가 실행될 때 변수의 형태가 정해지는 동적 타입 언어임
    • 하지만 앱의 덩치가 커질수록 실행 전에 오류를 미리 잡기 위해
      • mypy 같은 정적 타입 검사 도구를 사용하게 됨
      • 장고처럼 복잡하고 거대한 프레임워크는 이런 검사 도구가 분석하기 매우 어려움
    • 그래서 "이 기능은 이런 결과물을 만들어낸다"라고 껍데기만 설명해 둔 파일이 필요한데
      • 이를 스텁(Stub) 파일이라고 부름
      • django-stubs 패키지가 바로 장고를 위한 스텁 파일들의 모음집임

mypy 설정 파일 작성하기

  • mypy에게 방금 설치한 장고 전용 도구를 사용하라고 명시적으로 알려주어야 함
  • 프로젝트 최상단 폴더에 있는 pyproject.toml 파일의 맨 아래에 내용을 추가
# mypy 도구에 대한 전반적인 설정을 시작하는 섹션입니다.
[tool.mypy]
# mypy가 사용할 외부 플러그인 목록에 장고 플러그인을 지정하여 활성화합니다.
plugins = ["mypy_django_plugin.main"]

# mypy 장고 플러그인을 위한 세부 설정을 시작하는 섹션입니다.
[tool.django-stubs]
# 장고 프로젝트의 전반적인 환경 설정 파일이 어디에 있는지 경로를 알려줍니다.
django_settings_module = "config.settings"
  • 이론(플러그인 아키텍처)

    • 소프트웨어에서 플러그인이란 본래 프로그램의 핵심 코드를 수정하지 않고도
      • 새로운 기능을 손쉽게 추가할 수 있도록 도와주는 확장 도구를 의미함
    • mypy 역시 이런 유연한 구조로 설계되어 있음
      • 장고 전용 플러그인을 연결해주기만 하면, 장고 특유의 복잡한 데이터베이스 모델이나
      • 설정 파일들을 mypy가 완벽하게 이해하고 검사할 수 있게 됨

settings.py의 타입 직접 지정하기

config/settings.py:28: error: Need type annotation for "ALLOWED_HOSTS" (hint: "ALLOWED_HOSTS: list[<type>] = ...")  [var-annotated]
config/settings.py:42: error: Need type annotation for "THIRD_PARTY_APPS" (hint: "THIRD_PARTY_APPS: list[<type>] = ...")  [var-annotated]
  • "Need type annotation for ALLOWED_HOSTS"
    • 패키지를 설치해도 자동으로 해결되지 않는 부분으로
    • 장고의 환경설정 파일에 있는 특정 변수들이 어떤 형태의 데이터를 가질지 직접 지정해줘야 함
ALLOWED_HOSTS = []

...

THIRD_PARTY_APPS = []  

——————————————————————————————————————[비교]—————————————————————————————————————————
# 장고 설정 파일에서 사이트 접속을 허용할 호스트 주소들을 관리하는 변수
ALLOWED_HOSTS: list[str] = []

# 외부에서 가져온 서드파티 앱들을 등록하여 관리하는 변수
THIRD_PARTY_APPS: list[str] = []
  • 이론(타입 어노테이션)

    • 변수 이름 뒤에 콜론 기호를 붙여서 이 변수가 어떤 형태의 데이터를 담을지 명시적으로 적어주는 문법
      • 이를 통해 개발자는 코드를 읽을 때 변수의 역할을 명확히 파악할 수 있고
      • 컴퓨터는 코드를 실행하기 전에 데이터의 종류가 잘못 섞이는 에러를 미리 잡아낼 수 있어
        • 앱의 안정성을 획기적으로 높여줌

재확인




——————————————————————————————————————[비교]—————————————————————————————————————————

——————————————————————————————————————[비교]—————————————————————————————————————————
profile
안녕하세요.

0개의 댓글