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

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

    2022-11

    ๋งํฌ & ์ฝ์„๊ฑฐ๋ฆฌ

    Next.js Conf 2022

    10์›” 25์ผ ์ƒŒํ”„๋ž€์‹œ์Šค์ฝ”์—์„œ Next.js ์ฝ˜ํผ๋Ÿฐ์Šค๊ฐ€ ๊ฐœ์ตœ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ์ฝ˜ํผ๋Ÿฐ์Šค์—์„œ ๊ฐ€์žฅ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๋‚ด์šฉ์€ Turbopack์— ๋Œ€ํ•œ ์†Œ๊ฐœ์™€ /app Directory์˜ ๋„์ž…, layout, streaming๊ณผ ๊ฐ™์€ Next.js 13๋ฒ„์ „์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์ด๋‹ค.

    Introducing Turbopack: Rust-based successor to Webpack

    Webpack์˜ ์ฐฝ์‹œ์ž์ธ Tobias Koppers์˜ ์ฃผ๋„ํ•˜์— ๊ฐœ๋ฐœ๋œ ๋ฒˆ๋“ค๋Ÿฌ. Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ๊ณ , JavaScript๋กœ ์ž‘์„ฑ๋˜์–ด ํƒœ์ƒ์  ์„ฑ๋Šฅ์˜ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง„ Webpack์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ๊ณ ์„ฑ๋Šฅ์ด๋‹ค. ์•„ํ‹ฐํด์— ๋”ฐ๋ฅด๋ฉด Next.js 13์— Turbopack๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ธ๋‹ค๊ณ  ํ•œ๋‹ค.

    • Webpack์— ๋น„ํ•ด 700๋ฐฐ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ ์†๋„
    • Webpack์— ๋น„ํ•ด 4๋ฐฐ ๋น ๋ฅธ ์ดˆ๊ธฐ ์‹คํ–‰ ์†๋„
    • Vite์— ๋น„ํ•ด 10๋ฐฐ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ ์†๋„

    ์ง€๋‚œ 10๋…„๊ฐ„ ์ˆ˜๋งŽ์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ ๋„๊ตฌ๋“ค๋กœ ๋ถ€ํ„ฐ ๋„์ „์žฅ์„ ๋ฐ›์Œ์—๋„ ์ด์— ๊ตดํ•˜์ง€ ์•Š๊ณ  ๋ฌด๋ ค 30์–ตํšŒ ๋‹ค์šด๋กœ๋“œ ๋˜๋ฉฐ ์›น ์ƒํƒœ๊ณ„ ์•ˆ์—์„œ ๊ฐ€์žฅ ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ๋กœ ๊ตฐ๋ฆผํ•ด ์™”๋˜ Webpack, ์ด๋ฒˆ Turbopack์˜ ๋“ฑ์žฅ์œผ๋กœ ๊ตณ๊ฑดํ•˜๊ฒŒ ์ง€์ผœ์˜จ ์™•์ขŒ์˜ ์ž๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๊ท€์ถ”๊ฐ€ ์ฃผ๋ชฉ๋œ๋‹ค.

    [์ฐธ๊ณ ] Vite ๊ฐœ๋ฐœ์ž์ธ Evan You๋Š” ์ด์™€ ๊ด€๋ จ Vite vs Turbopack์— ๋Œ€ํ•ด ์ง์ ‘ ์ˆ˜ํ–‰ํ•œ ๋ฒค์น˜๋งˆํฌ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ณต๊ฐœํ–ˆ์œผ๋ฉฐ, Turbopack์˜ ์ฃผ์žฅ๊ณผ๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

    • https://twitter.com/youyuxi/status/1586042491739860993

    Next.js 13

    13๋ฒ„์ „์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. Turbopack ๊ณผ ๋”๋ถˆ์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€ ๋ฐ ๊ฐœ์„ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

    • app/ Directory
      • Layout: ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žฌ๋ Œ๋”๋ง์„ ํ”ผํ•˜๋ฉด์„œ layout.jsํŒŒ์ผ์„ ํ†ตํ•ด ๋ ˆ์ด์•„์›ƒ UI๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • Server Component: ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜๋Š” JavaScript์˜ ์–‘์„ ์ค„์—ฌ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์„ ๋น ๋ฅด๊ฒŒ ํ•œ๋‹ค.
      • Streaming: ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ loading.jsํŒŒ์ผ์„ ํ†ตํ•ด ํ‘œ์‹œํ•˜๋ฉฐ ๋ Œ๋”๋ง ๋˜๋Š” UI ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•œ๋‹ค.
      • Support for Data Fetching: ๋น„๋™๊ธฐ์  ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ์„ ์ง€์›ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์บ์‹œํ•˜๊ณ , ์žฌ๊ฒ€์ฆํ•˜๋Š” ์œ ์—ฐํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋กœ์จ ์ด์ „ ๋ฒ„์ „์˜ getServerSideProps, getStaticProps, getInitialProps๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • New next/image: ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์—†์ด ์ด๋ฏธ์ง€๋ฅผ ์‰ฝ๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํ•„์š”์— ๋”ฐ๋ผ ํŒŒ์ผ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • New @next/font: ์ƒˆ๋กœ์šด font ์‹œ์Šคํ…œ์€ ์ž๋™์œผ๋กœ font๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ๋นŒ๋“œ ์‹œ ๋‹ค์šด๋กœ๋“œํ•ด ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ œ๊ฑฐํ•˜๋ฉฐ, ๋ชจ๋“  font ํŒŒ์ผ์— ๋Œ€ํ•ด ์ž์ฒด ํ˜ธ์ŠคํŒ…์„ ํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ์˜ ๋ณ€๊ฒฝ ์—†์ด ๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.
    • Improved next/link: ๋” ์ด์ƒ <a>ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    Mixing It Up: Remix Joins Shopify to Push the Web Forward

    ์ง€๋‚œ 10์›” 31์ผ, Shopify๋Š” Remix ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐœ๋ฐœ์ง„์— ๋Œ€ํ•œ ์ธ์ˆ˜ ์†Œ์‹์„ ๋ฐํ˜”๋‹ค.

    Shopify๋Š” ๊ทธ๊ฐ„ ์ž์‚ฌ์˜ ์Šคํ† ์–ด ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ์ œ๊ณต์„ ์œ„ํ•ด React ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Hydrogen๊ณผ ์ด๋ฅผ ์œ„ํ•œ ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์ธ Oxygen์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ณต๊ฐœํ–ˆ์—ˆ๊ณ , ์ง€๋‚œ Remix Conf์—์„œ Hydrogen UI๋ฅผ ๋ฐœํ‘œํ•˜๋ฉฐ Hydrogen ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์คฌ์—ˆ๋‹ค.

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

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

    The Webโ€™s Next Transition

    ์›น์€ 25๋…„ ์ „์— ์‹œ์ž‘๋œ HTTP, HTML, CSS ๊ทธ๋ฆฌ๊ณ  JavaScript ๊ธฐ์ˆ ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์›น์˜ ์ง„ํ™”์— ๋”ฐ๋ผ ๋‹ค์Œ์˜ ํ๋ฆ„๊ณผ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ ๋˜ํ•œ ์ง„ํ™”ํ•ด ์™”๊ณ , ์˜ค๋Š˜๋‚  ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋Š” SPA์ด๋‹ค.

    • MPA(Multi-Page Apps) โ†’ PEMPAs(Progressively Enhanced Multi-Page Apps) โ†’ SPA(Single-Page Apps)

    SPA ์ดํ›„์˜ ์•„ํ‚คํ…์ฒ˜ ์ „ํ™˜์€ ๋ฌด์—‡์ผ๊นŒ? ๊ธ€์—์„œ๋Š” SPA์˜ ์ ์ง„์  ํ–ฅ์ƒ ์•„ํ‚คํ…์ฒ˜์ธ PESPAs(Progressively Enhanced Single Page Apps)๊ฐ€ ๋‹ค์Œ ํƒ€์ž๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ธกํ•˜๊ณ  ์žˆ๋‹ค.

    ์›น์˜ ์—ญ์‚ฌ์™€ ๊ถค๋ฅผ ๊ฐ™์ดํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋“ค์˜ ๊ธฐ๋ณธ์  ๊ฐœ๋…๊ณผ ๋‹ค์Œ ์˜ˆ์ธก์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธ€์ด๋‹ค.

    The future of rendering in React

    React์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ Œ๋”๋ง ํŒจํ„ด(CSR, SSR, SSG, ISR)์—๋Š” ์–ด๋–ค ๋ฌธ์ œ๋“ค์ด ์กด์žฌํ•˜๋Š”์ง€์™€ ๊ทธ๋ฆฌ๊ณ  React 18์„ ํ†ตํ•ด ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ ํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ๊ทธ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š”์ง€๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธ€์ด๋‹ค.

    ์ƒˆ๋กœ์šด ๋ Œ๋”๋ง ํŒจํ„ด๋“ค์ธ Streaming SSR, Selective Hydration ๊ทธ๋ฆฌ๊ณ  Server Component ๋“ฑ์„ ์†Œ๊ฐœํ•œ๋‹ค.

    ViteConf 2022

    Vite๋Š” ๋น ๋ฅด๊ฒŒ ์›น ๊ฐœ๋ฐœ(๋ฉ”ํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ) ๋„๊ตฌ๋กœ์˜ ์ž…์ง€๋ฅผ ๋„“ํ˜€๊ฐ€๊ณ  ์žˆ์œผ๋ฉฐ, ์ฃผ์š” ๋ฉ”์ด์ € ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์ง€๋‚œ 10์›” 11~12์ผ ์ฒซ ๋ฒˆ์งธ ์˜จ๋ผ์ธ ์ฝ˜ํผ๋Ÿฐ์Šค๊ฐ€ ๊ฐœ์ตœ๋˜์—ˆ๋‹ค.

    Vite๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋‹ค์Œ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ํˆด์ฒด์ธ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ฆ‰์‹œ ๊ฒฝํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    • https://vite.new

    Why We're Breaking Up with CSS-in-JS

    ์œ ๋ช…ํ•œ CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Emotion์˜ ํ™œ๋™์ ์ธ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ๋” ์ด์ƒ CSS-in-JS๋ฅผ ์•ˆ ์“ฐ๊ณ  Sass๋กœ ๋Œ์•„๊ฐ„ ์ด์œ ์— ๋Œ€ํ•ด์„œ ๋งํ•˜๊ณ  ์žˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ์˜ ์ถ”๊ฐ€, ๋ฒˆ๋“ค ํฌ๊ธฐ์˜ ์ฆ๊ฐ€ Emotion์„ ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์ถฉ๋Œ ๋“ฑ์„ ๊ต์ฒด์˜ ์ด์œ ๋กœ ๋“ค๋ฉฐ, CSS-in-JS์˜ ์žฅ์ ์€ Sass๋กœ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์™”๋Š”์ง€ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ๋ชจ๋“  ์„ ํƒ์ด ๊ทธ๋Ÿฌํ•˜๋“ฏ ๊ธฐ์ˆ ์  ์„ ํƒ์—๋„ ํฐ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ๋”ฐ๋ฅด๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ์ด๋Ÿฐ ์žฅ๋‹จ์ ์„ ํ‰๊ฐ€ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ด๋‹ค. ์–ด๋–ค ํ”„๋กœ์ ํŠธ์—์„œ๋Š” CSS-in-JS์˜ ์‚ฌ์šฉ์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ CSS-in-JS์˜ ์žฅ๋‹จ์ ์„ ์ถฉ๋ถ„ํžˆ ํŒŒ์•…ํ•˜๊ณ  ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๋ฐ์— ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž€๋‹ค.

    LinkedInโ€™s GraphQL journey for integrations and partnerships: How we accelerated development by 90%

    LinkedIn์ด ์ƒˆ๋กœ์šด API ํ”Œ๋žซํผ์„ GraphQL์„ ํ™œ์šฉํ•ด ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ์ถ•ํ•œ ๋‚ด์šฉ์„ ๋‹ด์€ ์•„ํ‹ฐํด์ด๋‹ค. ๊ธฐ์กด์˜ REST API๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์š”์ฒญ์„ ์ถ”๊ฐ€์ ์ธ ์—”์ง€๋‹ˆ์–ด๋ง ์—†์ด ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด GraphQL์„ ๋„์ž…ํ–ˆ๊ณ  ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋Œ€ํญ ์ค„์˜€๋‹ค๊ณ  ํ•œ๋‹ค. REST API๋ฅผ GraphQL๋กœ ์–ด๋–ป๊ฒŒ ํ™•์žฅํ–ˆ๋Š”์ง€ ์ฐธ๊ณ ํ•ด ๋ณด์ž.

    Prometheus: The Documentary

    Prometheus๊ฐ€ ์–ด๋–ป๊ฒŒ ์˜ค๋Š˜๋‚  k8s์˜ ๊ธฐ๋ณธ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด์ด ๋˜์—ˆ๊ณ  ๊ทธ ์‹œ์ž‘์€ ์–ด๋–ป๊ฒŒ ๋˜์—ˆ๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” 30์—ฌ ๋ถ„์˜ ๋‹คํ๋ฉ˜ํ„ฐ๋ฆฌ. SoundCloud์—์„œ ์‹œ์ž‘๋œ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜คํ”ˆ์†Œ์Šค๋กœ ์„ฑ๊ณตํ•จ์œผ๋กœ์จ ์‚ฌ์‹ค์ƒ ๋งคํŠธ๋ฆญ์Šค ๊ธฐ๋ฐ˜์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก์€ ์ด์•ผ๊ธฐ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ƒํƒœ๊ณ„์˜ ์œ„๋Œ€ํ•จ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Announcing TypeScript 4.9 Beta

    ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์—์„œ TypeScript 4.9 ๋ฒ ํƒ€ ๋ฒ„์ „์ด ์†Œ๊ฐœ๋˜์—ˆ๋‹ค

    ๋ˆˆ์—ฌ๊ฒจ๋ณผ ๋งŒํ•œ ๋ณ€ํ™”๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

    • ์„œ๋ธŒํƒ€์ž…์„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃจ๊ฒŒ ํ•ด์ฃผ๋Š” satisfies ํ‚ค์›Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
      • Next.js์˜ getStaticProps/getStaticPaths/getServerSideProps ํƒ€์ž…์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค - ๋งํฌ
    • in ํ‚ค์›Œ๋“œ๊ฐ€ ๋” ์œ ์—ฐํ•ด์ง„๋‹ค
    • watch ๋ชจ๋“œ๊ฐ€ ํŒŒ์ผ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ๋œ๋‹ค (๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ธฐ์กด์˜ ๋™์ž‘ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค)

    React RFC - first class support for promises

    RFC(Request for Comments) ๋ฌธ์„œ๋Š” ๋น„ํ‰์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฌธ์„œ๋ผ๋Š” ์˜๋ฏธ๋กœ, ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ๊ณตํ•™ ๋“ฑ์—์„œ ์ธํ„ฐ๋„ท ๊ธฐ์ˆ ์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒˆ๋กœ์šด ์—ฐ๊ตฌ, ํ˜์‹ , ๊ธฐ๋ฒ• ๋“ฑ์„ ์•„์šฐ๋ฅด๋Š” ๋ฉ”๋ชจ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    React RFC๋กœ ์˜ฌ๋ผ์™€์„œ ํฐ ๋ฐ˜์‘์„ ์–ป๊ณ  ์žˆ๋‹ค. React ์ปดํฌ๋„ŒํŠธ์—์„œ ๋” ์šฐ์•„ํ•˜๊ฒŒ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ œ์•ˆํ•œ๋‹ค.

    ์ œ์•ˆ๋œ ๋‚ด์šฉ์€ ์ƒˆ๋กœ ๋‚˜์˜จ Next.js 13๋ฒ„์ „์—์„œ ๊ฒฝํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    Shell scripting with Node.js

    JavaScript ์”ฌ์—์„œ ์œ ๋ช…ํ•œ ํ…Œํฌ๋‹ˆ์…˜์ธ Axel Rauschmayer์˜ ์ €์„œ๋กœ Node.js๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์™€ ์ƒํƒœ๊ณ„ ์ „๋ฐ˜ ๋ฐ npm ํŒจํ‚ค์ง€๋ฅผ ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค. ์˜จ๋ผ์ธ์ƒ์˜ HTML ๋ฒ„์ „์€ ๋ฌด๋ฃŒ๋กœ ์ „์ฒด ๋‚ด์šฉ์ด ์ œ๊ณต๋œ๋‹ค.

    A World-Class Code Playground with Sandpack

    CodeSandbox์˜ ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ์ธ sandpack์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ์‹ค์ œ๋กœ ๋ธ”๋กœ๊ทธ์— ์ ์šฉํ•œ ๋‚ด์šฉ์„ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. sandpack์˜ React ๋ฒ„์ „์€ ๋งํฌ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

    Nightdrive

    ์–ด๋‘์šด ๋„๋กœ์—์„œ ์šด์ „ํ•˜๋Š” ์ฐจ๋ฅผ canvas๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•œ ์ฝ”๋“œ์ด๋‹ค. ๋ณ„๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์šฉ ์—†์ด ๋ฐ”๋‹๋ผ JavaScript๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค. JavaScript๋กœ 3D๋ฅผ 2D๋กœ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ์ข‹์€ ์ฐธ๊ณ  ์ž๋ฃŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. (๋ฐ๋ชจ๋งํฌ)

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

    visx

    Airbnb์—์„œ ๊ฐœ๋ฐœํ•œ D3.js๊ธฐ๋ฐ˜ React์šฉ ์‹œ๊ฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    Pokรฉmon Cards Holographic effect in CSS

    ํฌ์ผ“๋ชฌ ์นด๋“œ๋ฅผ ์‚ฌ์‹ค์ ์œผ๋กœ ๋ณด์ด๊ฒŒ ๋งŒ๋“œ๋Š” ํ™€๋กœ๊ทธ๋ž˜ํ”ฝ ํšจ๊ณผ๋ฅผ ๊ณ ๊ธ‰ CSS๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•œ ๋ชจ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Slash

    ํ† ์Šค์—์„œ ๊ณต๊ฐœํ•œ TypeScript/JavaScript ํŒจํ‚ค์ง€๋“ค์ด๋‹ค.

    ํ† ์Šค ์‚ฌ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋“ค์„ 30์—ฌ ๊ฐœ์˜ npm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ณต๊ฐœํ–ˆ๋‹ค.

    ์•„๋ž˜ ๋ชฉ๋ก์€ ๊ทธ์ค‘์—์„œ๋„ ๋ˆˆ์—ฌ๊ฒจ๋ณผ ๋งŒํ•œ ๊ฒƒ๋“ค์ด๋‹ค.

    • @toss/use-overlay ๋Š” useOverlay React hook์„ ์ œ๊ณตํ•˜์—ฌ, ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.
    • @toss/hangul ํ•œ๊ธ€์„ ๋‹ค๋ฃจ๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•œ๋‹ค

    Lerna reborn โ€” Whatโ€™s new in v6?

    FE News 2022๋…„ 6์›” ํ˜ธ์—์„œ Lerna์˜ ์˜ค๋„ˆ์‹ญ์ด Nrwl๋กœ ์ด์ „๋˜์—ˆ๋‹ค๊ณ  ์†Œ๊ฐœ๋˜์—ˆ๋‹ค.

    ์˜ค๋„ˆ์‹ญ์„ ์ด์ „ํ•œ ๋’ค Nrwl์˜ ๊ฐœ๋ฐœ์ง„์€ Lerna๋ฅผ 5๋ฒ„์ „์œผ๋กœ ์˜ฌ๋ฆฌ๊ณ  Lerna์™€ Nx์˜ ํ†ตํ•ฉ์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋น ๋ฅด๊ฒŒ Nx๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” V6์„ ์ถœ์‹œํ•˜์˜€๋‹ค. V6์€ ์ด์ „์˜ Lerna(V4 ์ดํ•˜)์—์„œ ์‰ฝ๊ฒŒ ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.(์—…๊ทธ๋ ˆ์ด๋“œ Youtube) V6์€ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , task pipeline ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ๋ณ‘๋ ฌ ์ž‘์—…๊ณผ ์ข…์†์„ฑ์„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, pnpm๋„ ์ง€์›ํ•œ๋‹ค.

    DevTools-X: A Cross-Platform Collection of Offline-First Developer Utilities

    mac ์šฉ ์˜ฌ์ธ์› ํˆด ๋ฐ•์Šค์ธ devUtils์— ์ฐฉ์•ˆํ•ด์„œ ๋งŒ๋“  DevTools-X. devUtils ๋งŒํผ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ. ์œˆ๋„์šฐ์™€ ๋งฅ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ํŠน์ดํ•˜๊ฒŒ React playground๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    illustrationlink

    ์ผ๋Ÿฌ์ŠคํŠธ ์ด๋ฏธ์ง€๋“ค์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋“ค์˜ ๋งํฌ๋ฅผ ์ด์ •๋ฆฌ ํ•ด๋‘” ์‚ฌ์ดํŠธ์ด๋‹ค.

    fontpair

    ์‚ฌ์šฉ์ž๋“ค์˜ ์ด๋ชฉ์„ ๋Œ์–ด์•ผ ํ•˜๋Š” ์ œ๋ชฉ์˜ ์„œ์ฒด์™€, ๋ณธ๋ฌธ ๋‚ด์šฉ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์•ผ ํ•˜๋Š” ์„œ์ฒด์˜ ๊ถํ•ฉ์—๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ณต์‹์ด ์žˆ๋‹ค. ๊ทธ ๊ณต์‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌด๋ฃŒ์ธ Google Fonts์˜ ํฐํŠธ๋“ค ์•ˆ์—์„œ ๊ถํ•ฉ์ด ์ข‹์€ ์กฐํ•ฉ์„ ์ถ”์ฒœํ•ด ์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

    ๋˜ํ•œ ๋‹ค์ˆ˜์˜ ์›น์‚ฌ์ดํŠธ์—์„œ ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ ํฐํŠธ์˜ ์กฐํ•ฉ์„ ์ถ”์ถœํ•ด์„œ ์ •๋ฆฌํ•ด ๋†“์€ shapeless๋ผ๋Š” ์‚ฌ์ดํŠธ๋„ ์žˆ๋‹ค.

    ๋‹ค๋งŒ ๋ชจ๋“  ํฐํŠธ๋Š” ์˜๋ฌธ ํ•œ์ •์ด๋‹ˆ ๋‹ค๊ตญ์–ด ํ˜น์€ ๊ธ€๋กœ๋ฒŒ ํ–ฅ ์„œ๋น„์Šค๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ถ„๋“ค๊ป˜ ์ถ”์ฒœํ•œ๋‹ค.