반복 프로토콜의 async 사촌
일반 반복 — __iter__ + __next__. async 반복 — __aiter__ + __anext__. 차이점은 __anext__ 가 coroutine — 다음 값 만들기 전에 뭔가 await 가능. consumer 쪽은 async for x in stream:. 이 프로토콜이 streaming 응답, async DB 커서, websocket 메시지 루프 — 각 값 만드는 데 I/O 가 필요한 모든 거 동력.
Async generator — 쉬운 길
일반 generator 가 클래스 기반 iterator 를 대부분 대체하듯, async generator 가 클래스 기반 async iterator 를 대부분 대체. async def 함수에 yield 사용. 함수가 async generator 가 됨. async for 가 소비. 각 yield 전에 await 가능. cwkPippa 의 어댑터들이 이 패턴 — 청크가 네트워크로 들어와, 처리되고, yield 로 stream out.
Async 컴프리헨션
[x async for x in stream] — async list 컴프리헨션. (x async for x in stream) — async generator expression. 둘 다 *오직* async def 안에서만. 이미 async 컨텍스트면 편리.
async for X, async iterable 에 for X. 에러 메시지 명확 ("not async iterable" / "not iterable") — 프로토콜 알면 디코딩 시간 절약.
실전 코드에 어디 나오나
웹 프레임워크의 응답 청크 streaming. 데이터베이스 커서가 row 도착 즉시 yield. AI SDK (Claude Agent SDK 같은) 가 토큰, 도구 호출, 라이프사이클 이벤트 yield. WebSocket 메시지 루프. "나타나는 즉시 각 항목 처리" 라고 말할 만한 모든 곳. concurrency 트랙이 asyncio 깊이 다룸 — 이 lesson 은 반복 모양만.