개발 지식/WEB 지식

🌐 μ›Ήμ˜ 비동기(Async) / 동기(Sync) 톡신 정리

인파_ 2021. 10. 21. 13:14

비동기-동기

μ›Ήμ—μ„œμ˜ 비동기와 동기

μ›Ή κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ 비동기(Async)와 동기(Sync)λΌλŠ” μš©μ–΄λ₯Ό 자주 μ ‘ν•˜κ²Œ 될 것이닀. 이 두 μš©μ–΄λŠ” μ›Ήμ—μ„œ 데이터λ₯Ό μ£Όκ³ λ°›λŠ” 방식을 μ„€λͺ…ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ”λ°, 동기(Sync)λŠ” μš”μ²­κ³Ό 응닡이 λ™μ‹œμ— μΌμ–΄λ‚œλ‹€λŠ” 뜻이고, 비동기(Async)λŠ” μš”μ²­κ³Ό 응닡이 λ™μ‹œμ— μΌμ–΄λ‚˜μ§€ μ•Šκ³  λ‚˜μ€‘μ— μ‘λ‹΅ν•˜λŠ” 것을 λ§ν•œλ‹€.

비동기-동기

κ·Έλ ‡λ‹€λ©΄ μ™œ μ›Ήμ—μ„œλŠ” 비동기와 λ™κΈ°λΌλŠ” 방식을 μ‚¬μš©ν•˜λŠ” 걸까? 그리고 이 두 방식은 μ–΄λ–€ μž₯단점이 있고, μ–΄λ–€ μƒν™©μ—μ„œ μ μ ˆν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμ„κΉŒ? 


​동기 (Sync)

동기(Sync) 톡신은 μ›ΉνŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄μ„œ 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” 방식이라고 보면 λœλ‹€. 예λ₯Ό λ“€μ–΄, 넀이버 λ©”μΌμ—μ„œ μ™Όμͺ½ μ‚¬μ΄λ“œλ°”μ— λ³΄λ‚Έλ©”μΌν•¨μ—μ„œ λ°›μ€λ©”μΌν•¨μœΌλ‘œ λ°”κΎΈλ©΄ 메일 리슀트 ν™”λ©΄ 전체가 λ‹€μ‹œ λ‘œλ”©λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

Sync

동기(Sync) ν†΅μ‹ μ˜ κ°€μž₯ λŒ€ν‘œμ μΈ μ˜ˆμ‹œκ°€ 폼(Form) μ œμΆœμ΄λ‹€. 폼(Form)은 μ›ΉνŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›μ•„ μ„œλ²„μ— μ „μ†‘ν•˜λŠ” μ—­ν• ν•˜λŠ”λ°, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 폼(Form)을 μ„œλ²„μ— μ œμΆœν•˜λ©΄ μ„œλ²„λ‘œλΆ€ν„° μƒˆλ‘œμš΄ μ›ΉνŽ˜μ΄μ§€λ₯Ό λ°›μ•„μ„œ 화면에 ν‘œμ‹œν•˜κ²Œ λœλ‹€.

Sync

μ΄λ ‡κ²Œ μ›ΉνŽ˜μ΄μ§€μ˜ 전체λ₯Ό κ°±μ‹ ν•  수 있게 ν•΄μ£ΌλŠ” 기술이 λ°”λ‘œ 동기(Sync) 톡신이닀.

 

동기 ν†΅μ‹ μ˜ μž₯점

  • 동기(Sync) 톡신은 비동기(Async) 톡신보닀 μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ΄ν•΄ν•˜λŠ” 것이 쉽닀.
  • μš”μ²­κ³Ό 응닡이 순차적으둜 이루어지기 λ•Œλ¬Έμ— μ½”λ“œμ˜ κ°„κ²°μ„±κ³Ό 직관성을 μœ μ§€ν•  수 μžˆλ‹€.
  • 동기(Sync) 톡신은 μš”μ²­μ„ 보낸 후에 응닡을 λ°›μ•„μ•Ό λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μš”μ²­κ³Ό μ‘λ‹΅μ˜ μˆœμ„œλ₯Ό 보μž₯ν•  수 μžˆλ‹€. 예λ₯Όλ“€μ–΄ A와 BλΌλŠ” 두 개의 μš”μ²­μ„ λ³΄λƒˆμœΌλ©΄, λ°˜λ“œμ‹œ A의 응닡이 λ¨Όμ € λ„μ°©ν•˜κ³  B의 응닡이 λ‚˜μ€‘μ— λ„μ°©ν•œλ‹€.
  • 동기(Sync) 톡신은 μš”μ²­κ³Ό 응닡이 μ—°κ²°λ˜μ–΄ 있기 λ•Œλ¬Έμ—, μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ μ—λŸ¬μ— λŒ€ν•œ μ²˜λ¦¬κ°€ μ‰¬μšΈ 수 μžˆλ‹€

