Hoonni
ํ›„๋‹ˆ's Blog

์ „์ฒด ๊ธ€

Hi There ! ๐Ÿ–๏ธ I am FrontEnd Developer ๐Ÿ’ป I'm studying AI, Backend, React-Native Now.
React/2022-ไธŠ

Promise all

Promise all ์šฐ์„  MDN์˜ Promise.all์„ ์‚ดํŽด๋ณด์ž !! Promise.all์ด๋ž€ ? Promise.all() ๋ฉ”์„œ๋“œ๋Š” MDN์—์„œ ์ด๋ ‡๊ฒŒ ์„ค๋ช…๋˜์–ด์žˆ๋‹ค. Promise.all() ๋ฉ”์„œ๋“œ๋Š” ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์— ์ฃผ์–ด์ง„ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ดํ–‰ํ•œ ํ›„, ํ˜น์€ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๋•Œ ์ดํ–‰ํ•˜๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฃผ์–ด์ง„ ํ”„๋กœ๋ฏธ์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ๋กœ ๊ฑฐ์ ˆํ•œ ํ”„๋กœ๋ฏธ์Šค์˜ ์ด์œ ๋ฅผ ์‚ฌ์šฉํ•ด ์ž์‹ ๋„ ๊ฑฐ๋ถ€ํ•œ๋‹ค. ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ !! Promise.all() - JavaScript | MDN Promise.all() ๋ฉ”์„œ๋“œ๋Š” ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์— ์ฃผ์–ด์ง„ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ดํ–‰ํ•œ ํ›„, ํ˜น์€ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๋•Œ ์ดํ–‰ํ•˜๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํ”„๋กœ๋ฏธ์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฑฐ๋ถ€ํ•˜..

React/2022-ไธŠ

Observable

Observable 1๏ธโƒฃ Observable Observable์€ observer๊ฐ€ ๊ตฌ๋…(subscribe)ํ•˜๋Š” ๋Œ€์ƒ์ด๋‹ค. Observable์ด ์•„์ดํ…œ์„ ๋ฐฉ์ถœํ•˜๋ฉด observer๊ฐ€ ๋ฐ˜์‘(react)ํ•œ๋‹ค. ์ด ํŒจํ„ด์€ ๋™์‹œ์„ฑ ์—ฐ์‚ฐ(concurrent operation)์„ ํŽธํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. โ”Œ ๋ธ”๋ก ์ƒํƒœ์—์„œ Observable์ด ์•„์ดํ…œ์„ ๋ฐฉ์ถœํ•˜๊ธธ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค. โ”” ๋Œ€์‹ , observer๊ฐ€ ๋ณด์ดˆ์ฒ˜๋Ÿผ ์„œ์„œ ์ ์ ˆํ•˜๊ฒŒ ๋ฐ˜์‘(react)ํ•  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค. 2๏ธโƒฃ ๋ฐฐ๊ฒฝ ReactiveX์—์„œ๋Š” Observer์— ์˜ํ•ด ๋ช…๋ น์–ด๋“ค์ด ๋ณ‘๋ ฌ(parallel)๋กœ ์‹คํ–‰๋˜๊ณ , ๊ฒฐ๊ณผ๊ฐ’์ด ์ž„์˜ ์ˆœ์„œ๋กœ ๋‚˜์ค‘์— ๋ฐ˜ํ™˜๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ  ๋ณ€ํ™˜ํ• ์ง€์— ๋Œ€ํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์„ Observable ํ˜•ํƒœ๋กœ ์ •์˜๋ฅผ ํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ, ์ด Ob..

React/2022-ไธŠ

token, XSS, CSRF

