[TECH-QA] Lodash compact ํ•จ์ˆ˜

compact ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์—์„œ falsy ๊ฐ’(null, undefined, false, 0, '', NaN ๋“ฑ)์„ ์ œ๊ฑฐํ•˜์—ฌ ์œ ํšจํ•œ ๊ฐ์ฒด๋งŒ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฐ์—ด์„ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ•„ํ„ฐ๋งํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

[TECH-QA] ES6+์—์„œ ๊ฐ์ฒด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง(...rest)

odash์—์„œ _.omit๊ณผ _.pick์€ ๊ฐ์ฒด์—์„œ ํŠน์ • ์†์„ฑ์„ ํ•„ํ„ฐ๋งํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋กœ, ๋น„์Šทํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง€์ง€๋งŒ ๋™์ž‘ ๋ฐฉ์‹์ด ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์— ์ฐจ์ด์ ์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

[TECH-QA] class-variance-authority ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

CVA๋Š” JavaScript/TypeScript ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, CSS ํด๋ž˜์Šค ์ด๋ฆ„์„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ ๋ณ€ํ˜•(variants)์„ ์‰ฝ๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ํŠนํžˆ Tailwind CSS์™€ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํผ์ŠคํŠธ CSS ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, React, Vue, Angular ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

[TECH-QA] React์—์„œ SVG ์•„์ด์ฝ˜ ๋‹ค๋ฃจ๊ธฐ: ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ์™€ ํŒ

React์—์„œ ref๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ์„ฑํ•˜์—ฌ ์ž์‹ ์ปดํฌ๋„ŒํŠธ(์˜ˆ: _Icon)์— ์ „๋‹ฌํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด SVG์™€ ๊ฐ™์€ DOM ์š”์†Œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ์ด์œ ์™€ ์šฉ๋„๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

[TECH-QA] TypeScript๋กœ ๊น”๋”ํ•œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ: Record<string, never> ํ™œ์šฉ๋ฒ•

qsStringify์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ buildQueryString๋ฅผ TypeScript๋กœ ์ž‘์„ฑํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ๊ฐ์ฒด๋ฅผ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’(null, undefined, ๋นˆ ๋ฌธ์ž์—ด/๋ฐฐ์—ด)์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. Record<string, never>๋ฅผ ๊ธฐ๋ณธ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•ด ๋นˆ ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.