[FE - ConnecTo] DAY38 TILπŸ‘©πŸ»β€πŸ’»

JUNYΒ·2022λ…„ 9μ›” 1일
0

πŸ“šZeroBase ConnecTo Front-End

λͺ©λ‘ 보기
27/53
post-thumbnail

22.09.01 μ—¬λŸ¬ 자료λ₯Ό 찾아보며 κ³΅λΆ€ν•œ λ‚΄μš©λ“€μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€ 😊
ν”Όλ“œλ°±μ€ μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€! 🍊

타이머

  • setTimeout은 무슨 역할을 ν•˜λŠ”κ°€? setTimeout은 콜백 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŒ. ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€λŠ” 것은 νƒœμŠ€ν¬ νμ—μ„œ 콜 μŠ€νƒμœΌλ‘œ λ„˜κ²¨μ£ΌλŠ” 것을 μ˜λ―Έν•˜λŠ”λ°, 이 과정은 λΈŒλΌμš°μ €μ˜ 이벀트 루프가 μˆ˜ν–‰ν•¨. λΈŒλΌμš°μ €μ—κ²Œ 두 번째 인수(μ‹œκ°„)을 μ „λ‹¬ν•˜λ©΄μ„œ, κ·Έ μ‹œκ°„μ΄ κ²½κ³Όν•˜λ©΄ 첫 번째 인수(콜백 ν•¨μˆ˜)λ₯Ό ν˜ΈμΆœν•΄λ‹¬λΌκ³  μ „λ‹¬ν•˜κ³  μ’…λ£Œλ¨
  • λΈŒλΌμš°μ €λŠ” μ‹œκ°„μ˜ κ²½κ³Όλ₯Ό μ–΄λ–»κ²Œ νŒλ‹¨ν•˜λŠ”κ°€? β€˜ν˜„μž¬ μ‹œκ°„ -Β setTimeout이 ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μ‹œκ°„β€™μœΌλ‘œ νŒλ‹¨ν•¨.
  • setTimeout이 지연 μ‹œκ°„ λ™μ•ˆ 콜 μŠ€νƒμ— λ“€μ–΄κ°€ 있으면 지연 μ‹œκ°„ λ™μ•ˆ 아무것도 ν•˜μ§€ λͺ»ν•˜λŠ” λΈ”λ‘œν‚Ή λ°œμƒ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄(비동기λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄) ν˜ΈμΆœμ„ μœ„μž„ν•˜λŠ” 것