token, XSS, CSRF KWT์—๋Š” ๋‘๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ† ํฐ์ด ์žˆ๋‹ค. โ”Œ Access Token โ”” Refresh Token Access Token Access Token์„ ํ†ตํ•ด์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‘ ๊ฐ€์ง€ ํ† ํฐ์ค‘์—์„œ ์‹ค์ œ ๊ถŒํ•œ์— ์ ‘๊ทผํ•˜๋Š” ํ† ํฐ์ด๋‹ค. ์งง์€ ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ฐ€์ง„๋‹ค. Refresh Token Refresh Token์„ ํ†ตํ•ด์„œ ๋งŒ๋ฃŒ๋œ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. Access Token๋ณด๋‹ค ๊ธด ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ฐ€์ง„๋‹ค. ์ด ๋•Œ, ์œ ์ €๋Š” ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. Refresh Token์ด ํƒˆ์ทจ๋‹นํ•˜๋ฉด, ์œ„ํ—˜ํ•˜๊ธฐ์— ์ •๋ณด์— ๋ฏผ๊ฐํ•œ ์‚ฌ์ดํŠธ๋Š” Refresh Token์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. JWT์˜ ๊ตฌ์กฐ JWT์˜ ๊ตฌ์กฐ๋Š” Header / Payload / Signature๋กœ ์ด๋ฃจ์–ด..

React/2022-ไธŠ

Callback

Callback (์ฝœ๋ฐฑ ํ•จ์ˆ˜) Callback (์ฝœ๋ฐฑ ํ•จ์ˆ˜)๋ž€ ? JS์—์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค. Node.js ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฐœ๋…์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ž€ ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„, ์ˆ˜ํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. JS์—์„œ ํ•จ์ˆ˜๋Š” 1๊ธ‰๊ฐ์ฒด์ด๋ฏ€๋กœ, ์ธ์ž ์ „๋‹ฌ ์‹œ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. โ”Œ ์œ„์˜ ์ฝ”๋“œ๋Š” submitBtn ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” jQuery ์ฝ”๋“œ์ด๋‹ค. โ”œ ์ฆ‰, ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ์ธ click์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์ž‘์„ฑ๋œ ๊ฒƒ์ด๋ฉฐ, ๊ทธ ๋‚ด์šฉ์€ alert()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. โ”” click์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋„ค์ด๋ฐ์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ต๋ช…ํ•จ์ˆ˜์ด๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ์ด๋ ‡๊ฒŒ ์ต๋ช…ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ๋œ๋‹ค. Callbac..

React/2022-ไธŠ

flatten, unflatten

