# [Network] Blocking/Non-blocking & Synchronous/Asynchronous


๋™๊ธฐ/๋น„๋™๊ธฐ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ผ์ƒ ์ƒํ™œ์—์„œ ๋งŽ์ด ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๋ง์ด๋‹ค.

Blocking๊ณผ Synchronous, ๊ทธ๋ฆฌ๊ณ  Non-blocking๊ณผ Asysnchronous๋ฅผ
์„œ๋กœ ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ๊ณ  ์ฐฉ๊ฐํ•˜๊ธฐ ์‰ฝ๋‹ค.

๊ฐ์ž ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž


homoefficio (opens new window)๋‹˜ ๋ธ”๋กœ๊ทธ์— ๋‚˜์˜จ 2๋Œ€2 ๋งคํŠธ๋ฆญ์Šค๋กœ ์ž˜ ์ •๋ฆฌ๋œ ์‚ฌ์ง„์ด๋‹ค. ์ด ์‚ฌ์ง„๋งŒ ๋ณด๊ณ  ๋ชจ๋‘ ์ดํ•ด๊ฐ€ ๋œ๋‹ค๋ฉด, ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


# Blocking/Non-blocking

๋ธ”๋Ÿญ/๋…ผ๋ธ”๋Ÿญ์€ ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๊ฑด๋„ค์ฃผ๋Š” ์œ ๋ฌด์˜ ์ฐจ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ A, B๊ฐ€ ์žˆ๊ณ , A ์•ˆ์—์„œ B๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด๋•Œ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” A๊ณ , ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋Š” B๊ฐ€ ๋œ๋‹ค. ํ˜„์žฌ B๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ B๋Š” ์ž์‹ ์˜ ์ผ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. (์ œ์–ด๊ถŒ์ด B์—๊ฒŒ ์ฃผ์–ด์ง„ ์ƒํ™ฉ)

  • Blocking : ํ•จ์ˆ˜ B๋Š” ๋‚ด ํ•  ์ผ์„ ๋‹ค ๋งˆ์น  ๋•Œ๊นŒ์ง€ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค. A๋Š” B๊ฐ€ ๋‹ค ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.
  • Non-blocking : ํ•จ์ˆ˜ B๋Š” ํ•  ์ผ์„ ๋งˆ์น˜์ง€ ์•Š์•˜์–ด๋„ A์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋ฐ”๋กœ ๋„˜๊ฒจ์ค€๋‹ค. A๋Š” B๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ๋„ ๋‹ค๋ฅธ ์ผ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—์„œ ์ผ์„ ์‹œ์ž‘ํ•  ๋•Œ ๋ฐ”๋กœ ์ œ์–ด๊ถŒ์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š๋ƒ, ํ•  ์ผ์„ ๋งˆ์น˜๊ณ  ๋ฆฌํ„ดํ•ด์ฃผ๋Š๋ƒ์— ๋”ฐ๋ผ ๋ธ”๋Ÿญ๊ณผ ๋…ผ๋ธ”๋Ÿญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


# Synchronous/Asynchronous

๋™๊ธฐ/๋น„๋™๊ธฐ๋Š” ์ผ์„ ์ˆ˜ํ–‰ ์ค‘์ธ ๋™์‹œ์„ฑ์— ์ฃผ๋ชฉํ•˜์ž

์•„๊นŒ์ฒ˜๋Ÿผ ํ•จ์ˆ˜ A์™€ B๋ผ๊ณ  ๋˜‘๊ฐ™์ด ์ƒ๊ฐํ–ˆ์„ ๋•Œ, B์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋‚˜ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ A๊ฐ€ ์‹ ๊ฒฝ์“ฐ๊ณ  ์žˆ๋Š” ์œ ๋ฌด์˜ ์ฐจ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

  • Synchronous : ํ•จ์ˆ˜ A๋Š” ํ•จ์ˆ˜ B๊ฐ€ ์ผ์„ ํ•˜๋Š” ์ค‘์— ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ, ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์–ด๋–ค์ง€ ๊ณ„์† ์ฒดํฌํ•œ๋‹ค.
  • Asynchronous : ํ•จ์ˆ˜ B์˜ ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ B ํ˜ผ์ž ์ง์ ‘ ์‹ ๊ฒฝ์“ฐ๋ฉด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. (Callback)

์ฆ‰, ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜(B)๋ฅผ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜(A)๊ฐ€ ์‹ ๊ฒฝ์“ฐ๋Š”์ง€, ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜(B) ์Šค์Šค๋กœ ์‹ ๊ฒฝ์“ฐ๋Š”์ง€๋ฅผ ๋™๊ธฐ/๋น„๋™๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๋น„๋™๊ธฐ๋Š” ํ˜ธ์ถœ์‹œ Callback์„ ์ „๋‹ฌํ•˜์—ฌ ์ž‘์—…์˜ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ๋‹ตํ•˜๊ฒŒ ๋œ๋‹ค. (Callback์ด ์˜ค๊ธฐ ์ „๊นŒ์ง€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Œ)



