λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Javascript

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 비동기

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œ 언어이기 λ•Œλ¬Έμ— ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 μžˆλ‹€.

이전 μž‘μ—…μ΄ μ™„λ£Œλ˜μ–΄μ•Ό λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. μ΄λŸ¬ν•œ μ½”λ“œ 순차 싀행을 동기(Synchronous)라고 ν•œλ‹€.

κ·ΈλŸ¬λ‚˜ μž‘μ—…μ΄ 였래 κ±Έλ¦¬κ±°λ‚˜ 응닡이 λŠ¦μ–΄μ§€λŠ” κ²½μš°μ— 전체적인 μ„±λŠ₯에 영ν–₯을 쀄 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ μ„œλ²„μ— 데이터λ₯Ό μš”μ²­ν•˜κ³  응닡을 λ°›μ•„μ•Ό ν•˜λŠ” μž‘μ—…μ΄ μžˆλ‹€λ©΄, 응닡이 올 λ•ŒκΉŒμ§€ λŒ€κΈ°ν•΄μ•Ό ν•œλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž…λœ κ°œλ…μ΄ 비동기(Asynchronous)이닀.

λΉ„λ™κΈ°λŠ” νŠΉμ • μž‘μ—…μ˜ μ™„λ£Œλ₯Ό 기닀리지 μ•Šκ³  λ‹€λ₯Έ μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•  수 있게 ν•œλ‹€.

λΉ„λ™κΈ°λŠ” 메인 μŠ€λ ˆλ“œκ°€ μž‘μ—…μ„ λ‹€λ₯Έ 곳에 μΈκ°€ν•˜μ—¬ 처리되게 ν•˜κ³ , κ·Έ μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ 콜백 ν•¨μˆ˜λ₯Ό λ°›μ•„ μ‹€ν–‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ, μ‰½κ²Œ 말해 μž‘μ—…μ„ λ°±κ·ΈλΌμš΄λ“œμ— μš”μ²­ν•˜μ—¬ 처리되게 ν•˜μ—¬ λ©€ν‹°λ‘œ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” 것이닀.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œ 언어인데 μ–΄λ–»κ²Œ 비동기가 κ°€λŠ₯ν•œ κ²ƒμΌκΉŒ?

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” μ½œ μŠ€νƒ(Call Stack)은 μ‹±κΈ€ μŠ€λ ˆλ“œμ§€λ§Œ, μ„œλ²„μ—κ²Œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜κ±°λ‚˜ νŒŒμΌ μž…μΆœλ ₯ ν˜Ήμ€ νƒ€μ΄λ¨Έ λŒ€κΈ° μž‘업을 μ‹€ν–‰ν•˜λŠ” Web APIs λ“€μ€ λ©€ν‹° μŠ€λ ˆλ“œμ΄κΈ° λ•Œλ¬Έμ— λ™μ‹œ μž‘μ—… μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

Web APIλŠ” 타이머, λ„€νŠΈμ›Œν¬ μš”μ²­, 파일 μž…μΆœλ ₯, 이벀트 처리 λ“± λΈŒλΌμš°μ €μ—μ„œ μ œκ³΅ν•˜λŠ” λ‹€μ–‘ν•œ APIλ₯Ό ν¬κ΄„ν•˜λŠ” API의 총칭이닀. λΈŒλΌμš°μ €λ§ˆλ‹€ λ‹€λ₯΄κ² μ§€λ§Œ, 크둬 λΈŒλΌμš°μ € 일 경우 Web APIλŠ” λ©€ν‹° μŠ€λ ˆλ“œλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.

 

λ‹€λ§Œ μ„±λŠ₯ ν–₯상을 μœ„ν•΄ 비동기 처리λ₯Ό μ΄μš©ν•  λ•Œ μ£Όμ˜ν•΄μ•Ό ν•  점이 μžˆλ‹€. λΉ„λ™κΈ°λŠ” μš”μ²­ν•œ μž‘μ—…μ˜ μ™„λ£Œ μ—¬λΆ€λ₯Ό 기닀리지 μ•ŠκΈ° λ•Œλ¬Έμ— λ‹€μŒ μ‹€ν–‰ν•  μž‘μ—…μ΄ 이전에 μš”μ²­ν•œ μž‘μ—…μ˜ κ²°κ³Όκ°€ λ°˜λ“œμ‹œ ν•„μš”ν•  경우 λ¬Έμ œκ°€ 생긴닀.

λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Promise κ°μ²΄λŠ” μ΄λŸ¬ν•œ ν•œκ³„μ μ„ κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ 비동기 처리λ₯Ό μœ„ν•œ μ „μš© κ°μ²΄λ‘œμ„œ νƒ„μƒν•˜μ˜€λ‹€. PromiseλŠ” 비동기 μž‘μ—…μ˜ 성곡 λ˜λŠ” μ‹€νŒ¨μ™€ κ·Έ 결과값을 λ‚˜νƒ€λ‚΄λŠ” 객체이닀.

ν•˜μ§€λ§Œ ν”„λ‘œλ―ΈμŠ€λ„ μ™„λ²½ν•œ 해결책은 μ•„λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ Callback Hell이 μžˆλ“―μ΄ μ§€λ‚˜μΉœ then ν•Έλ“€λŸ¬ ν•¨μˆ˜μ˜ λ‚¨μš©μœΌλ‘œ μΈν•œ Promise Hell이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 즉, ν”„λ‘œλ―ΈμŠ€κ°€ μ—¬λŸ¬ 개 μ—°κ²°λ˜λ©΄ μ½”λ“œκ°€ κΈΈμ–΄μ§€κ³  λ³΅μž‘ν•΄μ§ˆ 수 μžˆλ‹€λŠ” 것이닀.

κ·Έλž˜μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” async/awaitλΌλŠ” λ¬Έλ²•이 λ˜ν•œ μΆ”κ°€λ˜μ—ˆλ‹€. async/awaitλŠ” ν”„λ‘œλ―ΈμŠ€λ₯Ό κΈ°λ°˜μœΌλ‘œ ν•˜μ§€λ§Œ, λ§ˆμΉ˜ λ™κΈ° μ½”λ“œμ²˜λŸΌ μž‘μ„±ν•  μˆ˜ μžˆκ²Œ ν•΄μ€€λ‹€. 

 

 

 

좜처:

 

🌐 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 핡심 '비동기' μ™„λ²½ 이해 ❗

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 동기와 비동기 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œ 언어이기 λ•Œλ¬Έμ— ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 μžˆλ‹€. 즉, 이전 μž‘μ—…μ΄ μ™„λ£Œλ˜μ–΄μ•Ό λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있게 λœλ‹€. μš°λ¦¬κ°€ ν”„

inpa.tistory.com