Async/Await의 본질: 우리는 왜 '기다림'을 '멈춤'으로 착각하는가?
Async/Await의 본질: 우리는 왜 ‘기다림’을 ‘멈춤’으로 착각하는가? 많은 개발자가 await를 보면 “코드가 여기서 멈춘다"라고 직관적으로 이해합니다. 하지만 이는 논리적 흐름의 멈춤일 뿐, 물리적인 스레드가 멈추는 블로킹은 아닙니다. async/await는 동기 코드처럼 보이게 만들면서, 실제로는 실행 흐름을 나눠 코루틴처럼 동작합니다. 이 글은 JavaScript, Python, C#을 비교해 async/await가 어떻게 “동기처럼 보이는 비동기"를 만드는지 설명합니다. 1. 가장 큰 오해: 멈춤이 아니라 양보 await는 실행 흐름을 잠시 중단시키지만, 스레드 전체를 멈추지는 않습니다. 핵심은 다음입니다. await는 현재 함수의 실행 컨텍스트를 일시 중단한다. 제어권은 즉시 호출자나 이벤트 루프로 돌아간다. 작업이 끝나면 중단 지점부터 다시 이어서 실행된다. 비유로 말하면, 식당에서 진동벨을 받고 자리에 앉는 것과 같습니다. 나는 기다리지만, 카운터 앞을 막고 서 있지는 않습니다. ...