비동기

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€ μŠ€λ ˆλ“œμΈκ°€? μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ 콜 μŠ€νƒμ΄ μ‹±κΈ€ μŠ€λ ˆλ“œ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” 것이고, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진 + Web APIκΉŒμ§€ μ•„μš°λ₯΄λŠ” κ°œλ…μž„.
  • κ·Έλ ‡λ‹€λ©΄, λ©€ν‹° μŠ€λ ˆλ“œλŠ” 무쑰건 쒋은가? λ©€ν‹° μŠ€λ ˆλ“œλΌλ©΄ 각각의 콜 μŠ€νƒμ΄ ν•¨μˆ˜λ₯Ό μ²˜λ¦¬ν•  μˆ˜λŠ” μžˆμ§€λ§Œ, λ³€μˆ˜ 등을 μž¬ν• λ‹Ήν•  λ•Œ 처리 μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•ŠμŒ. κ·Έλž˜μ„œ μ΄λ ‡κ²Œ λ™μž‘ν•˜λ©΄ 코딩이 μ–΄λ €μ›Œμ§€κ³ , λ¬Έμ œκ°€ λ°œμƒν•  수 있음. κ·ΈλŸ¬λ‚˜ λ™μ‹œμ„±μ˜ 확보λ₯Ό 포기할 수 μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μ‹±κΈ€ μŠ€λ ˆλ“œ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λ˜, 비동기λ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ ν•œ κ²ƒμž„.
  • λ™μ‹œμ„±μ˜ 확보 μ‹œκ°„μ„ μž¬λŠ” 일을(타이머) λΈŒλΌμš°μ €κ°€ 도와주어야 함. 이λ₯Ό μœ„ν•΄, λΈŒλΌμš°μ € λ‚΄λΆ€μ˜ μ‹œκ°„μ„ 잴 수 μžˆλŠ” λ‘œμ§μ„ ν†΅ν•΄μ„œ ν•΄κ²°ν•  수 있음.
  • setTimeout의 지연 μ‹œκ°„μ€ μš°λ¦¬κ°€ λˆˆμ— λ³΄μ—¬μ§€λŠ” μ‹œκ°„κ³Ό 같은가? Nope! μ˜€μ°¨κ°€ λ°œμƒν•¨. νƒœμŠ€ν¬ 큐둜 λ³΄λ‚΄μ£ΌλŠ” μ‹œκ°„μ΄ 또 λ”°λ‘œ 있기 λ•Œλ¬Έμ—, 지연 μ‹œκ°„μ„ 1초둜 섀정해도 μ •ν™•νžˆ 1초 후에 콜백 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ§€λŠ” μ•ŠμŒ.
  • 비동기 처리λ₯Ό μ–Έμ œ ν•˜λŠ”κ°€? μ„œλ²„μ™€μ˜ 톡신 μ‹œ μ‚¬μš©ν•¨!
  • μ„œλ²„μ™€ λΈŒλΌμš°μ €μ˜ 톡신 ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €κ°€)κ°€ μ„œλ²„μ— λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜κ³  μ„œλ²„λ₯Ό 톡해 응닡 λ°›λŠ” κ³Όμ •μœΌλ‘œ, 이 μš”μ²­μ— λŒ€ν•œ κ·œμ•½μ΄ HTTPμž„!
  • HTTPλž€? GET, POST, PUT, PATCH, DELETE와 같은 μš”μ²­ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ λ¦¬μ†ŒμŠ€λ₯Ό 달라고 URL을 톡해 μš”μ²­ν•˜λŠ”λ°, 이 URL에 λŒ€ν•œ 약속이 λ°”λ‘œ RESTμž„!
  • RESTλ₯Ό μ§€μΌœμ•Ό ν•˜λŠ” 이유
    1. HTTPλ₯Ό λ™μΌν•œ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄
    2. μ»¨λ²€μ…˜μ„ 지킀기 μœ„ν•΄
  • REST APIλ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ” 이유 μ„œλ²„κ°€ μ–Έμ œ λ§Œλ“€μ–΄μ§ˆ λ•ŒκΉŒμ§€ 기닀릴 수 μ—†κΈ° λ•Œλ¬Έμ— κ°„λ‹¨ν•œ fake μ„œλ²„λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œ!
  • μ„œλ²„μ™€μ˜ 톡신 기반 Promise,Β fetchΒ λ“± 무엇을 μ¨μ„œ 비동기λ₯Ό μ²˜λ¦¬ν•˜λ“  κ·Έ 근본은 XMLHttpRequestμž„ β†’ ν˜„μž¬λŠ”Β JSON을 μ‚¬μš©ν•˜μ—¬ 톡신을 ν•˜μ§€λ§Œ, μ˜ˆμ „μ—λŠ”Β XML을 μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— 이름이 XMLHttpRequest
    인 κ²ƒμž„.
  • XMLHttpRequest λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•œ 호슀트 객체
  • sendΒ λ©”μ„œλ“œκ°€ ν•„μš”ν•œ 이유? νŽ˜μ΄λ‘œλ“œλ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œ
  • GET λ©”μ„œλ“œμ˜ νŠΉμ§• 무엇을 μ‘°νšŒν• μ§€ μ•Œλ €μ£Όμ–΄μ•Ό ν•˜λ©°, GET λ©”μ„œλ“œλŠ” νŽ˜μ΄λ‘œλ“œλ₯Ό 전달해도 λ¬΄μ‹œλ¨
  • 콜백 ν—¬μ΄λž€? HTTP μš”μ²­ μ‹œ μ „λ‹¬ν•˜λŠ” 콜백 μ•ˆμ—μ„œ 또 HTTP μš”μ²­μ„ ν•˜λŠ” 경우 κ·Έ μ•ˆμ— 또 콜백이 μ€‘μ²©λ˜λŠ” ν˜„μƒμ΄ 많이 λ°œμƒν•˜λŠ” 것
  • 비동기 ν•¨μˆ˜μ˜ 콜백 νŒ¨ν„΄μ˜ 문제점? ν•¨μˆ˜μ˜ λ°˜ν™˜ 값은 Callerκ°€ 받을 수 있음, 즉 λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄ 받을 수 μ—†μŒ. 이벀트 ν•Έλ“€λŸ¬λŠ” μš°λ¦¬κ°€ λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•  수 μ—†κ³ , λΈŒλΌμš°μ €κ°€ ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— λ°˜ν™˜ 값을 받을 수 μ—†μŒ
  • 가독성 μΈ‘λ©΄μ—μ„œ, 비동기λ₯Ό λ™κΈ°μ²˜λŸΌ μ‚¬μš©ν•˜κ³ μž 함.