Sync

 

동기 ν†΅μ‹ μ˜ 단점

  • 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ”©ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„μ™€μ˜ ν†΅μ‹ λŸ‰μ΄ λ§Žμ•„μ§€κ³ , μžμ›κ³Ό μ‹œκ°„μ΄ 낭비될 수 μžˆμ–΄, μ›ΉνŽ˜μ΄μ§€μ˜ 속도와 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆλ‹€. 
  • λ”°λΌμ„œ 화면이 κΉœλΉ‘κ±°λ¦¬κ±°λ‚˜ λ©ˆμΆ”λŠ” ν˜„μƒμ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ λΆˆνŽΈν•¨μ„ 느껴 μ‚¬μš©μž κ²½ν—˜μ΄ λ–¨μ–΄μ§ˆ 수 μžˆλ‹€. 
  • μš”μ²­κ³Ό 응닡이 λ™μ‹œμ— μΌμ–΄λ‚˜μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μš”μ²­μ„ 보낸 ν›„μ—λŠ” λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 μ—†λ‹€. 예λ₯Ό λ“€μ–΄, 넀이버 λ©”μΌμ—μ„œ 메일을 λ³΄λ‚΄λŠ” λ™μ•ˆ λ‹€λ₯Έ 메일을 μ½κ±°λ‚˜ μ“Έ 수 μ—†λ‹€.

비동기 (Async)

비동기(Async) 톡신은 동기(Sync)의 λ°˜λŒ“λ§λ‘œ, μ›ΉνŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šκ³ λ„ 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” 방식이닀. 예λ₯Ό λ“€μ–΄, 넀이버 λΈ”λ‘œκ·Έλ‚˜ μΉ΄νŽ˜μ—μ„œ λŒ“κΈ€μ„ μž‘μ„±ν•˜κ³  μž‘μ„± λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ νŽ˜μ΄μ§€ 전체가 μž¬λ‘œλ“œ λ˜μ§€ μ•Šκ³  λŒ“κΈ€ μ˜μ—­ λΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈ λ˜μ–΄ λŒ“κΈ€μ΄ μ μš©λ¨μ„ λ³Ό 수 μžˆλ‹€. 

Async

μ΄λ ‡κ²Œ μ›ΉνŽ˜μ΄μ§€μ˜ μΌλΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈν•  수 있게 ν•΄μ£ΌλŠ” 기술이 λ°”λ‘œ 비동기(Async) 톡신인 것이닀.

 

비동기 ν†΅μ‹ μ˜ μž₯점

  • 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ”©ν•˜μ§€ μ•Šκ³  ν•„μš”ν•œ λΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈν•˜κΈ° λ•Œλ¬Έμ— μ›ΉνŽ˜μ΄μ§€μ˜ 속도와 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
  • μ„œλ²„μ™€μ˜ ν†΅μ‹ λŸ‰μ΄ 쀄어듀고, μžμ›κ³Ό μ‹œκ°„μ„ μ ˆμ•½ν•  수 μžˆλ‹€.
    화면이 κΉœλΉ‘κ±°λ¦¬κ±°λ‚˜ λ©ˆμΆ”μ§€ μ•Šκ³  λΆ€λ“œλŸ½κ²Œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ μ‹œν‚¬ 수 μžˆλ‹€. 
  • μš”μ²­κ³Ό 응닡이 λ™μ‹œμ— μΌμ–΄λ‚˜μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— μš”μ²­μ„ 보낸 후에 λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 μžˆλ‹€.

비동기 ν†΅μ‹ μ˜ μž₯점

 

비동기 ν†΅μ‹ μ˜ 단점

  • 비동기(Async) 톡신은 동기(Sync) 톡신보닀 μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ΄ν•΄ν•˜λŠ” 것이 μ–΄λ €μ›Œ μ½”λ“œμ˜ λ³΅μž‘λ„κ°€ 증가할 수 μžˆλ‹€.
  • 비동기(Async) 톡신은 μš”μ²­μ„ 보낸 후에 응닡을 기닀리지 μ•Šκ³  λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ—, μš”μ²­μ˜ 처리 속도에 따라 응닡이 λ’€μ£½λ°•μ£½ 될 수 μžˆμ–΄ μš”μ²­κ³Ό μ‘λ‹΅μ˜ μˆœμ„œλ₯Ό 보μž₯ν•  수 μ—†λ‹€. 예λ₯Ό λ“€μ–΄, A와 BλΌλŠ” 두 개의 μš”μ²­μ„ λ³΄λƒˆλŠ”λ°, B의 μ²˜λ¦¬κ°€ 더 λΉ¨λΌμ„œ B의 응닡이 λ¨Όμ € λ„μ°©ν•˜λŠ” κ²½μš°κ°€ μžˆμ„ 수 μžˆλ‹€.
  • 비동기(Async) 톡신은 μš”μ²­κ³Ό 응닡이 λΆ„λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ—, μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ μ–΄λ–€ μš”μ²­μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν–ˆλŠ”μ§€ νŒŒμ•…ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 것이 쉽지 μ•Šμ„ 수 μžˆλ‹€.

