Skip to content

Frontend โ€‹

React, JavaScript, ๋ธŒ๋ผ์šฐ์ € ๋“ฑ ํ”„๋ก ํŠธ์—”๋“œ ๊ด€๋ จ ํฌ์ŠคํŠธ๋“ค์ž…๋‹ˆ๋‹ค.

Async Generator ๋กœ ํ˜‘๋ ฅ์  ์Šค์ผ€์ฅด๋ง ๊ตฌํ˜„ํ•˜๊ธฐ๋Œ€๊ทœ๋ชจ DFS ์ˆœํšŒ๋กœ ๋ฉˆ์ถฐ๋ฒ„๋ฆฐ UI ๋ฅผ Async Generator, Time Slicing, Macrotask ๋ฅผํ™œ์šฉํ•ด ์ˆœํšŒ์‹œ ์ทจ์†Œ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฐ˜์‘์„ฑ ์žˆ๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹คํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์›์ž์„ฑ ๋ณด์žฅํ•˜๊ธฐ (feat. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜ ์—…๋กœ๋“œ)413 Payload ์—๋Ÿฌ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ด๋ฏธ์ง€ ์••์ถ•, API ์ฒญํฌ ๋ถ„ํ• , ๋ถ€๋ถ„ ์„ฑ๊ณต ๋ณต๊ตฌ ๋กœ์ง์„ ๋„์ž…ํ•˜๋ฉฐ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ All or Nothing์„ ๊ตฌํ˜„ํ•œ ๊ฒฝํ—˜๊ธฐ์ •์  ์ขŒํ‘œ ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•œ ๋™์  ๋ณ„์ž๋ฆฌ ๋…ธ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์ถ•๊ธฐ๋ˆ„๋น„๋žฉ ๋ƒ ๋ƒ ํ”Œ๋Ÿฌ์Šค "์˜ค๋Š˜์ฐฐ์นต" ์„œ๋น„์Šค์˜ ๋ณ„์ž๋ฆฌ ๋งต ์‹œ์Šคํ…œ์„ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ขŒํ‘œ ๋Œ€์‹  ๊ธฐํ•˜ํ•™ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ Render Props ํŒจํ„ด์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.์ „์—ญ์ƒํƒœ๋Š” ์–ด๋–ค ๊ตฌ์กฐ๋กœ ์ €์žฅํ•ด์•ผ ์ข‹์„๊นŒ? (Nested ํ•œ ์ „์—ญ์ƒํƒœ์—์„œ ํƒˆ์ถœํ•˜๊ธฐ)์ „์—ญ์ƒํƒœ๋ฅผ ๊ทธ๋ƒฅ ํ•˜๋‚˜์˜ JSON ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ ๊ณผ, Redux Toolkit ์˜ createEntityAdapter ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ทœํ™”๋œ ์ „์—ญ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.SSE๋ฅผ Async Generator๋กœ : ์ง„์งœ ์ŠคํŠธ๋ฆผ์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๊ธฐServer Sent Events (SSE) ๋ฅผ ์™ธ๋ถ€์—์„œ๋„ ์ˆœ์ฐจ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ์„๊นŒ? ์ข…ํ•ฉ์„ค๊ณ„ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ LLM์œผ๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต์„ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Generator ๋ฅผ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.[๋ฒˆ์—ญ] ์™œ React Context ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ฉฐ Redux ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š”๊ฐ€์ด ๊ธ€์€ Mark Erikson์˜ "Why React Context is Not a 'State Management' Tool (and Why It Doesn't Replace Redux)" ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒˆ์—ญ ๋ฐ ๋ณด์™„ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ €์ž‘๊ถŒ์€ ์›๋ฌธ ์ €์ž์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์†Œ ์˜์—ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋ฆฌ์•กํŠธ์—์„œ๋„ ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ๋ณด์ž! - Renderer Props ํŒจํ„ด (feat.DIP)์˜์กด์„ฑ ์ฃผ์ž…์ด ๋ฐฑ์—”๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์ด๋ผ๊ณ ? ๋ฆฌ์•กํŠธ์—์„œ๋„ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ™œ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ๋ณด์ž! Renderer Props ํŒจํ„ด์„ ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ OCP, DIP ์›์น™๊ณผ ์—ฐ๊ฒฐ์ง€์–ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค[Redux ๊ณต์‹๋ฌธ์„œ ๋ฒˆ์—ญ] ์ „์—ญ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ• ๊นŒ? - Normalizing State ShapeRedux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒํƒœ ๊ตฌ์กฐ๋ฅผ ์ •๊ทœํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ์ด ๊ธ€์€ Redux ๊ณต์‹ ๋ฒˆ์—ญ์ด ์•„๋‹ˆ๋ฉฐ, ๊ฐœ์ธ ํ•™์Šต ๋ฐ ๊ณต์œ  ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ๋œ ๋น„๊ณต์‹ ๋ฒˆ์—ญ์ž…๋‹ˆ๋‹ค. (์›๋ฌธ : https://redux.js.org/usage/structuring-reducers/normalizing-state-shape)Isomorphic ์ด๋ž€ ๋ญ๊ณ  ์–ด๋–จ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ด๋ฐ์ผ๊นŒ ? (feat. useIsomorphicEffect ๋Š” ๋ญ˜๊นŒ)์˜คํ”ˆ์†Œ์Šค๋ฅผ ๋ณด๋‹ค๋ณด๋ฉด Isomorphic ์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Isomorphic ์ด๋ž€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–จ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ด๋ฐ์ธ์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๋˜ ๋ฆฌ์•กํŠธ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” useIsomorphicEffect ํ›…๋„ ํ•จ๊ป˜ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.๋ญฃ?! ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ ? JavaScript ๋ถˆ๋ณ€์„ฑ(Immutability) ์ดํ•ดํ•˜๊ธฐ๋ถˆ๋ณ€์„ฑ(Immutability) ๋Š” ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค ๋ณด๋ฉด ์ •๋ง ์ž์ฃผ ๋“ฃ๋Š” ๋‹จ์–ด๋‹ค. ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ง์€ ์ดํ•ด๋˜์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ทธ๊ฒŒ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ React ์—์„œ๋Š” ๊ผญ ์ง€์ผœ์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.