적용할 문제
blocking I/O in async에서 바꿀 결과와 유지할 기존 동작을 한 문장씩 적습니다. async function 안의 blocking file·network·CPU 작업은 event loop를 막으므로 async API나 제한된 executor로 분리해야 합니다.
선택의 기준
동시성 문제는 단일 성공으로 확인할 수 없습니다. 자원 획득 순서, transaction 범위, retry와 timeout을 그린 뒤 lock owner·waiter와 중복 요청 ID를 같은 시각으로 모읍니다. 현재 version의 공식 문서와 실제 설정을 확인하고 대표·경계·실패 사례를 준비합니다. py-spy/cProfile, tracemalloc, gc 통계, RSS, task와 file descriptor를 재현 입력과 함께 측정한다.
| 순서 | 할 일 |
|---|---|
| 1 | 수정 전 결과와 되돌릴 기준 저장 |
| 2 | 핵심 사실과 맞닿은 한 곳만 변경 |
| 3 | 같은 입력으로 수정 전후 비교 |
작은 적용과 확인
lock 순서를 일관되게 하고 critical section을 줄이며 DB 제약과 idempotency key로 최종 불변식을 지킵니다. retry에는 횟수 제한, backoff와 jitter를 두고 이미 반영됐을 가능성을 먼저 확인합니다. CPU와 I/O 작업을 구분하고 iterator, context manager, timeout, process·thread 선택을 측정 결과로 결정한다. 예상과 다르면 변경을 더 얹지 말고 처음 달라진 값으로 돌아갑니다. 입력 크기별 시간·메모리 복잡도, 장시간 RSS 기준선, 열린 자원과 취소 후 task를 확인한다. barrier를 사용한 동시 테스트와 실패 주입으로 중복 결과, 교착, lost update와 retry 폭풍이 없는지 검증합니다.
공식 문서와 적용 범위
문서의 기본값과 동작은 version에 따라 달라질 수 있습니다. 현재 Python 구현과 version, dependency, 입력 크기와 실행 환경에서 다시 확인합니다.