μ›Ήμ˜ 비동기 처리 기술 Ajax

μ›Ήμ˜ 비동기(Async) ν†΅μ‹ μ˜ κ°€μž₯ λŒ€ν‘œμ μΈ μ˜ˆμ‹œκ°€ λ°”λ‘œ AJAX(Asynchronous JavaScript And XML) 이닀. AJAXλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•΄μ„œ μ›Ή μ„œλ²„μ™€ λΉ„λ™κΈ°λ‘œ ν†΅μ‹ ν•˜κ³ , HTML, XML, JSON λ“±μ˜ λ‹€μ–‘ν•œ ν˜•μ‹μ˜ 데이터λ₯Ό 주고받을 수 μžˆλ‹€. AJAXλ₯Ό μ‚¬μš©ν•˜λ©΄ μ›ΉνŽ˜μ΄μ§€κ°€ λ‘œλ”©λœ 후에도 μ„œλ²„λ‘œλΆ€ν„° ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μš”μ²­ν•˜κ³  λ°›μ•„μ„œ μ›ΉνŽ˜μ΄μ§€λ₯Ό λ™μ μœΌλ‘œ κ°±μ‹ ν•  수 μžˆμ–΄, μ›Ή νŽ˜μ΄μ§€μ˜ μΌλΆ€λΆ„λ§Œμ„ μ—…λ°μ΄νŠΈν•  수 μžˆμœΌλ―€λ‘œ, 전체 νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šμ•„λ„ 되고, μ„œλ²„μ˜ λΆ€ν•˜λ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ—μ„œ 넀이버 λŒ“κΈ€ μ‹œμŠ€ν…œμ„ μ˜ˆμ‹œλ‘œ λ“€μ–΄ 비동기λ₯Ό μ„€λͺ…ν–ˆλŠ”λ° 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” 기술이 Ajax 인 것이닀.

Ajax

Ajax의 λ™μž‘ μ›λ¦¬λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  1. μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©μžμ˜ μš”μ²­μ΄ λ°œμƒν•˜λ©΄, μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ XMLHttpRequest 객체λ₯Ό μƒμ„±ν•œλ‹€.
  2. XMLHttpRequest κ°μ²΄λŠ” μ„œλ²„μ— λΉ„λ™κΈ°μ μœΌλ‘œ μš”μ²­μ„ 보낸닀.
  3. μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  응닡을 XMLμ΄λ‚˜ JSON ν˜•μ‹μœΌλ‘œ 보낸닀.
  4. XMLHttpRequest κ°μ²΄λŠ” 응닡을 λ°›μ•„μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ²˜λ¦¬ν•œλ‹€.
  5. μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 처리된 κ²°κ³Όλ₯Ό μ›Ή λΈŒλΌμš°μ €μ— λ°˜μ˜ν•œλ‹€.

Ajax

이처럼 AjaxλŠ” μ›Ή κ°œλ°œμ—μ„œ 많이 μ‚¬μš©λ˜λŠ” 비동기 κΈ°μˆ μ΄λ‹€. Ajaxλ₯Ό 잘 μ΄ν•΄ν•˜κ³  ν™œμš©ν•˜λ©΄ 더 λ‚˜μ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆλ‹€.

 

Ajax의 μž₯점

  • μ›Ή νŽ˜μ΄μ§€μ˜ 속도와 μ‚¬μš©μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
  • μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€λ₯Ό 효율적으둜 ν™œμš©ν•  수 μžˆλ‹€.
  • λ‹€μ–‘ν•œ 데이터 ν˜•μ‹μ„ μ§€μ›ν•œλ‹€. (XML, JSON)

 

Ajax의 단점

  • λ³΄μ•ˆ λ¬Έμ œκ°€ μžˆμ„ 수 μžˆλ‹€.
  • 크둜슀 도메인 λ¬Έμ œκ°€ μžˆμ„ 수 μžˆλ‹€. (CORS)
  • λΈŒλΌμš°μ €μ˜ ν˜Έν™˜μ„± λ¬Έμ œκ°€ μžˆμ„ 수 μžˆλ‹€. (IE λΈŒλΌμš°μ €)

비동기와 동기 κ²°λ‘ 

μ΄λ ‡κ²Œ Sync(동기식)κ³Ό Async(비동기식은) λͺ…ν™•μ•ˆ μž₯단점을 가지고 있으며 μ„œλΉ„μŠ€ νŠΉμ§•μ— 따라 처리결과게 μ˜ν•΄ μ²˜λ¦¬ν•˜μ—¬ μ„œλΉ„μŠ€μ˜ μ§ˆμ„ 높일 수 μžˆλŠ” Synchronous(동기식) 방법과, μ²˜λ¦¬κ²°κ³Όμ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³  μ„±λŠ₯적으둜 λΉ λ₯Έ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•œ ASynchronous(비동기식) 방법을 잘 적용 ν•˜λŠ”κ²Œ μ€‘μš”ν•˜λ‹€.

μ›Ή κ°œλ°œμ„ ν•  λ•ŒλŠ” 비동기(Async) 톡신과 동기(Sync) ν†΅μ‹ μ˜ μž₯단점을 잘 νŒŒμ•…ν•˜κ³ , 상황에 따라 μ μ ˆν•˜κ²Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μ›ΉνŽ˜μ΄μ§€μ˜ 전체적인 κ΅¬μ‘°λ‚˜ λ””μžμΈμ„ λ°”κΎΈλŠ” κ²½μš°μ—λŠ” 동기(Sync) 톡신을 μ‚¬μš©ν•˜λŠ” 것이 쒋을 수 있고, μ›ΉνŽ˜μ΄μ§€μ˜ μΌλΆ€λΆ„λ§Œ 자주 λ°”λ€ŒλŠ” κ²½μš°μ—λŠ” 비동기(Async) 톡신을 μ‚¬μš©ν•˜λŠ” 것이 쒋을 수 μžˆλ‹€.

비동기(Async) 톡신 동기(Sync) 톡신
μš”μ²­κ³Ό 응닡이 λ™μ‹œμ— μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€. μš”μ²­κ³Ό 응닡이 λ™μ‹œμ— μΌμ–΄λ‚œλ‹€.
μ›ΉνŽ˜μ΄μ§€μ˜ μΌλΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈν•œλ‹€. μ›ΉνŽ˜μ΄μ§€μ˜ 전체λ₯Ό μ—…λ°μ΄νŠΈν•œλ‹€.
μ½”λ“œμ˜ λ³΅μž‘λ„κ°€ 증가할 수 μžˆλ‹€. μ½”λ“œμ˜ κ°„κ²°μ„±κ³Ό 직관성을 μœ μ§€ν•  수 μžˆλ‹€.
μš”μ²­κ³Ό μ‘λ‹΅μ˜ μˆœμ„œλ₯Ό 보μž₯ν•  수 μ—†λ‹€. μš”μ²­κ³Ό μ‘λ‹΅μ˜ μˆœμ„œλ₯Ό 보μž₯ν•  수 μžˆλ‹€.
μ—λŸ¬ μ²˜λ¦¬κ°€ μ–΄λ €μšΈ 수 μžˆλ‹€. μ—λŸ¬ μ²˜λ¦¬κ°€ μ‰¬μšΈ 수 μžˆλ‹€.
μ›ΉνŽ˜μ΄μ§€μ˜ 속도와 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€. μ›ΉνŽ˜μ΄μ§€μ˜ 속도와 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆλ‹€.
μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ μ‹œν‚¬ 수 μžˆλ‹€. μ‚¬μš©μž κ²½ν—˜μ΄ λ–¨μ–΄μ§ˆ 수 μžˆλ‹€.
λ³‘λ ¬μ μœΌλ‘œ μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. λ³‘λ ¬μ μœΌλ‘œ μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†λ‹€.

# 참고자료

https://hongssup.tistory.com/9

https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-Synchronous%EB%8F%99%EA%B8%B0%EC%8B%9D-%ED%86%B5%EC%8B%A0%EA%B3%BC-Asynchronous%EB%B9%84%EB%8F%99%EA%B8%B0%EC%8B%9D-%ED%86%B5%EC%8B%A0%EC%9D%B4%EB%9E%80

https://m.blog.naver.com/sjc02183/222028523941

https://wildeveloperetrain.tistory.com/104

http://www.tcpschool.com/ajax/ajax_intro_works