naver/fe-news ๋‰ด์Šค๋ ˆํ„ฐ ๋ทฐ์–ด (๋น„๊ณต์‹)

๋ชฉ์ฐจ
๋ชฉ์ฐจ

    2023-09

    ๐Ÿ“š ๋งํฌ & ์ฝ์„ ๊ฑฐ๋ฆฌ

    ์„ฑ๋Šฅ ํ•˜๋ฉด ๋น ์งˆ ์ˆ˜ ์—†๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜, ๋„ค๊ฐ€ ๊ถ๊ธˆํ•ด

    React์—์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ์„ฑ๋Šฅ ๊ฐœ์„ ์˜ ๋งŒ๋Šฅ ํ•ด๊ฒฐ์ฑ…์ผ๊นŒ?

    ์ด ๊ธ€์—์„œ๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ์ž˜ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ์ผ€์ด์Šค์™€ ์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉฐ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.

    ๊ธ€์„ ์ฝ๊ณ  ๋‚œ ํ›„์—๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์„ ์ €ํ•˜ ์‹œํ‚ค๋Š”์ง€, ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

    State of CSS 2023

    ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž๋“ค์˜ CSS ํ˜„ํ™ฉ ์„ค๋ฌธ์กฐ์‚ฌ ๊ฒฐ๊ณผ๊ฐ€ ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

    CSS Frameworks ๋ถ€๋ฌธ์—์„œ๋Š” Tailwind CSS๊ฐ€ ์ „๋…„๋„์— ์ด์–ด ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉ๋Ÿ‰์ด ์šฐ์ƒํ–ฅ ํ•˜๋ฉฐ 50%๋ฅผ ๊ธฐ๋กํ–ˆ๊ณ  ๊ฐ€์žฅ ๋†’์€ ๊ธ์ •์ ์ธ ๊ฒฝํ—˜์„ ๋‚˜ํƒ€๋‚ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ด€์‹ฌ๋„์™€ ๋งŒ์กฑ๋„ ๋ถ€๋ถ„์—์„œ๋Š” Open Props๊ฐ€ Tailwind CSS๋ฅผ ์•ž์ง€๋ฅด๋Š” ๋ชจ์Šต์„ ๋ณด์˜€๋‹ค.

    CSS-in-JS ๋ถ€๋ฌธ์—์„œ๋Š” CSS Modules๊ฐ€ ๊ฐ€์žฅ ํฐ ๋งŒ์กฑ๋„๋ฅผ ๋ณด์˜€๊ณ  Styled Components๊ฐ€ ๊ทธ ๋’ค๋ฅผ ์ด์—ˆ๋‹ค.

    CSS Frameworks์™€ CSS-in-JS ์‚ฌ์šฉ์ž์˜ ํ–‰๋ณต๋„๋ฅผ ๋น„๊ตํ•˜๋ฉด ๊ฐ๊ฐ 35.1%, 20.3%๋กœ CSS Frameworks ์‚ฌ์šฉ์ž์˜ ํ–‰๋ณต๋„๊ฐ€ ์ข€ ๋” ๋†’์•˜๋‹ค.

    Randomness in CSS using trigonometry

    ์ตœ์‹  ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์—์„œ๋Š” ์ƒˆ๋กœ์šด CSS Trigonometric functions(์‚ผ๊ฐํ•จ์ˆ˜)๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ๋Š”๊ฐ€? ์ด ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ „์—๋Š” ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ CSS ๋ ˆ๋ฒจ์—์„œ ์ˆ˜ํ•™์  ๊ณ„์‚ฐ์„ ๋ณด๋‹ค ์ •๊ตํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด ๊ธ€์—์„  ์ด๋“ค ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด pseudo-random ๊ฐ’๋“ค์„ ์ƒ์„ฑํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ ์œ„์น˜ ๋“ฑ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

    [์ฐธ๊ณ ] ์‚ผ๊ฐํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋ณด๋‹ค ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ผ.

    htmx

    ์›น ๊ฐœ๋ฐœ์˜ ๋Œ€๋ถ€๋ถ„์€ HTML/CSS์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ๊ทธ์— ๋”ฐ๋ผ JavaScript๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹์˜ ์ ‘๊ทผ์„ ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๋ฐ›์•„๋“ค์ด๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

    htmx๋Š” ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ์ƒˆ๋กœ์šด ์ ‘๊ทผ์„ ์ œ์‹œํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…๋“ค์€ HTML ํƒœ๊ทธ์˜ ์†์„ฑ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

    <!-- htmx๋ฅผ ๋กœ๋”ฉ -->
    <script src="https://unpkg.com/htmx.org@1.9.5"></script>
    
    <button
      hx-post="/some-api"
      hx-trigger="click"
      hx-target="#parent-div"
      hx-swap="outerHTML"
    >
      Click Me!
    </button>
    

    ์œ„์˜ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ <button>์„ ํด๋ฆญํ•˜๋ฉด, /some-api๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ #parent-div์˜ outerHTML๋กœ ๊ต์ฒดํ•œ๋‹ค.

    [์ฐธ๊ณ ] ๋ณด๋‹ค ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ ๋งํฌ๋“ค์„ ์ฐธ๊ณ ํ•˜๋ผ.

    Optimizing speed on eBay.com

    ์›น ์„ฑ๋Šฅ์€ ์˜จ๋ผ์ธ ๋น„์ฆˆ๋‹ˆ์Šค, ํŠนํžˆ ์˜จ๋ผ์ธ ์‡ผํ•‘์—์„œ ๋งค์ถœ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ค‘์š”ํ•œ ์˜์—ญ์ด๋‹ค. eBay ๋˜ํ•œ ์ด์˜ ์ค‘์š”์„ฑ์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, 2019๋…„๋ถ€ํ„ฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์˜ ๊ฐ€์น˜๋ฅผ ์ธ์‹ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์‹ค์ œ๋กœ ๊ฒ€์ƒ‰ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด 100ms ํ–ฅ์ƒ๋  ๋•Œ๋งˆ๋‹ค ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€ ํšŸ์ˆ˜๊ฐ€ 0.5% ์ฆ๊ฐ€ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ์–ด๋–ค ํ•ญ๋ชฉ๋“ค์— ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ eBay์˜ ์‚ฌ๋ก€๋กœ๋ถ€ํ„ฐ ๋ฐฐ์›Œ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    How we reduced the size of our JavaScript bundles by 33%

    ์ด ๊ธ€์€, ๋“œ๋กญ๋ฐ•์Šค๊ฐ€ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋˜ ๋ ˆ๊ฑฐ์‹œ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ๋กค์—…์œผ๋กœ ๊ต์ฒดํ•˜๋ฉด์„œ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ด๊ณ  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ–ˆ๋˜ ๊ฒฝํ—˜๊ธฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

    ๋กค์—…์„ ์™œ ์„ ํƒํ–ˆ๋Š”์ง€, ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ๋ฒˆ๋“ค๋Ÿฌ์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋ฉด์„œ ๋‚˜ํƒ€๋‚œ ๋ฌธ์ œ์ ์ด ๋ฌด์—‡์ด์—ˆ๋Š”์ง€, ์–ด๋–ค ์ ๋“ค์ด ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ ๊ธ€๋„ ์žˆ๋‹ค.

    How Back/forward Cache Helped Yahoo! JAPAN News Increase Revenue by 9% on Mobile

    Back/Forward Cache๋Š” ์ฆ‰์‹œ ๋’ค๋กœ, ์•ž์œผ๋กœ ํƒ์ƒ‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ bfcache๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋งŽ์ด ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ Firefox 1.5(2005๋…„)์—์„œ ๋„์ž…๋˜์—ˆ๊ณ , Safari, Chrome์—์„œ๋„ ์ง€์›์ด ๋˜๊ณ  ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Yahoo Japan News์—์„œ bfcache ์ ์ค‘๋ฅ ์„ ๊ฐœ์„ ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•จ๊ณผ ๋™์‹œ์— ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ์„ฑ๊ณผ๋„ ๊ฐ€์ ธ์˜จ ๋‚ด์šฉ์„ ์†Œ๊ฐœํ•œ๋‹ค.

    Decoupling UI and Logic in React: A Clean Code Approach with Headless Components

    ๋ณต์žกํ•œ UI๋ฅผ ์ปดํฌ๋„ŒํŠธํ™”ํ•œ๋‹ค๋ฉด ๋ Œ๋”๋ง๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ/๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ ํ—ค๋“œ๋ฆฌ์Šค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด UI์™€ ๋™์ž‘ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด, ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด ์ค‘๋ณต์„ฑ์„ ์ค„์ด๊ณ , ๋‚˜์•„๊ฐ€ ์ž ์žฌ์  ๋ฒ„๊ทธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

    ์ด ๊ธ€์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜ˆ๋กœ ์‹œ์ž‘ํ•ด ํ—ค๋“œ๋ฆฌ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Downshift๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข€ ๋” ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ํ™•์žฅํ•˜๋Š” ์„ค๋ช…์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ—ค๋“œ๋ฆฌ์Šค๊ฐ€ ๋ณต์žกํ•œ UI์— ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์ธ์ง€ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    Three common types of test automation

    ์›น ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ์†Œ๊ฐœํ•˜๊ณ  ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๊ฐ„๋žตํ•˜๊ฒŒ ์ œ์‹œํ•˜๊ณ  ์žˆ๋‹ค.

    10 essential VS Code tips & tricks for greater productivity

    VS Code๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์•Œ์•„๋‘๋ฉด ์ข‹์„ 10๊ฐ€์ง€ ํŒ๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ์ž๋™ ํฌ๋ฉงํŒ…, ํด๋” ํŒŒ์ผ ๋นจ๋ฆฌ ๋งŒ๋“ค๊ธฐ ๋“ฑ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์œ ์šฉํ•œ ๋‚ด์šฉ๋“ค์ด ์žˆ์ง€๋งŒ ๊ทธ์ค‘์—์„œ๋„ ๋ถ€๋“œ๋Ÿฌ์šด ์ปค์„œ ๊ธฐ๋Šฅ(Editor: Cursor Smooth Caret Animation)์ด ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค.

    ๐Ÿ•น ํŠœํ† ๋ฆฌ์–ผ

    JavaScript for Web Designers

    ์ œ๋ชฉ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ด ์ฑ…์€ ๋””์ž์ด๋„ˆ๊ฐ€ JavaScript๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” ๋ฐ˜๋Œ€๋กœ ์–˜๊ธฐํ•˜๋ฉด ๋น„ ๊ธฐ์ˆ ์  ์ง๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ด๋“ค์„ ์œ„ํ•œ ์ฑ…์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๐Ÿ“ฆ ์ฝ”๋“œ์™€ ๋„๊ตฌ

    JavaScript Visualizer 9000

    JavaScript ๋Ÿฐํƒ€์ž„ ๋ชจ๋ธ์ธ Event Loop๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ๋กœ, ๊ฐ ๋ผ์ธ๋ณ„ ์ฝ”๋“œ๋“ค์˜ ํ˜ธ์ถœ ํ˜•ํƒœ์— ๋”ฐ๋ผ Task ๋˜๋Š” Microtask ํ๋กœ ๋ถ„๋ฆฌ๋˜๊ณ , ์ฝœ ์Šคํƒ์ด ์–ด๋–ป๊ฒŒ ์Œ“์—ฌ ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ts-reset

    Typescript์˜ ๊ธฐ๋ณธ ํƒ€์ž…์„ ๊ต์ •ํ•ด ์ฃผ๋Š” ํƒ€์ž… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. CSS ๋ฆฌ์…‹์„ ํ•˜๋“ฏ์ด ํƒ€์ž…์„ ๋ฆฌ์…‹ํ•œ๋‹ค.

    ts-reset๊ฐ€ ์—†์„๋•Œ:

    • ๐Ÿšจ fetch ํ•จ์ˆ˜์˜ .json() ๊ณผ JSON.parse()๋Š” any ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•จ
    • ๐Ÿคฆ .filter(Boolean) ๊ฐ€ ํƒ€์ž…์ ์œผ๋กœ undefined๋ฅผ ๊ฑธ๋Ÿฌ์ฃผ์ง€ ๋ชปํ•จ
    • ๐Ÿ˜ก array.includes() ๋Š” ์ข…์ข… readonly ๋ฐฐ์—ด์—์„œ ๋™์ž‘์ด ๋„ˆ๋ฌด strictํ•ด์„œ ๋ถˆํŽธํ•จ

    ts-reset์„ ์‚ฌ์šฉํ• ๋•Œ:

    • ๐Ÿ‘ fetch ํ•จ์ˆ˜์˜ .json() ๊ณผ JSON.parse()๋Š” unknown ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•จ
    • โœ… .filter(Boolean)๊ฐ€ ์ •ํ™•ํžˆ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•จ
    • ๐Ÿฅน array.includes() ๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•ด์ง
    • ๐Ÿš€ ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํฌํ•จ

    shadcn-ui/ui

    shadcn-ui๋Š” UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉด์„œ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

    UI ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๊ฐ€ ํŒŒ์ผ๋กœ ์ถ”๊ฐ€๋˜์–ด ์„ค์น˜๊ฐ€ ๋˜๋Š” ํŠน์ดํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•๋ถ„์—, ์ฝ”๋“œ ๋™์ž‘ ๋ฐ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฝ๋‹ค.

    RSC Devtools

    RSC(React Server Component) payload๋ฅผ ๋„คํŠธ์›Œํฌ ํƒญ์—์„œ ๋ณด๋ฉด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค. RSC Devtools์€ RSC payload๋ฅผ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ ํƒ์ƒ‰, ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ๋น„๊ณต์‹ Devtool์ด๋ฉฐ, ๊ฐœ๋ฐœ ์•„ํ‹ฐํด์—์„œ ์ž์„ธํ•œ ๊ฐœ๋ฐœ ํ›„๊ธฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

    Regulex

    ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‹œ๊ฐํ™”ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค

    react-timer-hook

    ์Šคํ†ฑ์›Œ์น˜, ํƒ€์ด๋จธ, ํƒ€์ž„์„ hook์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    VitePress

    VitePress๋Š” Vue์™€ Vite๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋‹ค.