๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Daily/Today I Learned

210202_TIL

by joooing 2021. 2. 3.
๋ฐ˜์‘ํ˜•

๐ŸŽ ์˜ค๋Š˜ ํ•œ ๊ฒƒ


โœ”๏ธ toy - ์Šค๋„์ฟ 
์Šค๋„์ฟ  ๋‹ต์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”๋ฐ ์—ญ๋Œ€๊ธ‰ ์˜ค๋ž˜์žก๊ณ ์žˆ๋˜ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์•„์ด๋””์–ด๋Š” boolean๊ฐ’๋“ค์„ 9๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„ ์ฒดํฌ์šฉ ๋ฐฐ์—ด์— ๋„ฃ์–ด๋‘๊ณ , ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๋Š” ์—ด/ํ–‰/3*3 ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž๋“ค์„ ๋ฐฐ์—ด์—์„œ false๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , true์ธ ์ธ๋ฑ์Šค๊ฐ’๋งŒ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด๋ณด๋ฉฐ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์—”ํ€ธ์ฆˆ๋ž‘ ๋น„์Šทํ•˜๊ฒŒ ์ ‘๊ทผํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ์•„์ง ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด์„œ ํƒˆ์ถœ์กฐ๊ฑด์„ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๋ฏธ์ˆ™ํ•œ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋Š๊ปด์กŒ๋‹ค.

โœ”๏ธ Event Loop 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” '์‹ฑ๊ธ€์•ˆ์Šค๋ ˆ๋“œ' ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด๋ผ๋Š” ์ ์ด๋‹ค. ํ˜ธ์ถœ๋…•์Šคํƒ์ด ํ•˜๋‚˜๋ผ, ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ผ๋Š” ๋ง์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋™์ž‘ํ•˜๋Š”๊ฑธ ๋ณด๋ฉด ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๊ธฐ๋„ ํ•œ๋‹ค๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.ํ•˜์ด๋Ÿฐ '๋™์‹œ์„ฑ'์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด Event Loop์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค. setTimeout, XMLHTTPRequest.. ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์— ๊ตฌํ˜„๋œ webAPI ์˜์—ญ์— ์กด์žฌํ•œ๋‹ค. ์ด๊ฒƒ๋“ค์€ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค. ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์Šคํƒ์ด ๋น„์—ˆ์„ ๋•Œ, task queue์˜ ์ฒซ๋ฒˆ์งธ ์ฝœ๋ฐฑ์„ ์Šคํƒ์— ์Œ“๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค.'ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํƒœ์Šคํฌ๊ฐ€ ์—†๋Š”์ง€' ๊ทธ๋ฆฌ๊ณ  'ํƒœ์Šคํฌ ํ์— ํƒœ์Šคํฌ๊ฐ€ ์žˆ๋Š”์ง€'๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋•๋ถ„์— ์‹คํ–‰์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ ์ ˆํžˆ ๋ถ„๋ฐฐํ•˜๋Š” ๋“ฑ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๋Š”๊ฑธ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ์„ธ์š”

โœ”๏ธ Promise
Promise์— ๋Œ€ํ•ด ์ง‘์ค‘์ ์œผ๋กœ ํŒŒ๊ณ ๋“ค์–ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ํŠนํžˆ then, catch, finally ๊ฐ™์€ ํ›„์†์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋“ค์ด ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›์•„ ๋ฌด์—‡์„ ๋ฆฌํ„ดํ•˜๋Š”์ง€, ๊ฐ ๋ฉ”์„œ๋“œ์˜ ์˜ํ–ฅ์— ๋Œ€ํ•ด mdn๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉฐ ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์€ ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ–ˆ๋Š”๋ฐ finally์˜ ๋™์ž‘์ด ์˜ˆ์ƒ ๋ฐ–์ด์—ˆ๋‹ค. finally๋Š” ์ด๋ฆ„๋•Œ๋ฌธ์ธ์ง€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์—๋งŒ ์จ์•ผํ•  ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ, ์ค‘๊ฐ„์— ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ธ์ž๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ  ๋ฆฌํ„ด๋„ ํ•˜์ง€ ์•Š๋Š”๋ฐ ๋งˆ์น˜ ํ„ฐ๋„์ฒ˜๋Ÿผ ์ด์ „ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์„ ๋‹ค์Œ ํ•จ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋“ฏ์ด ๋™์ž‘ํ–ˆ๋‹ค.

