Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Computer/Computer Science

[Network] (Swift) Blocking๊ณผ Non-Blocking , Sync์™€ Asyn์˜ ์ฐจ์ด๋Š”?

๊ฐ์ž ๐Ÿฅ” 2022. 9. 4. 03:39
๋ฐ˜์‘ํ˜•

 

์Šคํ„ฐ๋””๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น repository์— ๊ฐ€๋ฉด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

https://github.com/JulSaMo/CS-start

 

GitHub - JulSaMo/CS-start: ๐Ÿ“ CS ์ง€์‹ ๋Œ€๋ฐฑ๊ณผ โœจ

๐Ÿ“ CS ์ง€์‹ ๋Œ€๋ฐฑ๊ณผ โœจ. Contribute to JulSaMo/CS-start development by creating an account on GitHub.

github.com

 

๐ŸŸ  Blocking (๋ธ”๋กœํ‚น)

์ž์‹ ์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์ฃผ์ฒด์˜ ์ž‘์—†์ด ์‹œ์ž‘๋˜๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ

์ฒ˜์Œ์—๋Š” A๊ฐ€ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ B์ž‘์—…์ด ์‹œ์ž‘๋˜๋ฉด, B์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ A๋Š” ๊ฐ€๋งŒํžˆ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. 
B์ž‘์—…์ด ๋๋‚œ ํ›„์— ๋‹ค์‹œ A ์ž‘์—…์ด ์‹œ์ž‘๋œ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ฆฌ๋ฉด ์ด๋ ‡๊ฒŒ ์ž‘์—…์ด ์ด์–ด์ง„๋‹ค. 

๐ŸŸ  Non-Blocking (๋„Œ๋ธ”๋กœํ‚น)

๋‹ค๋ฅธ ์ฃผ์ฒด ์ž‘์—…๊ณผ ๊ด€๋ จ ์—†์ด ์ž์‹ ์˜ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ

์ฒ˜์Œ์— A์ž‘์—…์ด ์‹œ์ž‘๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ B์ž‘์—…์ด ์‹œ์ž‘๋œ๋‹ค. 
A๋„ ์ž‘์—…์„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๊ณ„์† ๋™์‹œ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋™์‹œ์— Application์—์„œ๋„ ์ž‘์—…์ด ๋Š๊ธฐ์ง€ ์•Š๊ณ  ๊ณ„์† ์ž์‹ ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐ŸŸ  Blocking   VS   Non-Blocking 

Blocking๊ณผ Non-blocking์€ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋ฐ”๋กœ ์ฃผ๋Š๋ƒ ์•„๋‹ˆ๋ƒ์—์„œ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋ดค๋“ฏ์ด, Blocking์€ Aํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ, Bํ•จ์ˆ˜๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „ ๊นŒ์ง€ A ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฐ˜๋ฉด์— Non-blocking์€ Bํ•จ์ˆ˜๊ฐ€ ์ œ์–ด๊ถŒ์„ ๋ฐ”๋กœ A์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ A ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


๐ŸŸ  Sync (๋™๊ธฐ)

์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ๋™์‹œ์— ๋๋‚˜๊ฑฐ๋‚˜, ๋๋‚˜๋Š” ๋™์‹œ์— ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

 A์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ , A์ž‘์—…์ด B์ž‘์—…์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•œ๋‹ค.
๋„์›€์„ ์š”์ฒญ๋ฐ›์€ B์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค. ๊ทธ๋™์•ˆ A๋Š” ์ž‘์—…์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
B์ž‘์—… ํ›„ ์–ป์€ ๋ฐ์ดํ„ฐ(์ž‘์—…๋ฌผ) ๋ฅผ A์ž‘์—…์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ(์ž‘์—…๋ฌผ)์„ ๊ฐ€์ง€๊ณ  A์—์„œ ์ž‘์—…์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค.

 

๐ŸŸ  Async (๋น„๋™๊ธฐ)

