๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

(12)
[ TypeScript ] ํ˜‘์—…์„ ์œ„ํ•œ interface ์— ํžŒํŠธ ์ฃผ์„ ๋‹ฌ๊ธฐ. ts๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœ ์ค‘์— interface์— ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค~! ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ํ‰์†Œ์—๋Š” method๋‚˜ method parameter์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋‹ฌ์•„์ค„ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋˜ JSDoc์„ ์ด์šฉํ•˜์—ฌ interface ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•ด ๋ณด์•˜๋‹ค. ๋จผ์ € JSDoc์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์ž๋ฉด, JSDoc์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์šฉ API ๋ฌธ์„œ ์ƒ์„ฑ๊ธฐ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ API๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. module, namespaces, classes, methods, method parameters ๋“ฑ๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ๋“ค์„ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. JSDoc์€ ์ฝ”๋“œ ์ž์ฒด์™€ ํ•จ๊ป˜ ์†Œ์Šค์ฝ”๋“œ์— ์ง์ ‘ ๋ฌธ์„œ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. JSDoc ์ฃผ์„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜๋ ค๋Š” ์ฝ”๋“œ ๋ฐ”๋กœ ์•ž์— ์œ„์น˜..
[ WEB ] CSR๊ณผ SSR ๋น„๊ตํ•˜๊ธฐ CSR(client-side-rendering)๊ณผ SSR(server-side-rendering)์€ ์›น ํŽ˜์ด์ง€์™€ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. SSR๊ณผ CSR์€ ๋ Œ๋”๋ง ๊ณผ์ •์ด ์ผ์–ด๋‚˜๋Š” ์œ„์น˜์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. CSR (Client-Side-Rendering) CSR์€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ Œ๋”๋ง์„ ํ•˜๋Š” ๊ธฐ์ˆ ๋กœ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ JavaScript๋ฅผ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. ์„œ๋ฒ„์—์„œ ์ตœ์†Œํ•œ์˜ HTML ํŒŒ์ผ์„ ๋ณด๋‚ด๊ณ , ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript ์ฝ”๋“œ๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์™€ ๋ Œ๋”๋งํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ๋” ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•˜๊ณ  ๋™์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ณ  ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ..
[ JavaScript / Promise ] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Promise์— ๋Œ€ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค๋ฉด ๊ณผ๊ฑฐ์—๋Š” ์ฃผ๋กœ ์ฝœ๋ฐฑ ํŒจํ„ด์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ฝœ๋ฐฑ ํŒจํ„ด์€ ์ฝœ๋ฐฑ ํ—ฌ๋กœ ์ธํ•ด ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๊ณ  ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋ฒˆ์— ํ•˜๊ธฐ๋„ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ES6์—์„œ ๋„์ž…๋œ Promise๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋‹จ์ ๋“ค์„ ๋ณด์™„ํ•˜๋ฉฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ž€? ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์—ฌ ํ•ด๋‹น ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ๋กœ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ดด๋ฅผ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜..
[ React / Redux ] Redux ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐœ๋…์ •๋ฆฌ. ๊ธฐ์กด์— ๋‚ด๊ฐ€ React ํ”„๋กœ์ ํŠธ์— ์ฆ๊ฒจ ์‚ฌ์šฉํ•˜๋˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” recoil ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ํšŒ์‚ฌ์—์„œ๋Š” Mobx์™€ Redux๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ Redux ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉฐ ๊ฐœ๋… ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. Redux ๊ธฐ๋ณธ ๊ฐœ๋… Redux๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•ฑ์„ ์œ„ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค. ์ผ๊ด€์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ (์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ, ๋„ค์ดํ‹ฐ๋ธŒ)์—์„œ ์ž‘๋™ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์‰ฌ์šด ์•ฑ์„ ๋งŒ๋“ค๋„๋ก ๋„์™€์ฃผ๋ฉฐ Redux๋Š” React๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งค์šฐ ์ž‘์€ ์šฉ๋ž‘(์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌํ•จ 2KB)์œผ๋กœ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Redux๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ SPA์—์„œ ๊ฐ–์ถ”์–ด์•ผ ํ•  ์š”๊ฑด๋“ค์ด ์ ์  ๋ณต์žกํ•ด์ง์— ๋”ฐ๋ผ ๋งŽ์€..
[ JavaScript ] undefined์™€ null์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ '๋นˆ'๊ฐ’์„ ์˜๋ฏธํ•˜๋Š” ๋น„์Šทํ•œ ์›์‹œ ๊ฐ’์ด ์กด์žฌํ•˜๋Š”๋ฐ ๋ฐ”๋กœ null๊ณผ undefined ์ด๋‹ค. 1. undefined ES6๊ธฐ์ค€ 7๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ค‘ ํ•˜๋‚˜์ธ undefined๋Š” var ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์„ ์–ธ์„ ํ•˜๋ฉด ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ• ๋‹น๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ( let ํ‚ค์›Œ๋“œ์™€ const ํ‚ค์›Œ๋“œ๋Š” undefined๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Œ. ) var user; console.log(user); // undefined undefined์˜ ๊ฐ’์€ undefined๊ฐ€ ์œ ์ผํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์ค€ ๋นˆ ๊ฐ’์ด ์•„๋‹ˆ๋ผ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด undefined๋กœ ์ดˆ๊ธฐํ™”๋œ ๊ฐ’์ด๋‹ค. console๋กœ ์ฐ์—ˆ์„ ๋•Œ u..
[ JavaScript ] var, let, const ํŒŒํ—ค์น˜๊ธฐ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ๋Š” var, let, const ์ด๋ ‡๊ฒŒ ์ด 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. 1. var var ํ‚ค์›Œ๋“œ๋Š” ES6 ์ด์ „( let, const๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ด์ „ )์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋˜ ํ‚ค์›Œ๋“œ์˜€๋‹ค. var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์•”๋ฌต์ ์œผ๋กœ "์„ ์–ธ"๋‹จ๊ณ„์™€ "์ดˆ๊ธฐํ™”"๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ์„ ์–ธ ๋‹จ๊ณ„์—์„œ๋Š” ์Šค์ฝ”ํ”„์— ๋ณ€์ˆ˜ ์‹๋ณ„์ž๋ฅผ ๋“ฑ๋กํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ๋ณ€์ˆ˜์˜ ์กด์žฌ๋ฅผ ์•Œ๋ฆฌ๊ณ  ๊ทธ ์ฆ‰์‹œ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ undefined๋กœ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. var ํ‚ค์›Œ๋“œ๋Š” ๋ณ€์ˆ˜ ๋ธ”๋ก์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ , ํ˜„์žฌ ํ•จ์ˆ˜(var ํ‚ค์›Œ๋“œ๋ฅผ ์„ ์–ธํ•œ ํ•จ์ˆ˜)๋˜๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„ ์–ด๋””์—์„œ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค. // ๋ณ€์ˆ˜ a์— ๋Œ€ํ•ด ์„ ์–ธ. var a; ์ด๋ ‡..
[ JavaScript / Error ] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Error ๊ฐ์ฒด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Error ๊ฐ์ฒด๋ฅผ ๋˜์ ธ์ฃผ๊ณ  ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋ฅผ ํ†ตํ•ด ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ  ๋””๋ฒ„๊น…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Error์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. Error ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์—๋Ÿฌ ๊ฐ์ฒด๋Š” message ํ”„๋กœํผํ‹ฐ(Error ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€)์™€ stack ํ”„๋กœํผํ‹ฐ(์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ฝœ์Šคํƒ์˜ ํ˜ธ์ถœ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด)๋ฅผ ๊ฐ–๋Š”๋‹ค. ์•„๋ž˜์˜ ํ‘œ๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ ๋‚ด์žฅ ์˜ค๋ฅ˜ ์œ ํ˜•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์œ ํ˜•(์ƒ์„ฑ์ž ํ•จ์ˆ˜) ์ธ์Šคํ„ด์Šค EvalError ์ „์—ญ ํ•จ์ˆ˜ eval()์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๊ฐ์ฒด RangeError ์ˆซ์ž ๋ณ€์ˆ˜๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๊ฐ์ฒด ReferenceError ์ž˜๋ชป๋œ ์ฐธ์กฐ์— ๋Œ€ํ•ด ๋ฐœ์ƒํ•˜๋Š” ..
[ Javascript ] ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ. ์›์‹œ ๊ฐ’ (Primitive) MDN - ์›์‹œ ๊ฐ’ ์„ค๋ช… ์›์‹œ ๊ฐ’ - ์šฉ์–ด ์‚ฌ์ „ | MDN JavaScript์—์„œ ์›์‹œ ๊ฐ’(primitive, ๋˜๋Š” ์›์‹œ ์ž๋ฃŒํ˜•)์ด๋ž€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉด์„œ ๋ฉ”์„œ๋“œ๋„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์›์‹œ ๊ฐ’์—๋Š” 7์ข…๋ฅ˜, string, number (en-US), bigint (en-US), boolean, undefined, symbol, ๊ทธ๋ฆฌ๊ณ  null์ด developer.mozilla.org ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์›์‹œ ๊ฐ’์€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๊ณ , ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ด 7๊ฐ€์ง€์˜ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. - string - number - bigint - boolean - undefined - symbol - null ์›์‹œ ํƒ€์ž…์˜ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์œผ๋กœ, ๋ณ€์ˆ˜์— ์›์‹œ ๊ฐ’์„ ์žฌํ• ..