์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ด 4๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ ์ข€ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ Case ๋ณ„๋กœ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๋ณด๋ฉด์„œ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž


์ƒํ™ฉ : ์น˜ํ‚จ์ง‘์— ์ง์ ‘ ์น˜ํ‚จ์„ ์‚ฌ๋Ÿฌ๊ฐ

# 1) Blocking & Synchronous

๋‚˜ : ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํ•œ๋งˆ๋ฆฌ๋งŒ ํฌ์žฅํ•ด์ฃผ์„ธ์š”
์‚ฌ์žฅ๋‹˜ : ๋„ค ๊ธˆ๋ฐฉ๋˜๋‹ˆ๊นŒ ์ž ์‹œ๋งŒ์š”!
๋‚˜ : ๋„น
-- ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํŠ€๊ธฐ๋Š” ์ค‘--
๋‚˜ : (์•„ ์–ธ์ œ ๋˜์ง€?..๊ถ๊ธˆํ•œ๋ฐ ๊ทธ๋ƒฅ ๋ฉ€๋šฑํžˆ ์„œ์„œ ์น˜ํ‚จ ํŠ€๊ธฐ๋Š”๊ฑฐ ๋ณด๋ฉด์„œ ๊ธฐ๋‹ค๋ฆผ)

# 2) Blocking & Asynchronous

๋‚˜ : ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํ•œ๋งˆ๋ฆฌ๋งŒ ํฌ์žฅํ•ด์ฃผ์„ธ์š”
์‚ฌ์žฅ๋‹˜ : ๋„ค ๊ธˆ๋ฐฉ๋˜๋‹ˆ๊นŒ ์ž ์‹œ๋งŒ์š”!
๋‚˜ : ์•— ๋„น
-- ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํŠ€๊ธฐ๋Š” ์ค‘--
๋‚˜ : (์–ธ์ œ ๋˜๋Š”์ง€ ์•ˆ ๊ถ๊ธˆํ•จ, ์ž ์‹œ๋งŒ์ด๋ž˜์„œ ๋‹ค ๋ ๋•Œ๊นŒ์ง€ ์„œ์„œ ๋ถ™์žกํžŒ ์ƒํ™ฉ)

# 3) Non-blocking & Synchronous

๋‚˜ : ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํ•œ๋งˆ๋ฆฌ๋งŒ ํฌ์žฅํ•ด์ฃผ์„ธ์š”
์‚ฌ์žฅ๋‹˜ : ๋„ค~ ์ฃผ๋ฌธ ๋ฐ€๋ ค์„œ ์‹œ๊ฐ„ ์ข€ ๊ฑธ๋ฆฌ๋‹ˆ๊นŒ ๋ณผ์ผ ๋ณด์‹œ๋‹ค ์˜ค์„ธ์š”
๋‚˜ : ๋„น
-- ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํŠ€๊ธฐ๋Š” ์ค‘--
(5๋ถ„๋’ค) ๋‚˜ : ์ œ๊บผ ๋‚˜์™”๋‚˜์š”?
์‚ฌ์žฅ๋‹˜ : ์•„์ง์ด์š”
(10๋ถ„๋’ค) ๋‚˜ : ์ œ๊บผ ๋‚˜์™”๋‚˜์š”?
์‚ฌ์žฅ๋‹˜ : ์•„์ง์ด์š”ใ… 
(15๋ถ„๋’ค) ๋‚˜ : ์ œ๊บผ ๋‚˜์™”๋‚˜์š”?
์‚ฌ์žฅ๋‹˜ : ์•„์ง์ด์š”ใ… ใ… 

# 4) Non-blocking & Asynchronous

๋‚˜ : ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํ•œ๋งˆ๋ฆฌ๋งŒ ํฌ์žฅํ•ด์ฃผ์„ธ์š”
์‚ฌ์žฅ๋‹˜ : ๋„ค~ ์ฃผ๋ฌธ ๋ฐ€๋ ค์„œ ์‹œ๊ฐ„ ์ข€ ๊ฑธ๋ฆฌ๋‹ˆ๊นŒ ๋ณผ์ผ ๋ณด์‹œ๋‹ค ์˜ค์„ธ์š”
๋‚˜ : ๋„น
-- ์‚ฌ์žฅ๋‹˜ ์น˜ํ‚จ ํŠ€๊ธฐ๋Š” ์ค‘--
๋‚˜ : (์•‰์•„์„œ ๋‹ค๋ฅธ ์ผ ํ•˜๋Š” ์ค‘)
...
์‚ฌ์žฅ๋‹˜ : ์น˜ํ‚จ ๋‚˜์™”์Šต๋‹ˆ๋‹ค
๋‚˜ : ์ž˜๋จน๊ฒ ์Šต๋‹ˆ๋‹ค~

# [์ฐธ๊ณ  ์‚ฌํ•ญ]

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM