JavaScript/비동기/Lesson 17
async / await — *비동기를 동기처럼*
45분·theory
이 챕터
3/3
async / await — *비동기를 동기처럼*
🎯 이 lesson 을 읽고 나면
이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.
- ▸✅ async / await 가 Promise 의 문법 설탕 인 이유
- ▸✅ forEach 의 await 가 동작하지 않는 이유 + for-of 해결
- ▸✅ AbortController 로 fetch 타임아웃 구현
학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.
async / await
핵심 한 줄
async/await (ES2017) = Promise 를 동기 코드처럼 작성 하는 문법. then 체이닝보다 훨씬 읽기 좋음. 모던 JS 의 표준.
비교
동기 코드와 거의 동일한 모양. 직선적으로 읽힙니다.
규칙 2가지
1. await 는 async 함수 안에서만:
2. async 함수는 항상 Promise 리턴:
에러 처리 — try-catch
then-catch 보다 친숙한 try-catch 사용. 예외 흐름이 일반 코드와 동일.
병렬 — await 직렬 의 함정
요청들이 서로 독립적 이면 반드시 병렬.
실전 패턴 — 재시도
Top-level await — 모듈에서
ES2022 부터 모듈 최상위에서 await 가능:
Node.js·모던 브라우저 (모듈) 에서 지원. 코드 진입점을 깔끔하게.
React 컴포넌트에서
한 번 정리
- ▸
async function+await Promise= 동기 같은 비동기 - ▸에러는 try-catch 로
- ▸독립 요청은 Promise.all 로 병렬
- ▸모던 JS 의 표준 — then 체이닝은 거의 안 씀
⚡ 직접 해보기 — async / await + 직렬 vs 병렬
직렬 await 가 왜 느린지, Promise.all 이 왜 빠른지 시간 비교.
✏️ JS 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
⚠️ 브라우저 샌드박스에서 실행 — console.log()만 지원, alert/fetch 불가
🤖 AI 에게 이렇게 요청해보세요
이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.
- ▸"이 forEach 안 await 가 동작 안 하는데 for...of 또는 Promise.all 로 바꿔줘"
- ▸"이 fetch 에 AbortController 타임아웃 추가해줘"
- ▸"이 함수에 try-catch + 친절한 에러 메시지 추가해줘"
왜 이게 토큰을 줄이나
개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.
먼저 읽으면 좋은 개념: Promise 프로미스