파이썬 교재 · 27편 / 27편 · 마지막

파이썬 프로젝트 만들기 — 졸업작

27편의 도구가 한 폴더에. GitHub 에 공개하고 누가 봐도 잘 쓴 코드.

실전읽는 시간 8분2026-05-13
src 레이아웃 폴더 구조와 pyproject.toml, CI 워크플로 파일 화면

26편의 도구가 다 모이는 자리. 1편의 파이썬 설치부터 26편의 자동 포맷까지 — 27편을 거치며 본인은 이미 "한 폴더짜리 진짜 프로젝트" 를 만들 준비가 끝났습니다. 27편은 그 도구들을 한 자리에 묶어 GitHub 에 올릴 수 있는 결과물을 만들고, 입문서 졸업 인증을 합니다.

27편을 마치면 ① 권장 폴더 구조(src 레이아웃) ② pyproject.toml 완성형 ③ CLI 진입점 ④ 테스트·README·라이선스 ⑤ GitHub Actions CI ⑥ 앞으로의 학습 — 이게 진짜 시작점입니다.

권장 폴더 구조 — src 레이아웃

myapp/
├── src/
│   └── myapp/
│       ├── __init__.py
│       ├── cli.py
│       └── core.py
├── tests/
│   ├── __init__.py
│   └── test_core.py
├── pyproject.toml
├── README.md
├── LICENSE
├── .gitignore
├── .pre-commit-config.yaml
└── .github/
    └── workflows/
        └── ci.yml

src 레이아웃 의 핵심 — 코드를 src/패키지명/ 안에. 테스트가 실수로 설치 안 된 로컬 모듈을 import 하는 사고를 막아주고, 패키징도 깔끔. 2026년 신규 프로젝트의 표준입니다.

pyproject.toml — 한 파일에 모든 설정

# pyproject.toml
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "myapp"
version = "0.1.0"
description = "주제 한 줄 설명"
readme = "README.md"
requires-python = ">=3.12"
license = {text = "MIT"}
authors = [{name = "준성", email = "[email protected]"}]
dependencies = [
    "requests>=2.31",
    "pandas>=2.2",
]

[project.optional-dependencies]
dev = ["pytest", "pytest-cov", "ruff", "mypy"]

[project.scripts]
myapp = "myapp.cli:main"           # CLI 명령어 등록

[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"]

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "--cov=src/myapp --cov-report=term-missing"

setup.py + setup.cfg + requirements.txt + pytest.ini이 한 파일로 통합. 의존성·메타데이터·도구 설정·CLI 진입점이 한 자리.

# 개발 설치 — 코드 수정이 즉시 반영
(.venv) $ pip install -e ".[dev]"

# 그러면 어디서든 명령 실행 가능
$ myapp --help
$ pytest
$ ruff check .

CLI 진입점 — myapp 명령으로 실행

# src/myapp/cli.py
import argparse
import logging
from .core import process

def main() -> int:
    ap = argparse.ArgumentParser(prog="myapp")
    ap.add_argument("input", help="입력 파일")
    ap.add_argument("-o", "--out", default="output.csv")
    ap.add_argument("-v", "--verbose", action="store_true")
    args = ap.parse_args()

    logging.basicConfig(
        level=logging.DEBUG if args.verbose else logging.INFO,
        format="%(asctime)s [%(levelname)s] %(message)s",
    )

    n = process(args.input, args.out)
    print(f"처리 완료: {n} 건")
    return 0

if __name__ == "__main__":
    raise SystemExit(main())

pyproject.toml[project.scripts] 가 이 함수를 myapp 명령으로 등록. 설치한 사람은 myapp data.csv -o out.csv 한 줄로 실행. 22편의 자동화 스크립트가 정식 도구로 진화하는 자리입니다.

README·LICENSE·.gitignore

# README.md — 누구나 5분에 시작할 수 있게
# myapp

CSV 매출 데이터를 일자별 합계로 요약합니다.

## 설치
$ pip install -e ".[dev]"

## 사용
$ myapp sales.csv -o summary.csv

## 개발
$ pytest
$ ruff check . && ruff format .

## 라이선스
MIT (LICENSE 파일 참조)
# .gitignore — 깃에 안 올라가야 할 것들
.venv/
__pycache__/
*.pyc
.pytest_cache/
.ruff_cache/
.coverage
htmlcov/
dist/
build/
*.egg-info/
.env

📌 좋은 README 의 5요소

① 한 줄 설명 (이게 뭔지) ② 설치 (어떻게 깔지) ③ 사용 예 (한 명령) ④ 개발자 가이드 (테스트·린트) ⑤ 라이선스. 5분 안에 누구나 시작할 수 있어야 합니다. 처음 본 사람이 본인 코드를 굳이 읽지 않게.

GitHub Actions CI — 자동 검증

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.12", "3.13"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install -e ".[dev]"
      - run: ruff check .
      - run: ruff format --check .
      - run: pytest

PR 마다 자동으로 ① 의존성 설치 ② 린트 ③ 포맷 확인 ④ 테스트 실행. 빨간 X 면 머지 못 함. 본인 혼자 작업하더라도 6개월 뒤 본인을 구합니다.

27편 졸업 + 앞으로의 길

27편을 끝낸 본인은 이제 혼자 작은 도구를 만들고 GitHub 에 공개할 수 있습니다. 매출 리포트 자동 생성기, 웹 크롤러, API 라우터, 데이터 정리 CLI — 본인 회사에서 한 번씩 마주칠 잡일을 한 주 안에 코드로 만들 수 있어요.

📚 다음 학습 권장 — 본인 관심 한 갈래로

· 웹 백엔드 — FastAPI 공식 튜토리얼 → 작은 API 만들고 배포

· 데이터 분석 — pandas 공식 10분 → matplotlib·seaborn → 캐글 입문

· 머신러닝 — scikit-learn → PyTorch 또는 TensorFlow

· 자동화·DevOps — Click(CLI 프레임워크) → typer → Docker → AWS

· LLM 응용 — LangChain → 본인만의 GPT 도우미

한 갈래를 골라 작은 프로젝트를 한 달에 하나씩 6개월 만들면 본인 GitHub 가 곧 이력서. 어디서든 통합니다.

⚠️ 가장 중요한 한 마디 — 손이 코드를 익혀야 한다. 이 시리즈 27편은 사다리에 불과합니다. 본인이 직접 짜고, 막히고, 검색하고, 다시 짜는 시간이 진짜 학습. AI 어시스턴트(Claude·Copilot)에게 처음부터 코드를 다 받으면 6개월 뒤 본인이 짠 코드를 못 읽어요. "작은 부분은 본인이, 큰 흐름은 AI 와 협업" — 입문자에게 가장 안전한 비율.

27편 시리즈를 끝까지 읽어주셔서 감사합니다. 본인의 첫 GitHub 프로젝트가 곧 다음 글의 영감이 됩니다 — 본인이 만든 도구·삽질·교훈을 다시 글로 적으면 그게 28편이 돼요. 학습은 만드는 것에서 끝나지 않고, 가르치는 것에서 비로소 완성됩니다.

📚 시리즈 완결 — 1편부터 다시

가장 어렵게 느꼈던 챕터를 한 번 더 읽어보세요. 처음과는 다르게 보입니다. 그게 진짜 졸업입니다.

📚 27편 파이썬 교재 시리즈 — 27/27편 (완결)
← 26편 "Black·Ruff" · 시리즈 처음으로: 1편 "파이썬이란"

© 2026 주나이테크(주) @JUNAITECH