flatten, unflatten ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” flatten์€ ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. unflatten unflatten์€ ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. โ”” ์œ„์™€ ๊ฐ™์€ ๋ฐฐ์—ด์•ˆ์— ๋ฐฐ์—ด์ด ์ค‘์ฒฉ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ unflatten์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. flatten flatten์€ ์ค‘์ฒฉ ๋ฐฐ์—ด์„ ํ‰ํƒ„ํ™” ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. โ€ป ํ‰ํƒ„ํ™” ? → ์ค‘์ฒฉ ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. flatten์˜ ๋ฐฉ๋ฒ• Array.prototype.flat() ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” flat์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. flat ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ํ•˜์œ„ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ง€์ •ํ•œ ๊นŠ์ด๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ์ด์–ด๋ถ™์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค. โ”” ์‚ฌ์šฉํ•  ๋•Œ ํ‰ํƒ„ํ™” ํ•  ๊นŠ์ด๋ฅผ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. (default ๊ฐ’์€ ..

React/2022-ไธŠ

Recursive Functions

Recursive Functions (์žฌ๊ท€ ํ•จ์ˆ˜) ์–ด๋–ค ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋‹ค์‹œ ์ž๊ธฐ ์ž์‹ ์„ ๋ถ€๋ฅด๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋งˆ์น˜ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋“ฏ ์ž๊ธฐ ์ž์‹ ์„ ๋Š์ž„์—†์ด ๋ถ€๋ฅด๋‹ค๊ฐ€ ํŠน์ • ์กฐ๊ฑด์ด ๋˜๋ฉด ๋น ์ ธ๋‚˜์˜ค๋Š” ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. Recursive Function (์žฌ๊ท€ ํ•จ์ˆ˜)์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ๋ฒ• ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋‚˜์™€ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•ด ์ค€๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“  ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋‹ค์‹œ ๋‚˜๋ฅผ ๋ถ€๋ฅด๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œํžˆ ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์€ ํŠนํžˆ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ์ฃผ์˜ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด๋‹ค. Recursive Function (์žฌ๊ท€ ํ•จ์ˆ˜)์˜ ์˜ˆ โ”” ๊ฒฐ๊ณผ๋กœ 5! = 120์ด ๋‚˜์˜จ๋‹ค. ์œ„..

Web Basic/JavaScript

ES6์˜ ํŠน์ง•

ES6์˜ ํŠน์ง• let๊ณผ const ์ „ํ†ต์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜์Šค์ฝ”ํ”„์™€ ์ „์—ญ์Šค์ฝ”ํ”„๋งŒ์„ ์ง€์›ํ•˜์—ฌ ๋ณ€์ˆ˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ ์ ‘๊ทผ์„ ์ œ์–ดํ•œ๋‹ค. ํ•˜์ง€๋งŒ ES6์—์„œ๋ถ€ํ„ฐ๋Š” ๋ธ”๋ก์Šค์ฝ”ํ”„๋„ ์ง€์›ํ•˜๊ฒŒ ๋๋‹ค. ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด let๊ณผ const โ”Œ ์œ„์˜ ์ฝ”๋“œ๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์—์„œ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์ง€๋งŒ, โ”œ ํ•จ์ˆ˜์Šค์ฝ”ํ”„์™€ ์ „์—ญ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ฌธ์ œ์—†์ด ์ž‘๋™ํ•œ๋‹ค. โ”” ๊ทธ๋Ÿฌ๋‚˜, ์ด๋Š” ๋งŽ์€ ์—๋Ÿฌ์™€ ๋ฒ„๊ทธ์˜ ์›์ธ์ด์—ˆ์œผ๋ฉฐ, let๊ณผ const๊ฐ€ ๋„์ž…๋œ ์ด์œ ์˜€๋‹ค. โ”Œ let์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋ธ”๋ก์•ˆ์—์„œ๋งŒ ์œ ํšจํ•˜๊ฒŒ ๋œ๋‹ค. โ”œ ๋”ฐ๋ผ์„œ, ๋ธ”๋ก ๋ฐ–์—์„œ ์ ‘๊ทผํ–ˆ๋”๋‹ˆ ReferenceError๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. โ”œ const ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ธ”๋ก์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค. โ”œ const์™€ let์˜ ์ฐจ์ด์ ์€ const๋Š” ..

Web Basic/JavaScript

==, === ์ฐจ์ด์ 

==, === ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์—„๊ฒฉํ•œ ๋น„๊ต์™€ ์œ ํ˜•๋ณ€ํ™˜ ๋น„๊ต๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•จ ๋”ฐ๋ผ์„œ, ์–ด๋–ค ์—ฐ์‚ฐ์ž๊ฐ€ ์–ด๋–ค ๋น„๊ต์กฐ๊ฑด์— ์‚ฌ์šฉ๋˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•จ ===๋Š” ๋ณ€์ˆ˜ ์œ ํ˜•์„ ๊ณ ๋ คํ•จ โ”” ์—„๊ฒฉํ•œ ๋น„๊ต๋ฅผ ํ•จ ([๊ฐ’ & ์ž๋ฃŒํ˜•] -> true) ==๋Š” ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํ˜•์„ ์ˆ˜์ •ํ•จ โ”” ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋‘ ๋ณ€์ˆ˜์˜ [๊ฐ’] ๋น„๊ต ์˜ˆ์‹œ โ”” 0๊ฐ’์€ false์™€ ๋™์ผํ•˜๋ฏ€๋กœ true ์ถœ๋ ฅ โ”” ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์œ ํ˜•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— false ์ถœ๋ ฅ โ”” ์ž๋™ ์œ ํ˜•๋ณ€ํ™” ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— true ์ถœ๋ ฅ โ”” ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์œ ํ˜•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— false ์ถœ๋ ฅ โ”” ์ž๋™ ์œ ํ˜•๋ณ€ํ™” ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— true ์ถœ๋ ฅ โ”” ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์œ ํ˜•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— false ์ถœ๋ ฅ !=์™€ !== ๋น„๊ต์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด๋Š” ? โ”” ๊ฐ’์ด ๋‹ค๋ฅด์ง€ ์•Š์œผ๋ฏ€๋กœ(์ž๋ฃŒํ˜• ๋น„๊ต ์•ˆํ•˜๋ฏ€๋กœ) fals..