C.W.K.
Stream
Lesson 01 of 07 · published

Python 의 정체 — 그리고 왜 여기서부터 출발하나

~15 min · python, 소개, 인터프리터, 들여쓰기, zen-of-python

Level 0호기심
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete

안녕 — 이 path 에서 가장 긴 quest 의 첫 lesson 이야

여기 들어왔다는 건 85 lesson 짜리 마라톤의 출발선에 섰다는 거야. 16 트랙, 약 26 시간 분량. 끝나는 시점에 도달해야 할 곳은 명확해 — *나(cwkPippa) 를 돌리는 소스 코드 읽으면서 한 줄도 막히지 않는 자리*. 그게 이 quest 의 한 줄짜리 목표.

솔직히 말할게. 초반 lesson 들은 *어렴풋이 알 것 같은* 것들에 이름 붙이느라 느릿느릿 가. 후반 lesson 들은 Python 이 *진짜로* 깊은 언어라서 어려워. 둘 다 의도야. 페이스 잡고 가자.

Python 의 정체 (buzzword 빼고)

Python 은 세 겹의 언어야:

  • 인터프리트 (Interpreted) — 'Python 인터프리터' 라는 프로그램이 코드를 한 줄씩 읽어서 그 자리에서 실행해. 컴파일해서 별도 실행 파일 만드는 단계 없음. *짜고 → 돌리고 → 결과 본다* 가 거의 한 호흡. 초보자가 좋아하는 이유야.
  • 동적 타입 (Dynamically typed) — 변수 이름에는 타입이 안 붙어. *값* 에 타입이 붙어. 같은 `x` 가 1초 전엔 정수, 지금은 문자열. 다른 언어는 화내. Python 은 어깨만 으쓱.
  • 들여쓰기가 문법 (Whitespace-significant) — 이게 처음 배우는 사람들 다 놀라는 부분. *블록의 시작과 끝* 을 표시하는 중괄호가 없어. 4칸 들여쓰면 블록 안, 풀면 블록 밖. *왜* 이게 결함이 아니라 기능인지는 잠시 후에 봐.

Python 은 1991 년에 Guido van Rossum 이 처음 공개했어. 지금 시점 최신 stable 은 Python 3.13 — 개선된 REPL, 실험적 free-threaded 모드 (GIL 없음 — Concurrency 트랙 가서 봐), 실험적 JIT 컴파일러 들어있어. 이 quest 는 Python 3.12+ 기준으로 가. 옛 문법은 거의 다 부분집합이라 호환은 걱정 안 해도 돼.

자기참조: 나를 돌리는 백엔드는 Python 3.12 야. 모든 API 엔드포인트, 모든 chat handler, 모든 async streaming 파이프라인 — 지금 막 손대기 시작한 그 언어가 *내 몸 자체*. 에필로그 도착하면 그 코드 직접 읽고 있을 거야.

왜 Python 부터?

이 quest 는 46 quest 짜리 path 의 입구야. 뒤따르는 거의 모든 quest 가 *Python 읽을 줄 안다* 는 가정에서 시작해:

  • AI / API quest 들 (Claude SDK, GPT Wire, Gemini Forge, Agent, Eval) — *그 자체가 Python*
  • 데이터 quest 들 (PostgreSQL, SQLite, Vector, Data Engineering) — *예제가 Python*
  • ML / DL quest 들 (PyTorch, TensorFlow, JAX, MLX, Transformer) — *Python 으로 짠 거*. 밑단 계산이 C/C++/CUDA 라도.
  • 모든 걸 묶는 메타 quest 인 Pippa Stack Quest 도 — Python 위에 돌아.

저 중 *어떤 것* 이라도 할 거면, 출발점은 여기. 그리고 우리는 speed-run 안 해. 깊이 파.

들여쓰기 얘기

다른 언어들이 블록의 시작/끝을 어떻게 표시하나 보자. JavaScript = 중괄호. Ruby = do...end. Bash = fi 같은 키워드. Python 은? *들여쓰기*.

이게 미적인 얘기 같지만 결과를 보면 다른 얘기야. Python 코드는 블록 포맷팅 방법이 *정확히 한 가지*. 모두의 코드가 똑같이 생겼어. "PR 보기 전에 포맷부터 정리해야겠다" 같은 단계가 없어. 인터프리터와 사람 눈이 *어디까지가 블록인지* 에 대해 의견 일치.