์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋๋‚˜๋Š” ๋™์‹œ์— ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธ

A๊ฐ€ B์—๊ฒŒ ์ž‘์—…์„ ์š”์ฒญํ•œ๋‹ค.  ํ•˜์ง€๋งŒ A๋Š” ๊ฒฐ๊ณผ๋ฌผ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ทธ๋ƒฅ A๋Œ€๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.
A๊ฐ€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋˜ ๋„์ค‘, B์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ฐฉํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ B์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์‚ฌ์šฉํ• ์ง€ ์•ˆํ• ์ง€๋Š” ๋ชจ๋ฅธ๋‹ค.

๐ŸŸ  Sync  VS  Async (๋™๊ธฐ vs ๋น„๋™๊ธฐ)

Sync์™€ Async์˜ ์ฐจ์ด๋Š” ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ๋ฅผ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌ(A๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” Sync)ํ•˜๋Š๋ƒ, ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š๋ƒ(B์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฝœ๋ฐฑ์œผ๋กœ B๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” Async)์˜ ์ฐจ์ด์ด๋‹ค.
(์ฆ‰, ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ์—ˆ์„ ๋•Œ ์ˆœ์„œ์™€ ๊ฒฐ๊ณผ์— ๊ด€์‹ฌ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. )

Sync๋Š” A ํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, Bํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ Aํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋ฉด์— Async๋Š” Bํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฝœ๋ฐฑ์œผ๋กœ Bํ•จ์ˆ˜๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


๐ŸŸ  iOS์—์„œ์˜ ๋ธ”๋กœํ‚น๊ณผ ๋…ผ๋ธ”๋กœํ‚น, ๊ทธ๋ฆฌ๊ณ  ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

iOSํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—์„œ๋Š” async๋Š” non-blocking์œผ๋กœ๋งŒ ๋‹ค๋ฃจ๊ณ , sync๋Š” blocking์œผ๋กœ๋งŒ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

https://www.inflearn.com/questions/25632

 

async์™€ blocking - ์ธํ”„๋Ÿฐ | ์งˆ๋ฌธ & ๋‹ต๋ณ€

์ข‹์€ ๊ฐ•์˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค  async์™€ blocking ๊ฐœ๋…์„ ๋‚˜๋ˆ ์„œ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๋ฉด ์ข€ ๋” ๊ฐœ๋…์ •๋ฆฌ๊ฐ€ ์ž˜๋ ๊ฒƒ๊ฐ™์Šต๋‹ˆ๋‹ค - ์งˆ๋ฌธ & ๋‹ต๋ณ€ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 


(์ถ”๊ฐ€) ๐ŸŸ  ํฌ๋กœ์Šค ์˜ค๋ฒ„ํ•œ 4๊ฐ€์ง€

๊ถ๊ธˆ์ฆ) iOS์—์„œ๋Š” aysnc๋Š” non-blocking์œผ๋กœ๋งŒ ๋‹ค๋ฃจ๊ณ , sync๋Š” blocking์œผ๋กœ๋งŒ ๋‹ค๋ฃจ๋‹ˆ๊นŒ, ์—ฌ๊ธฐ์—์„œ๋Š”
non-blocking / Async ์™€ Blocking/Sync ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๋ ค๋‚˜? (๋งž๋Š”๋“ฏ..?๐Ÿ‘€)

https://www.youtube.com/watch?v=oEIoqGd-Sns

๐Ÿ”ธ Blocking / Sync

blocking์—๋Š” ์ œ์–ด๊ถŒ์— ๊ด€์ , sync์—๋Š” ๊ฒฐ๊ณผ์˜ ์ฒ˜๋ฆฌ์— ๊ด€์ ์„ ๋‘”๋‹ค. 