then์˜ ๋ฆฌํ„ด๊ฐ’์€ ๋ถ„๋ช… ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด์ผํ…๋ฐ ์ผ๋ฐ˜์ ์ธ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์„œ, ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๊ณ  ์ž‘๋™๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์ ธ์„œ ECMA ๋ช…์„ธ์„œ๋ฅผ ๋’ค์ ธ๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค. ์ผ๋‹จ ๋ช…์„ธ์„œ์™€ ์ฝ˜์†”์ฐฝ์—์„œ ํ™•์ธํ•   ์ˆ˜ ์žˆ๋“ฏ์ด [[PromiseState]]๋ผ๋Š” ์†์„ฑ์˜ ๊ฐ’์—๋Š” ํ”„๋กœ๋ฏธ์Šค์˜ ์ƒํƒœ๊ฐ€(fulfilled, rejected...), [[PromiseResult]] ์†์„ฑ์˜ ๊ฐ’์—๋Š” resolve๋‚˜ reject ์•ˆ์— ์žˆ๋˜ ๊ฐ’์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์†์„ฑ์˜ ๊ฐ’์„ ๊บผ๋‚ด๋ ค๋ฉด then์ด๋‚˜ await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ, await์„ ์“ฐ๋Š”๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

๐ŸŽ ๊ธฐ์–ตํ•  ๊ฒƒ


โœ”๏ธ then์ด ๋ฐ˜ํ™˜ํ•œ ํ”„๋กœ๋ฏธ์Šค (์™ผ : ๋งค๊ฐœ๋ณ€์ˆ˜, ์˜ค : ๋ฆฌํ„ด๊ฐ’)
ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ดํ•œ ๊ฐ’ :  ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
๊ฐ’X : undefined ๋ฐ˜ํ™˜
์˜ค๋ฅ˜ ๋ฐœ์ƒ :  ๊ทธ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ + ๊ฑฐ๋ถ€
fulfilled ํ”„๋กœ๋ฏธ์Šค :  ๊ทธ ํ”„๋กœ๋ฏธ์Šค ๊ฒฐ๊ณผ๊ฐ’์„ ์ž์‹ ์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ดํ–‰ >> ๊ฐœ๋ด‰ ์™„๋ฃŒ
rejected ํ”„๋กœ๋ฏธ์Šค :  ๊ทธ ํ”„๋กœ๋ฏธ์Šค์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ž์‹ ์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๊ฑฐ๋ถ€
pending ํ”„๋กœ๋ฏธ์Šค :  ๊ทธ ํ”„๋กœ๋ฏธ์Šค์˜ ์ดํ–‰ ์—ฌ๋ถ€/๊ฒฐ๊ณผ๊ฐ’์„ ๋”ฐ๋ฆ„ >> ๊ฐœ๋ด‰ ์ „

 

๐ŸŽ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ


โœ”๏ธ Web Architecture
โœ”๏ธ async, await ์ข€๋” ์‚ดํŽด๋ณด๊ธฐ

 

โœ๏ธ JSON๋ฌธ์„œ๋ฅผ ํฌ๋กฌ์ฐฝ์—์„œ ๋ณผ ๋•Œ ์•ฝ๊ฐ„ ๋ˆˆ์ด ์•„ํŒ ๋Š”๋ฐ, JSONView๋ผ๋Š” ์ข‹์€ ํฌ๋กฌ ํ™•์žฅํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๋‹ค์šด๋ฐ›์•˜๋‹ค. ์‚ถ์˜์งˆ์ด ๋†’์•„์ง„๊ฒƒ๊ฐ™๋‹ค..!

๋ฐ˜์‘ํ˜•

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

210204_TIL  (0) 2021.02.05
210203_TIL  (0) 2021.02.04
210201_TIL  (0) 2021.02.02
210129_TIL  (0) 2021.01.30
210128_TIL  (0) 2021.01.29

๋Œ“๊ธ€