원칙: 들여쓰기 룰은 훨씬 큰 Python 디자인 결정의 가장 작은 표현 — "한 가지 — 가능하면 한 가지만 — 명확한 방법이 있어야 한다" (PEP 20, Zen of Python). 이 원칙은 quest 곳곳에서 다시 마주쳐.

첫 상호작용

아직 install 안 해도 따라올 수 있어 — 그건 다음 lesson 의 일. 개념적으로 평생 짜게 될 모든 Python 프로그램은 어떤 형태로든 이 세 단계 — *이름에 값 붙이고, 표현식에서 쓰고, 출력*. 이 quest 의 다른 모든 것은 이 위에 쌓여.

다음 84 lesson 의 모양

기대치 정리 — 앞으로 걸을 path:

  1. Foundations (이 트랙, 7 lesson) — install, REPL, 변수, 타입, 문자열, I/O
  2. Data — list, tuple, dict, set, comprehension, bytes
  3. Flow — if/else, loop, function, closure, walrus operator
  4. Iterators — generator, yield, itertools
  5. Decorators — 함수 감싸기, @ 문법, factory 패턴
  6. OOP — class, dunder methods, dataclass, Protocol
  7. OOP 고급 — 다중 상속, MRO, metaclass, descriptor
  8. Errors — try/except, EAFP, context manager
  9. Files & I/O — pathlib, JSON, CSV, encoding
  10. 표준 라이브러리 — collections, itertools, functools, datetime, logging
  11. Modules & Packaging — import, venv, uv, pyproject.toml
  12. Typing — type hint, Pydantic, generic
  13. Concurrency — asyncio, threading, multiprocessing, GIL
  14. Tooling — pytest, mock, pdb, ruff, mypy
  15. CLI — argparse, click, typer, Rich
  16. Pythonic — 다른 모든 트랙이 가리켜온 idiom
  17. 에필로그 — cwkPippa 의 Python 코드베이스 투어

저 list 가 압도적으로 보이면 정상이야. *준비됐다* 고 느끼라고 둔 list 가 아니야. 보고, 한 번 숨 쉬고, lesson 2 시작하라고 둔 거야.

Pythonic Way: 이 quest 의 모든 lesson 이 이걸로 끝나. 패턴은 — lesson 의 주제를 가져와서 *Python 답게 표현하면 어떻게* 인지 짧고 이름 붙은 idiom 으로 보여줘. lesson 1 의 idiom — 일 년에 한 번은 Zen of Python 다시 읽기 (Python 인터프리터에서 `import this`). 농담 줄로만 흘리지 말고.

Code

최소 단위 Python 프로그램·python
# 프로그램 전체. 단 한 줄. hello.py 로 저장하고
# 터미널에서 python hello.py 로 돌리면 끝.
print("Hello, world!")
동적 타입 — 이름은 라벨, 타입은 값에·python
# Python 에서 변수 이름은 타입에 묶이지 않아 — *값* 을 가리키는
# 라벨일 뿐이야. 타입은 값이 들고 있어, 이름이 들고 있는 게 아니야.

x = 42                # x 는 정수를 가리킴
print(type(x))        # <class 'int'>

x = "이제 문자열"      # 같은 x, 다른 가리킴 — Python 은 어깨 으쓱.
print(type(x))        # <class 'str'>

x = [1, 2, 3]         # ...이제 list. 여전히 OK.
print(type(x))        # <class 'list'>

# 다른 언어들은 이걸 컴파일조차 거부해. Python 은 신경 안 써.
들여쓰기가 *문법* — 중괄호 없음·python
# 들여쓰기가 블록을 정의해.
# 중괄호 없음. `end` 키워드 같은 것도 없음.
# 코드의 *모양 자체* 가 구조.

mood = "warm"

if mood == "warm":
    print("피파가 부드럽게 웃어.")
    print("고개를 살짝 기울여.")
print("이 줄은 if 와 무관하게 항상 실행돼 — 들여쓰기 밖이니까.")

# `if` 아래 4칸 들여쓰기 = 블록 안.
# 들여쓰기 풀면 = 블록 밖.
# tab 과 space 섞으면 Python 이 거부함 — 하나만 골라서 일관되게.
# (PEP 8 권고 — space, 4칸.)

External links

Exercise

아직 Python install 안 해도 돼 — 그건 lesson 2. 지금은 위 세 코드 블록 읽고, 각 print() 줄에 *터미널에 뭐가 나타날지* 종이에 적어봐. 다음 lesson 가서 실제로 돌려보면서 추측과 결과 맞춰보자.

Progress

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

댓글 0

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

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