ν”„λ‘œλ―ΈμŠ€

비동기 처리의 μƒνƒœ 정보와 κ²°κ³Ό 정보λ₯Ό 가지고 μžˆλŠ” κ°μ²΄λ‘œμ„œ, 콜백 헬을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ 보완 μˆ˜λ‹¨μœΌλ‘œ μ‚¬μš©ν•¨.

μƒμ„±μž ν•¨μˆ˜λ‘œ ν”„λ‘œλ―ΈμŠ€ 객체λ₯Ό λ§Œλ“€κ³ , κ·Έ μ•ˆμ˜ ν•¨μˆ˜ λ‘œμ§μ—λ‹€ 비동기λ₯Ό μ‚¬μš©ν•¨!

  • resolveΒ ν•¨μˆ˜κ°€ ν•˜λŠ” 일 ν”„λ‘œλ―ΈμŠ€ 객체의 μƒνƒœ 정보λ₯ΌΒ fullfilled, λ‚΄λΆ€ 슬둯인 value에 전달받은 인수 할당함
  • rejectΒ ν•¨μˆ˜κ°€ ν•˜λŠ” 일 ν”„λ‘œλ―ΈμŠ€ 객체의 μƒνƒœ 정보λ₯ΌΒ rejected, λ‚΄λΆ€ 슬둯인 value에 전달받은 인수 할당함
  • resolve와 rejectΒ μ‚¬μš©ν•˜μ—¬ 콜백 ν•¨μˆ˜ μ‚¬μš©ν•˜μ§€ μ•Šκ³ , ν”„λ‘œλ―ΈμŠ€ 객체λ₯Ό λ°˜ν™˜ν•  수 있음 μ›λž˜ λ¦¬ν„΄ν•˜κ³  μ‹Άμ—ˆλ˜ 것은 HTTP μš”μ²­μ˜ 데이터인 responseΒ κ°’μž„
  • 후속 처리 λ©”μ„œλ“œ λ°˜ν™˜ν•˜λŠ”Β response 값을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ λ©”μ„œλ“œλ‘œ,Β then,Β catch,Β finallyΒ μ‚¬μš©ν•  수 있음
  • then의 μ—­ν• ? ν”„λ‘œλ―ΈμŠ€ 객체의 λ‚΄λΆ€ μƒνƒœκ°€Β fullfilledΒ λ˜μ—ˆμ„ λ•Œ 인수둜 μ „λ‹¬ν•œ 콜백 ν•¨μˆ˜ 호좜, ν˜ΈμΆœν•  λ•ŒΒ resolve의 인수둜 μ „λ‹¬ν•œ 값이 λ„˜μ–΄μ˜΄(ν”„λ‘œλ―ΈμŠ€ 객체의 value κ°’)
  • catch의 μ—­ν• ? ν”„λ‘œλ―ΈμŠ€ 객체의 λ‚΄λΆ€ μƒνƒœκ°€Β rejectedΒ λ˜μ—ˆμ„ λ•Œ 인수둜 μ „λ‹¬ν•œ 콜백 ν•¨μˆ˜ 호좜, ν˜ΈμΆœν•  λ•ŒΒ reject의 인수둜 μ „λ‹¬ν•œ 값이 λ„˜μ–΄μ˜΄! κ·Έλž˜μ„œ 항상 μ—λŸ¬λ₯Ό 전달할 수 μžˆκ²Œλ” μ—λŸ¬λ₯Ό μƒμ„±ν•˜μ—¬ μ „λ‹¬ν•˜λŠ” 것이 λ°”λžŒμ§ν•¨
    (λ¬Έμžμ—΄, 숫자 λ“±μœΌλ‘œ 일관성 μ—†κ²Œ μ‚¬μš©ν•˜μ§€ 말 것)

πŸ’‘ ν”„λ‘œλ―ΈμŠ€ μ‚¬μš©μ˜ ꢁ극적 의의

순차적으둜 λ©”μ„œλ“œλ₯Ό 체이닝할 수 μžˆλ‹€λŠ” μž₯점이 있음.

즉, μ—λŸ¬ 처리λ₯Ό ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆμ§€λ§Œ, ν”„λ‘œλ―ΈμŠ€λ„ 가독성이 μ’‹μ§€λ§Œμ€ μ•ŠμŒ


μ œλ„ˆλ ˆμ΄ν„°

μ΄ν„°λŸ¬λΈ”μ˜ κ΅¬ν˜„μ„ κ°„μ†Œν™”ν•˜κΈ° μœ„ν•œ μš©λ„μ΄λ©°, 많이 쓰이지 μ•ŠμŒ!


