Front-end/JS

22.02.17 λ©΄μ ‘ Q & A

ciocio 2022. 2. 18. 14:09

πŸ“Œ  μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동기적 언어인가 비동기적 언어인가 ?

πŸ“Œ  μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ "동기"와 "비동기"에 λŒ€ν•΄ μ•„λŠ”λŒ€λ‘œ 말해보기

 

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동기적 μ–Έμ–΄μž…λ‹ˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 엔진이 μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ—, μ½”λ“œλ₯Ό μˆœμ„œλŒ€λ‘œ 읽을 μˆ˜λ°–μ— μ—†μŠ΅λ‹ˆλ‹€.
동기적인 μ–Έμ–΄μ˜ λ¬Έμ œμ μ€, ν•΄λ‹Ή νƒœμŠ€ν¬λ₯Ό 끝내기 μ „κΉŒμ§€λŠ” 아무것도 μ²˜λ¦¬ν•  수 μ—†λ‹€λŠ” μ μž…λ‹ˆλ‹€.
μΌλ‘€λ‘œ 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” μž‘μ—…κ³Ό UI μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§ μž‘μ—…μ΄ μ°¨λ‘€λ‘œ μ§„ν–‰λœλ‹€κ³  ν–ˆμ„ λ•Œ,
데이터가 λͺ¨λ‘ 뢈러였기 μ „κΉŒμ§€ 화면이 ν•˜μ–—κ²Œ λœ¨λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ°˜λŒ€λ‘œ UI μ»΄ν¬λ„ŒνŠΈλ₯Ό λ¨Όμ € λ Œλ”λ§ν•˜λ”λΌλ„ μ»΄ν¬λ„ŒνŠΈμ— ν• λ‹Ήλœ μ΄λ²€νŠΈκ°€ λ™μž‘λ˜μ§€ μ•ŠλŠ” 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λΈŒλΌμš°μ € 엔진에 λ‚΄μž₯된 비동기 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
fetch( ) λ‚˜ setTimeout( ) 등이 λΉ„λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
λΉ„λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•œλ‹€λŠ” μ˜λ―ΈλŠ”, λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œμ™€ ν•¨κ»˜ 진행될 수 μžˆμŒμ„ λœ»ν•©λ‹ˆλ‹€.

순차적으둜 μ½”λ“œλ₯Ό 읽닀 비동기 ν•¨μˆ˜λ₯Ό λ§Œλ‚˜λ©΄, 비동기 ν•¨μˆ˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” 둜직으둜 λ„˜κΈ΄ ν›„
λ‹€μ‹œ λ™κΈ°μ μœΌλ‘œ μ½”λ“œλ₯Ό μ½μ–΄κ°‘λ‹ˆλ‹€. (μ œκ°€ μ•Œκ³  μžˆλŠ” 동기와 λΉ„λ™κΈ°λŠ” μ—¬κΈ°κΉŒμ§€μž…λ‹ˆλ‹€.)

 

-> 아무것도 보지 μ•Šκ³  혼자 μŠμœΌλ©΄μ„œ 써봀닀. 쳐낼 건 쳐내고 λ¬Έμž₯ 닀듬기.

 

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동기적인 μ–Έμ–΄μž…λ‹ˆλ‹€. 
μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 단 ν•˜λ‚˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ„ κ°–κ³ , ν•œλ²ˆμ— ν•˜λ‚˜μ˜ νƒœμŠ€ν¬λ§Œ μˆ˜ν–‰ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
ν˜„μž¬ μ‹€ν–‰ 쀑인 νƒœμŠ€ν¬κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ λ‹€μŒ νƒœμŠ€ν¬κ°€ λŒ€κΈ°ν•˜λŠ” 방식을 "동기 처리"라고 ν•©λ‹ˆλ‹€.

그런데 μ΄λŠ”, μ„ ν–‰λœ νƒœμŠ€ν¬κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ 이후 νƒœμŠ€ν¬λ“€μ΄ λΈ”λ‘œν‚Ήλœλ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.
이λ₯Ό ν•΄κ²°ν•˜κ³ μž λ‚˜μ˜¨ κ°œλ…μ΄ "비동기 처리"μž…λ‹ˆλ‹€.
ν˜„μž¬ 싀행쀑인 νƒœμŠ€ν¬κ°€ μ’…λ£Œλ˜μ§€ μ•Šμ€ μƒνƒœμ—¬λ„ λ‹€μŒ νƒœμŠ€ν¬λ₯Ό κ³§λ°”λ‘œ μ‹€ν–‰ν•˜λŠ” 방식을 "비동기 처리"라고 ν•©λ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 비동기 μ²˜λ¦¬λŠ” λΈŒλΌμš°μ € 엔진이 λ•μŠ΅λ‹ˆλ‹€.
μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„κ³Ό 달리
λΈŒλΌμš°μ €λŠ” λ©€ν‹° μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— 비동기 처리λ₯Ό λ„μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€ν–‰μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ λΈŒλΌμš°μ €μ— λ‚΄μž₯된 비동기 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄,
λΈŒλΌμš°μ €μ— λ‚΄μž₯된 νƒœμŠ€ν¬ 큐에 μΌμ‹œμ μœΌλ‘œ μ €μž₯λ©λ‹ˆλ‹€.
λΈŒλΌμš°μ €μ˜ 이벀트 λ£¨ν”„λŠ” μ‹€ν–‰μ»¨ν…μŠ€νŠΈ μŠ€νƒμ΄ λΉ„μ›Œμ§μ„ 감지해 νƒœμŠ€ν¬ 큐에 μ €μž₯된 ν•¨μˆ˜λ“€μ„ μ°¨λ‘€λ‘œ μ‹€ν–‰μ‹œν‚΅λ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•˜μ§€λ§Œ, λ°μ΄ν„°μ˜ λΈ”λ‘œν‚Ήμ„ λ§‰μœΌλ©΄μ„œ λ™μž‘ν•  수 μžˆλŠ” μ΄μœ μž…λ‹ˆλ‹€.

 

-> μ™Έμš°μ§„ 말고 νλ¦„λ§Œ κ°€μ Έκ°€κΈ°.

 

πŸ“  κ³Όκ±° ν•™μŠ΅ λ‚΄μš© 볡슡

 

2021.09.06 - [Front-end/JS] - μžλ°”μŠ€ν¬λ¦½νŠΈ 비동기 ν”„λ‘œκ·Έλž˜λ° Asynchronous Programming

 

μžλ°”μŠ€ν¬λ¦½νŠΈ 비동기 ν”„λ‘œκ·Έλž˜λ° Asynchronous Programming

비동기 ν”„λ‘œκ·Έλž˜λ° 곡뢀 전에 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ λ™μž‘ 원리인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ κ°œλ…λΆ€ν„° 작고 λ“€μ–΄κ°€λ©΄ μ’‹κ² λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ Execution Context λœ―μ–΄ 보기 πŸ“Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 곡뢀해야

code-designer.tistory.com

 

λ°˜μ‘ν˜•