비동기 프로그래밍이란
비동기 프로그래밍은 오래 걸리는 작업을 기다리지 않고 다른 작업을 진행하는 방식입니다. 40년간 다양한 동시성 모델을 경험한 저로서는 비동기 프로그래밍이 현대 애플리케이션의 필수라고 확신합니다. 네트워크 요청, 파일 I/O, 데이터베이스 쿼리 등에서 비동기가 활용됩니다. 동기 방식으로는 사용자 경험과 성능이 저하됩니다.
콜백(Callback)
콜백은 비동기의 가장 기본적인 형태입니다. 작업 완료 후 호출될 함수를 전달합니다. 하지만 콜백이 중첩되면 '콜백 지옥(Callback Hell)'이 발생합니다. 코드가 오른쪽으로 깊이 들여쓰기되어 읽기 어렵습니다. 에러 처리가 복잡해집니다. 이를 해결하기 위해 Promise가 등장했습니다.
Promise
Promise는 미래에 완료될 작업을 나타내는 객체입니다. 상태: pending(대기), fulfilled(이행), rejected(거부). then()으로 성공 시 처리, catch()로 에러 처리를 합니다. 체이닝으로 콜백 지옥을 피합니다. Promise.all()로 여러 비동기 작업을 병렬로 실행합니다. Promise.race()로 가장 빨리 완료되는 것을 받습니다.
async/await
async/await는 Promise를 더 읽기 쉽게 만드는 문법입니다. async 함수는 항상 Promise를 반환합니다. await는 Promise가 완료될 때까지 기다립니다. 동기 코드처럼 읽히지만 비동기로 동작합니다. try-catch로 에러를 처리합니다. 반복문에서 순차 실행과 병렬 실행을 구분하세요.
주의사항과 모범 사례
await를 과도하게 사용하면 순차 실행이 되어 느려집니다. 독립적인 작업은 Promise.all()로 병렬화합니다. 에러 핸들링을 빠뜨리지 마세요. unhandledRejection 에러가 발생합니다. 타임아웃을 설정하여 무한 대기를 방지합니다. 비동기 코드의 디버깅은 스택 트레이스가 끊겨 어려울 수 있습니다. 로깅을 충분히 남깁니다.
댓글
0