비동기 반복은 값의 도착 시점과 소비자의 처리 속도를 맞추는 계약이다

파일, 웹소켓, DB 커서는 모양은 달라도 next()가 Promise를 돌려주고 for await가 값을 하나씩 기다린다는 점이 같다.
생산자[Symbol.asyncIterator]()next(): Promise<IteratorResult<T>> 소비자value는 T로 좁혀지고 done은 반복 종료를 알린다. 중단루프의 break는 연결, 커서, 스트림 정리 지점을 함께 설계하게 만든다.
비동기 이터레이터 활용 계약표
대상 생산 값 소비 방식 설계 포인트
파일 스트림 AsyncGenerator<string>로 줄 단위 문자열을 낸다. 파일 전체를 메모리에 올리지 않고 준비된 줄만 처리한다. 읽기 오류와 파일 닫기를 반복 종료와 같이 본다.
웹소켓 AsyncIterable<Message>가 도착 순서대로 메시지를 준다. 루프 안에서 메시지를 처리하고 필요하면 중간에 멈춘다. 느린 소비자가 연결 버퍼를 밀어 올리지 않게 한다.
DB 커서 AsyncGenerator<Row[]>가 페이지 단위 결과를 낸다. 대량 결과를 작은 묶음으로 순차 처리한다. 커서 닫기, 트랜잭션 범위, 취소 신호를 함께 둔다.
작업 큐 비동기 작업 결과나 진행 이벤트를 순서대로 노출한다. 처리량을 루프 본문 속도로 자연스럽게 제한한다. 재시도, 실패 전파, 종료 신호를 타입에 드러낸다.
next Promise다음 값이 아직 없으면 대기 상태 자체가 계약이 된다.
for await루프 변수는 AsyncIterable<T>의 T로 추론된다.
Backpressure소비 속도가 생산자에게 압력으로 전달되도록 설계한다.
Cleanup중단과 예외가 자원 해제로 이어지는지 확인한다.