์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ , Blocking์ธ ๋งŒํผ Kernel์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „์—๋Š” ์ ˆ๋Œ€ ์ œ์–ด๊ถŒ์„ Application์— ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  Sync์ธ ๋งŒํผ Kernel์—์„œ ์ž‘์—…ํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด โค๏ธ๋ผ๊ณ  ์น˜๋ฉด, ์ด ๊ฒฐ๊ณผ โค๏ธ์— ๋Œ€ํ•œ ์—…๋ฌด๋ฅผ ๋ฐ”๋กœ Application์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ“ Blocking / Sync๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ๊นŒ? (๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ)

๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด, ์ž…๋ ฅ์š”์ฒญ์„ ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ž…๋ ฅ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ์ „๊นŒ์ง€๋Š”, ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์ด ์ผ์ ˆ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›๊ฒŒ ๋˜๋ฉด, ์ฆ‰๊ฐ์œผ๋กœ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— sync์ด๋‹ค.

func blockingSync() -> {
	let input = Int(readLine()!)!
    print("๋ธ”๋กœํ‚น ๋™๊ธฐ๋Š” ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผํ•ฉ๋‹ˆ๋‹ค. \(input)"
}

 

๐Ÿ“ Blocking / Sync ์ •๋ฆฌ

Blocking/Sync ๋ฐฉ์‹์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปค๋„๋กœ ์ž‘์—…์„ ์š”์ฒญํ•˜๊ณ , ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ดํ›„ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ด๋Ÿฌํ•œ Blocking / Sync ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ธ Non-Blocking / Sync

non-blocking์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ด๊ถŒ์„ ์žƒ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๐Ÿ”ต๋Š” ๊ณ„์†ํ•ด์„œ ์ž‘์—…์„ ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
๐ŸŸข๋„ ์š”์ฒญ๋ฐ›์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค. ํ•˜์ง€๋งŒ sync์ด๊ธฐ ๋•Œ๋ฌธ์— ๐Ÿ”ต๋Š” ๐ŸŸข์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ค‘์š”ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๐Ÿ”ต๋Š” ์ง€์†์ ์œผ๋กœ ๐ŸŸข์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ (๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋Š”์ง€)์— ๋Œ€ํ•ด์„œ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

๐Ÿ“ Non-Blocking / Sync๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ๊นŒ? (๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ)

non-blocking / sync๋Š” blocking/sync๋ž‘ ๊ฑฐ์˜ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด์ฐจํ”ผ ๐ŸŸข์˜ ์ž‘์—…์„ ๋ฐ›์•„์„œ, ๐Ÿ”ต์ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ๊ทธ๋Ÿผ ์–ด๋–จ๋•Œ non-blocking/sync๊ฐ€ ์‚ฌ์šฉ๋ ๊นŒ. 

Front end์˜ UI ๊ด€์ ์—์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

'๊ฒŒ์ž„'์—์„œ ๋งต์„ ์ด๋™ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋งต์„ ์ „ํ™˜ํ•  ๋•Œ ํ™”๋ฉด์—, ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋กœ๋“œ๋๋Š”์ง€ 'progress bar'๋ฅผ ๋„์›Œ์ค˜์•ผํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด๋•Œ progressbar๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ณผ์ •์ด ๊ณ„์†ํ•ด์„œ ๐Ÿ”ต์ด ๐ŸŸข์— ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋ƒ๊ณ  ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๊ณ , ๐ŸŸข์—์„œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค ๋‚˜์˜ค๋ฉด ๋ฌด์‚ฌํžˆ ๋งต์ด ์ „ํ™˜๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๐ŸŸข๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ sync๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

func moveMap() -> {
	while true {
    	//ํ™”๋ฉด์— progress๋ฅผ ํ‘œ์‹œํ•  ์ฝ”๋“œ ์ž‘์„ฑ
    }
    // ํ™”๋ฉด ์ „ํ™˜ ์ฝ”๋“œ
}

 

๐Ÿ”ธ Blocking / Async

Application์—์„œ ์ž‘์—…์„ ์‹œ์ž‘ํ•œ๋‹ค.  ์ด์–ด์„œ Kernel์— ์ž‘์—…์„ ์š”์ฒญํ–ˆ๋Š”๋ฐ,
(Blocking) ์ œ์–ด๊ถŒ์„ ๋นผ์•—๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ ๐Ÿ”ต๋Š” ์ž‘์—…์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

ํ•˜์ง€๋งŒ, async์ด๊ธฐ ๋•Œ๋ฌธ์— ๐ŸŸข์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ด๊ฐ’์„ ๋‹ค์‹œ ๐Ÿ”ต์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 

๐Ÿ“ ๊ตณ์ด blocking์ธ๋ฐ async๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ?

non-blocking์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๋ณดํ†ต ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ blocking/async๋กœ ์ž‘์—…ํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋ง์€ ์ฆ‰,,, ์ด๊ฑด ์ž˜ ์•ˆ์“ด๋‹ค๋Š” ์ด์•ผ๊ธด๊ฐ€? (์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค - https://www.youtube.com/watch?v=oEIoqGd-Sns) 

 

๐Ÿ“ ์–ด๋””์„œ blocking/sync๋ฅผ ์“ธ๊นŒ?

Blocking/Async ๋ฐฉ์‹์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปค๋„๋กœ ์ž‘์—…์„ ์š”์ฒญํ•˜๊ณ , ์ปค๋„์€ ์ž์‹ ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ค‘๊ฐ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ œ์–ด๊ถŒ์„ ๋˜ ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ค‘๊ฐ„์— ์ปค๋„์— ์ž‘์—…๊ถŒ์„ ๋‹ค์‹œ ๋„˜๊ฒจ์ฃผ๋Š” ์‹์œผ๋กœ ์„œ๋กœ ์ œ์–ด๊ถŒ์„ ์œ„์ž„ํ•˜๋ฉฐ ์ž‘์—…์„ ์œ„์ž„ํ•œ๋‹ค. ์ž๋ฐ” ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งค๋ฒˆ ์†Œ์ผ“์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๋ฉฐ ๋‹ค๋ฅธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ€์ด์Šค๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”ธ Non-Blocking / Async

Non-blocking์€ kernel์— ์ž‘์—…์ด ์‹คํ–‰์ค‘์— ์žˆ์–ด๋„, ๐Ÿ”ต์˜ ์ž‘์—…์„ ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์–‘์ชฝ์—์„œ ์„œ๋กœ ๊ฐ์ž ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Async๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๐ŸŸข์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“ Non-Blocking / Async๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ๊นŒ? (๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ)

API์š”์ฒญ์„ ํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๋‹ค๊ฐ€ ์ฝœ๋ฐฑ์„ ํ†ตํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

// JS์ฝ”๋“œ๋กœ ๋Œ€์ฒด
fethc('url', option)
.then((response) => {
	return response.json();
})
.then((data) => {
	something(data);
});

 

 


์•„,, cs ์Šคํ„ฐ๋””ํ•˜๋ฉด์„œ ๋ˆˆ์œผ๋กœ๋งŒ ์ฝ์œผ๋ฉด ๋„ˆ๋ฌด ์ง‘์ค‘๋„ ์•ˆ๋˜๊ณ , ๋จธ๋ฆฌ์— ๋‚จ๋Š”๊ฒŒ ์—†๊ธธ๋ž˜ ์ง์ ‘ ํ•„๊ธฐํ•˜๋ฉด์„œ ํ•ด๋ดค๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋งŒํผ ์ ˆ๋Œ€ ๊นŒ๋จน์ง€ ์•Š๊ฒ ๋„ค... ๋‚ด์ผ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์•ผ๊ฒŸ๋‹ค ใ… ใ…  ํ‘ํ‘,, ๊ณต๋ถ€ํ• ๊ฑฐ ์™ค์ผ€ ๋งŽ์•„! ์•„์•„์•„ ์ฆ๊ฒ๋‹ค ^____^ โœจ

๋ฐ˜์‘ํ˜•