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

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป dev

(35)
ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ( ft. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ๊ณผ๊ฑฐ, ํ† ์Šค์˜ ์„ ํƒ, ๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ž˜) ๐Ÿค” turborepo๋กœ ๋ชจ๋…ธ๋ ˆํฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์„ค์น˜๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋“ค ์ค‘ ์–ด๋–ค ๊ฑธ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜? ์ด๋“ค์˜ ์ฐจ์ด์™€ ์„ ํƒ ๊ธฐ์ค€์€ ๋ญ˜๊นŒ?๐Ÿ€ ๋•Œ๋งˆ์นจ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์งš๊ณ  ๋„˜์–ด๊ฐ€ ๋ณด๋ ค๋‹ค๊ฐ€ ํ† ์Šค์— ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ๊ณผ๊ฑฐ, ํ† ์Šค์˜ ์„ ํƒ, ๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ž˜๋ž€ ์ข‹์€ ๊ธ€์ด ์˜ฌ๋ผ์™€์„œ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์‚ดํŽด๋ณผ ๋‚ด์šฉ- ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋ฌด์—‡์ธ์ง€- ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๋™์ž‘ํ•˜๋Š” 3๊ฐ€์ง€ ๋‹จ๊ณ„- npm vs pnpm vs Yarn PnP- ํ† ์Šค์˜ Pick ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ž€?๋ชจ๋“ˆ์‹œ์Šคํ…œ (ESM & CJS)์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค˜๋“ฏ์ด JS/TS์—์„œ๋Š” require ํ˜น์€ import๋กœ ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.์—ฌ๊ธฐ์„œ ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐธ์กฐํ•˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ”๋กœ๋ฐ”๋กœ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋‹ค...
ํ† ์Šคใ…ฃSLASH 23 - ํผ๋„ : ์Ÿ์•„์ง€๋Š” ํŽ˜์ด์ง€ ํ•œ ๋ฐฉ์— ๊ด€๋ฆฌํ•˜๊ธฐ (TOSH | SLASH 23 - Funnel Pattern : Organizing an overflow of pages at once) โš ๏ธ ์ €์ž‘๊ถŒ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์ž๋ฃŒ ๋ฐ ์˜ˆ์‹œ๊ฐ€ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” Reactโš›๏ธ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๐Ÿซจ ํ†ต์‹ ์‚ฌ ๊ฐ€์ž…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธด ํผ๊ณผ ์•ฝ์ •์ด ํฌํ•จ๋œ ํŽ˜์ด์ง€๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋  ๋•Œ๊ฐ€ ์žˆ๋‹ค.์ด๋ ‡๊ฒŒ ๋งŽ์€ ํŽ˜์ด์ง€๋“ค์„ ๋„˜๋‚˜๋“œ๋Š” ํ๋ฆ„์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ญ˜๊นŒ?์ด๋ฒˆ๊ธ€์—์„œ๋Š” ํ† ์Šค SLASH23์—์„œ ๋‹ค๋ฃฌ ํผ๋„์„ ํ†ตํ•œ ๋ถ„๊ธฐ์™€ ์ƒํƒœ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋Œ€ํ‘œ์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ํŒจํ„ด๋“ค1. ์ƒ์  ๋ชฉ๋ก ํŽ˜์ด์ง€ -> ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋ธ”๋กœ๊ทธ๋‚˜ ๋‰ด์Šค, To-do ๋ฆฌ์ŠคํŠธ๋„ ์ด ์œ ํ˜•์— ํ•ด๋‹น๋œ๋‹ค. 2. ๋‹จ์ผ ํŽ˜์ด์ง€ ํŽ˜์ด์ง€ ์ด๋™ ์—†์ด ํ•œ ํ™”๋ฉด ๋‚ด์—์„œ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ง€๋„๋‚˜ ๋ฉ”์‹ ์ € ์•ฑ์ด ์ด ์œ ํ˜•์— ํ•ด๋‹น๋œ๋‹ค. 3. ์„ค๋ฌธ์กฐ์‚ฌ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋“ค์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ์ˆ˜์ง‘ -> ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋กœ ์ด๋ฃจ..
๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๐Ÿ—ฃ๏ธ import๊ณผ require์˜ ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ๊ณ„์‹œ๋‚˜์š”?  ๐Ÿค” ๋…ธ๋“œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” require ๋งŽ์ด ๋ณธ ๊ฑฐ ๊ฐ™๊ณ , react์—์„œ  import ๋งŽ์ด ์ผ๋˜ ๊ฑฐ ๊ฐ™์€๋ฐ? import๊ณผ require์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค.์˜ค๋Š˜์€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ๋ฌด์—‡์ด๊ณ , ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ํŠน์ง•๊ณผ ์žฅ๋‹จ์ ์„ ์‚ดํŽด๋ณด์ž.JS ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด๋ž€?์˜ˆ์ „ ์›น์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์€ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ์ •๋„์˜€๋‹ค.ํ•˜์ง€๋งŒ ์ ์ฐจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์—ญํ• ์ด ๊ฑฐ๋Œ€ํ•ด์ง€๊ณ , ๊ธฐ๋Šฅ๋“ค์„ ๋งŒ๋“ค๋ฉด์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฉฐ dependency๋ฉฐ ๊ด€๋ฆฌํ•  ๊ฒƒ๋„ ๋น„๋ก€(์ •๋น„๋ก€๋Š” ์•„๋‹ ์ˆ˜๋„?)ํ•ด์„œ ๋ฐฉ๋Œ€ํ•ด์กŒ๋‹ค.๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ ์ด๋ ‡๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ์Šค์ฝ”ํ”„ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ์œผ๋กœ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.J..
โš›๏ธ Error boundary ๐Ÿ˜ฑ ์•ฑ ๊ฐœ๋ฐœ ๋„์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋จธ๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์ €์—๊ฒŒ ๋ณด์—ฌ์ค„ ํ™”๋ฉด๋„ ์ƒˆํ•˜์–—๊ฒŒ ๋ณ€ํ•  ๊ฑฐ ๊ฐ™๋‹ค.๐Ÿค” ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ?๋ฆฌ์•กํŠธ์˜ Error boundary (legacy)๊ฐœ๋ฐœ ๋ฌธ์„œ์— ์˜ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์•กํŠธ๋Š” ๋ Œ๋”๋ง ๋„์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด UI๋ฅผ ํ™”๋ฉด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น UI๋ฅผ Error boundary๋กœ ๊ฐ์‹ธ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, Error boundary๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ์ œ๊ฑฐ๋œ UI๋Œ€์‹ ์— ํ™”๋ฉด์— fallback UI๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํŠน์ˆ˜ํ•œ ์ปดํฌ๋„ŒํŠธ๋‹ค. Error boundary๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” static getDerivedStateFromError๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.static getDerivedStateFromError๋ฅผ ์ œ๊ณตํ•ด์•ผ ์—๋Ÿฌ..
โš›๏ธ <Suspense> ํ™œ์šฉ ์ด์ „ ๊ธ€: 2024.06.15 - [๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป dev] - โš›๏ธ ๋ž€? ์—์„œ๋Š” ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์˜ Suspense props์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋‹ค. ๋ž€?" data-og-description="๐Ÿ—ฃ๏ธ 'Suspense'๋ฅผ ์จ๋ณด์‹  ์  ์žˆ๋‚˜์š”? ์žˆ๋‹ค๋ฉด ์–ธ์ œ, ์™œ ์“ฐ์‹œ๋‚˜์š”? ์•ˆ์“ฐ๋ฉด ์–ด๋–ค ์ ์ด ๋ถˆํŽธํ•˜๋‚˜์š”? ์“ฐ๊ธด ์“ฐ๋Š”๋ฐ..๋กœ๋”ฉ ์ค‘์— ๋Œ€์‹  ๋ณด์—ฌ์ค„ UI๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋‹Œ๊ฐ€?  ๋ฆฌ์•กํŠธ์˜ ๊ณต์‹๋ฌธ์„œ์— ์˜ํ•˜๋ฉด " data-og-host="pyotato-dev.tistory.com" data-og-source-url="https://pyotato-dev.tistory.com/9" data-og-url="https://pyotato-dev.tistory.com/9" data-og-image="https://scrap.kakao..
โš›๏ธ <Suspense>๋ž€? ๐Ÿ—ฃ๏ธ 'Suspense'๋ฅผ ์จ๋ณด์‹  ์  ์žˆ๋‚˜์š”? ์žˆ๋‹ค๋ฉด ์–ธ์ œ, ์™œ ์“ฐ์‹œ๋‚˜์š”? ์•ˆ ์“ฐ๋ฉด ์–ด๋–ค ์ ์ด ๋ถˆํŽธํ•˜๋‚˜์š”? ์“ฐ๊ธด ์“ฐ๋Š”๋ฐ..๋กœ๋”ฉ ์ค‘์— ๋Œ€์‹  ๋ณด์—ฌ์ค„ UI๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋‹Œ๊ฐ€?  ๋ฆฌ์•กํŠธ์˜ ๊ณต์‹๋ฌธ์„œ์— ์˜ํ•˜๋ฉด ๋Š” children์ด ๋กœ๋”ฉ ์ „๊นŒ์ง€ ๋ณด์—ฌ์ค„ fallback ์š”์†Œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค.๋ฆฌ์•กํŠธ์˜ ์— ๋Œ€ํ•ด์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ธฐ ์ „์—,Suspend๋ผ๋Š” ๋‹จ์–ด์˜ ๋œป์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ณ  ๊ฐ€๋ฉด ๋ฅผ ์™œ ์“ฐ๊ณ , ์–ธ์ œ ์“ฐ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. Suspend๋Š” ์ผ์‹œ์ ์œผ๋กœ ์–ด๋–ค ๋™์ž‘์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ (temporarily prevent from continuing or being in force or effect)์ด๋‹ค. ๊ทธ๋Ÿผ ๋ฆฌ์•กํŠธ์˜ ๋Š” ์–ด๋–ค ๋™์ž‘์„ ์–ธ์ œ ์ž ์‹œ ๋ฉˆ์ถฐ์ฃผ๋Š” ๊ฑธ..
์„ ์–ธ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ ๐Ÿ—ฃ๏ธ '์„ ์–ธ์ ์ธ ์ฝ”๋“œ'์— ๋Œ€ํ•ด์„œ ๋“ค์–ด๋ณด์…จ๋‚˜์š”? ๋“ค์–ด๋Š” ๋ดค๋Š”๋ฐ.. ๋ญ์ง€? ํ† ์Šค ํ”„๋ก ํŠธ์—”๋“œ ์ฑ•ํ„ฐ์—์„œ๋Š” ์„ ์–ธ์ ์ธ ์ฝ”๋“œ (Declarative Code)๋ฅผ ์ถ”์ƒํ™” ๋ ˆ๋ฒจ์ด ๋†’์•„์ง„ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ถ”์ƒํ™” ๋ ˆ๋ฒจ์ด ๋†’์•„์ง„ ์ฝ”๋“œ๋ž€?  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ sum์„ ์‚ดํŽด๋ณด์ž. sum([1,2,3]);// sum ํ•จ์ˆ˜์˜ ๊ตฌํ˜„ function sum(nums: number[]) { let result = 0; for (const num of nums) { result += num; } return result;} sum ํ•จ์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’์€ 0์ด๊ณ , for๋ฌธ์„ ๋Œ๋ฉด์„œ ๋ฐฐ์—ด์˜ ๊ฐ ์ˆ˜๋ฅผ ๋”ํ•˜๊ณ ,๋”ํ•ด์ง„ ๊ฒฐ๊ด๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. ์ด ์ž‘์—…์ด ์ถ”์ƒํ™”๋˜์–ด,  sum ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋‚ด๋ถ€์˜ ๋ณต์žกํ•œ ์ œ..
[spotify-api] VINYLIFY : ์Šคํฌํ‹ฐํŒŒ์ด apiํ™œ์šฉํ•œ ๊ฒ€์ƒ‰ + ์žฌ์ƒ ํ”„๋กœ์ ํŠธ(3) ์ค€๋น„๋ฌผ: authorization์„ ๋‹ด๋‹นํ•  ์„œ๋ฒ„ ์ฝ”๋“œ 2024.06.12 - [๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป dev] - [spotify-api] VINYLIFY : ์Šคํฌํ‹ฐํŒŒ์ด apiํ™œ์šฉํ•œ ๊ฒ€์ƒ‰ + ์žฌ์ƒ ํ”„๋กœ์ ํŠธ(2) ์ค€๋น„๋ฌผ: authorization์„ ๋‹ด๋‹นํ•  ์„œ๋ฒ„์— ์ด์–ด์„œ [spotify-api] VINYLIFY : ์Šคํฌํ‹ฐํŒŒ์ด apiํ™œ์šฉํ•œ ๊ฒ€์ƒ‰ + ์žฌ์ƒ ํ”„๋กœ์ ํŠธ(2) ์ค€๋น„๋ฌผ: authorization์„ ๋‹ด๋‹นํ•  ์„œ2024.06.12 - [๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป dev] - [spotify-api] VINYLIFY : ์Šคํฌํ‹ฐํŒŒ์ด apiํ™œ์šฉํ•œ ๊ฒ€์ƒ‰ + ์žฌ์ƒ ํ”„๋กœ์ ํŠธ(1) ์ค€๋น„๋ฌผ:spotify dev ๊ณ„์ •, application ์— ์ด์–ด์„œ.. [spotify-api] VINYLIFY : ์Šคํฌํ‹ฐํŒŒ์ด apiํ™œ์šฉํ•œ ๊ฒ€์ƒ‰ + ์žฌ์ƒ ํ”„pyotato-dev.tistory.com ์ด์ œ ๋ฐฐํฌํ•  ์ค€๋น„๋ฅผ..