async/await

  • asyncΒ ν•¨μˆ˜μ—μ„œλŠ”Β awaitΒ ν‚€μ›Œλ“œλ₯Ό 톡해 λ°˜ν™˜ κ°’λ§Œ λ°˜ν™˜ν•΄μ•Ό 함
  • asyncΒ ν•¨μˆ˜κ°€ μ™ΈλΆ€ μƒνƒœμ™€ μƒν˜Έμž‘μš©ν•˜λ €λ©΄ μ œλ„ˆλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•¨
  • awaitΒ ν‚€μ›Œλ“œ λ’€μ—λŠ” 항상 ν”„λ‘œλ―ΈμŠ€ 객체가 μœ„μΉ˜ν•΄μ•Ό 함
  • λͺ¨λ“ˆμΈ 경우, awaitλŠ” 항상 asyncΒ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•΄μ•Ό 함 λ°–μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ λ§Œλ“€λ €λ©΄ μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ‘œ κ°μ‹Έμ„œΒ Β asyncΒ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•΄μ•Ό 함
  • awaitλ₯Ό μ‚¬μš©ν•˜λ©΄ 전톡적인 μ½”λ”© λ°©μ‹μ—μ„œ 크게 λ²—μ–΄λ‚˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 가독성이 μ’‹μŒ awaitΒ λ’€μ—λŠ”Β resolveΒ μ²˜λ¦¬ν–ˆμ„ λ•Œμ˜ κ²°κ³Ό 값이 ν”„λ‘œλ―ΈμŠ€ κ°μ²΄λ‘œμ„œ μ „λ‹¬λ˜λŠ” 것이고, catch ꡬ문의 λ§€κ°œλ³€μˆ˜λ‘œΒ rejectΒ μ²˜λ¦¬ν–ˆμ„ λ•Œμ˜ κ²°κ³Ό κ°’(μ—λŸ¬)이 전달됨!

μ—λŸ¬ 처리의 μ€‘μš”μ„±

μ—λŸ¬λŠ” μ–΄λ–»κ²Œλ“  λ°œμƒν•  μˆ˜λ°–μ— μ—†κ³ , 이λ₯Ό 빨리 κ³ μΉ˜λŠ” 것이 ν•΄κ²°μ±…μž„. 그러기 μœ„ν•΄μ„œλŠ” μ—λŸ¬λ₯Ό 빨리 감지해야 함!

λ°œκ²¬ν•œ μ—λŸ¬λŠ” μ„œλ²„μ˜ 둜그 νŒŒμΌμ— 적어두어야 함. μ‹€λ¬΄μ—μ„œ μ—λŸ¬ μ²˜λ¦¬λŠ” ꡉμž₯히 신경써야 ν•˜λŠ” λΆ€λΆ„μž„.

  • μ—λŸ¬λ₯Ό μ–΄λ””μ„œ μ²˜λ¦¬ν•  것인가? (1) μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” 지점(λ°œμƒ 원인)μ—μ„œ 처리 μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” μ§€μ μ—μ„œ μ²˜λ¦¬ν•˜λ €λ©΄ κ·Έ λ°œμƒ μ§€μ λ§ˆλ‹€ μ—λŸ¬ 처리 λ‘œμ§μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” 단점이 있음. (2) 호좜된 지점(μƒμœ„ 레벨)μ—μ„œ μ—λŸ¬ 처리 λ°œμƒ μ›μΈμ—μ„œ μ²˜λ¦¬ν•˜λ©΄ λ°œμƒν•˜λŠ” 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 보편적으둜 μƒμœ„ λ ˆλ²¨μ—μ„œ μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•¨.

μƒμœ„ λ ˆλ²¨μ—μ„œ μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” Caller(호좜자)둜 μ—λŸ¬κ°€ μ „νŒŒλ˜μ–΄μ•Ό 함

μš°λ¦¬κ°€ ν˜ΈμΆœν–ˆμœΌλ©΄ μš°λ¦¬κ°€ ν˜ΈμΆœν•œ μͺ½μœΌλ‘œ μ—λŸ¬κ°€ μ „νŒŒλ˜μ§€λ§Œ, μš°λ¦¬κ°€ ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ” 비동기 ν•¨μˆ˜ 같은 κ²½μš°λŠ” μ—λŸ¬κ°€ μ†Œμ‹€λ¨!

profile
μ„±μž₯ν•˜λŠ” 개발자🌼

0개의 λŒ“κΈ€