본문 바로가기
C.W.K.
Stream
Lesson 09 of 13 · published

타입 검사

~11 min · types, mypy, pyright, tsc

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Lint가 못 잡는 컴파일 타임 게이트

타입 검사는 lint가 놓치는 버그를 잡아줘. 잘못된 타입 인자, 누락된 필드, 처리되지 않은 None이나 null, API 계약 불일치 같은 것들이야. 정적 분석과 시뮬레이션 실행 사이 어디쯤에서 동작하면서, 모든 코드 경로를 대신 훑어주니까 네가 머리로 다 돌아볼 필요는 없어.

주요 검사기

  • Python — mypy: 점진적 타이핑의 원조. PEP 484 타입 힌트를 읽어. Strict 모드(--strict)를 권장해.
  • Python — pyright: Microsoft가 만든 거야. 더 빠르고 추론도 더 정확해. VS Code의 Pylance도 이걸 기반으로 움직여. ruff랑 같이 자주 써.
  • TypeScript — tsc: tsc --noEmit은 출력 없이 타입 검사만 해. 정통 게이트 역할이지.
  • JSDoc와 JavaScript — 그래, JSDoc에 // @ts-check를 붙이면 트랜스파일 없이도 TypeScript 검사의 대부분을 쓸 수 있어.

CI에서의 타입 검사

  1. 테스트나 lint와 병렬로 돌리되, 별도 작업으로 분리해.
  2. 검사기 버전은 고정해. 릴리스 사이에 타입 에러 기준이 바뀔 수 있거든.
  3. PR diff에 주석을 달고 싶으면, 출력값을 사람이 읽기 쉬운 형태와 기계가 읽기 쉬운 형태로 둘 다 내보내.
  4. Python은 프로덕션 환경과 똑같은 Python 버전에서 실행해.

Code

병렬 타입 검사 작업 (Python + TypeScript)·yaml
  type-check-python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v3
      - run: uv sync --all-extras --dev
      - run: uv run mypy src --strict --no-incremental

  type-check-typescript:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
        with: { version: 9 }
      - uses: actions/setup-node@v4
        with: { node-version: '22', cache: pnpm }
      - run: pnpm install --frozen-lockfile
      - run: pnpm tsc --noEmit

External links

Exercise

CI 워크플로에 strict 타입 검사 작업을 추가해. 로컬에서 먼저 한 번 돌려서 기존 에러를 고치고 푸시해. 이후로 타입은 빌드의 일부야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.