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

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

    2023-01

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

    JavaScript Frameworks - Heading into 2023

    2022๋…„์„ ๋˜๋Œ์•„๋ณธ๋‹ค๋ฉด, ๋งŽ์€ ์›น ๊ฐœ๋ฐœ ๋„๊ตฌ/ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ๋‹ค. Astro์™€ Sveltekit์€ 1.0, SolidStart์™€ Qwik์€ ๋ฒ ํƒ€ ๊ทธ๋ฆฌ๊ณ  React 18์€ Next.js์™€ Remix๋ฅผ ํ†ตํ•ด ๊ธธ์„ ์ฐพ์€ ์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

    Front-end ์˜์—ญ์—์„œ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋ฐฉ๋ฒ•์œผ๋กœ "์„œ๋ฒ„์— ๋ณด๋‹ค ์ง‘์ค‘"ํ•ด SPA์˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐ(SSR์„ ํ™œ์šฉํ•œ๋‹ค๋“ ์ง€) ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๊ฒฌ์„ ๋งŽ์ด ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ํ•ด๊ฒฐ์ฑ…๋“ค์€ ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์ด ์•„๋‹ˆ๋‹ค.

    2023๋…„์ด ์ด์ œ ๋ง‰ ์‹œ์ž‘๋˜์—ˆ๋‹ค. 23๋…„์—๋Š” ์–ด๋–ค ๊ธฐ์ˆ ์— ์ง‘์ค‘ํ•ด์•ผ ํ• ๊นŒ? ๊ธ€์€ ํ•ด๋‹ต์„ ์ œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ๋ถ„๋“ค์—๊ฒŒ ์ถฉ๋ถ„ํžˆ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ด๋‹ค.

    Explore the content of your npm packages with the new code explorer

    ๊ทธ๋™์•ˆ NPM ํŒจํ‚ค์ง€๋“ค์˜ ์„ธ๋ถ€ ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐœ๋ฐœํ•œ npmview๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์ง์ ‘ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์˜ ๊ฐ์ˆ˜๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

    ์ด์ œ npmjs.com์—์„œ ๊ฐ ํŒจํ‚ค์ง€ ํŽ˜์ด์ง€ ๋‚ด์˜ 'code explorer' ํƒญ์„ ํ†ตํ•ด ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ์†์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

    React.js: The Documentary

    ์ด์ œ Front-end ์‹ ์—์„œ React๋Š” "React is everywhere"๋ผ๋Š” ๋ง์ด ์–ด์šธ๋ฆด ๋งŒํผ ์„ฑ์žฅํ•˜๊ณ  ํ™•์‚ฐ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜์—ˆ์„ ๋‹น์‹œ๋งŒ ํ•ด๋„ ์‚ฌ๋žŒ๋“ค์˜ ๋ฐ˜์‘์€ ์ด๋ ‡๊ฒŒ ์„ฑ์žฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๋Š” ์ด๋Š” ๋งŽ์ง€ ์•Š์•˜๋‹ค. ํŽ˜์ด์Šค๋ถ์— ์žˆ๋˜ ์†Œ์ˆ˜์˜ ๊ฐœ๋ฐœ์ž ๊ทธ๋ฃน์˜ ๋…ธ๋ ฅ์„ ํ†ตํ•ด ์˜ค๋Š˜๋‚ ๊นŒ์ง€ ์ด์–ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

    2์›” 10์ผ ๊ณต๊ฐœ ์˜ˆ์ •์ธ ๋‹คํ๋ฉ˜ํ„ฐ๋ฆฌ์—์„œ๋Š” React์˜ ๊ธฐ์›๊ณผ ์ธ๋”” ํ”„๋กœ์ ํŠธ์—์„œ ์„ธ๊ณ„์ ์œผ๋กœ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์˜ ๋ฐœ์ „์— ๋Œ€ํ•ด ์Šคํƒ€ ๊ฐœ๋ฐœ์ž๋“ค๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    A React Developer's First Take on Solid

    React ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ”๋ผ๋ณธ Solid์— ๋Œ€ํ•œ ์ฒซ์ธ์ƒ์„ ์ •๋ฆฌํ•œ ๊ธ€๋กœ, 2๊ฐœ์˜ ํŒŒํŠธ๋กœ ๋‚˜๋ˆ  ๊ฐ๊ฐ Solid์™€ SolidStart์— ๋Œ€ํ•ด ๋А๊ผˆ๋˜ ์ ์„ ์†Œ๊ฐœํ•œ๋‹ค.

    Reasons to avoid Javascript CDNs

    ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ๊ฒฝ์šฐ, ์ •์  ํŒŒ์ผ(.js) ๋“ค์— ๋Œ€ํ•ด CDN(jsdelivr, unpkg ๋“ฑ)์„ ํ™œ์šฉํ•˜๋ฉด ๋ณด๋‹ค ๋น ๋ฅธ ์†๋„๋กœ ์ฝ”๋“œ๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ฐฐ์›Œ์™”์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด์•ˆ ๋ฐ ์‹œ์Šคํ…œ ๋ฆฌ์Šคํฌ์— ๋”ฐ๋ฅธ ๋‹จ์ ๊ณผ ์ผ๋ถ€ ์ƒํ™ฉ์—์„  ์˜คํžˆ๋ ค ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์„ ์•Œ๋ ค์ค€๋‹ค.

    Migrate a 60k LOC TypeScript (NodeJS) repo to ESM and testing become 4x faster

    2ํŽธ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ธ€์„ ํ†ตํ•ด ์ €์ž๋Š” ์„ธ ๋ฒˆ์งธ ์‹œ๋„ ๋์— CJS ๋ชจ๋“ˆ๋“ค์„ ๋„ค์ดํ‹ฐ๋ธŒ ESM์œผ๋กœ ์ „ํ™˜์— ์„ฑ๊ณตํ–ˆ๊ณ  ์ด๋กœ ์ธํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰์— ๋”ฐ๋ฅธ CI ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ 4๋ฐฐ ํ–ฅ์ƒํ•œ ๊ฒฝํ—˜์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

    Concepts behind modern frameworks

    ์ด์ œ ๋ง‰ Front-end์— ์ง„์ž…ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์€ "์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”๊ฐ€?"์™€ "ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ์–ด๋А ๋งŒํผ JS/TS๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”๊ฐ€?"๋ผ๋Š” ์งˆ๋ฌธ์„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜๋งŽ์€ ๊ธ€๋“ค์€ ์ด๋“ค์—๊ฒŒ ์ •๋ณด์— ์ž…๊ฐํ•œ ๊ฒฐ์ • ์œ„ํ•œ ๊ฐœ๋… ๋Œ€์‹  ๊ธ€์˜ ์ €์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์žฅ์ ์„ ํ™๋ณดํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

    ์ด ๊ธ€์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ์ˆ  ๊ฐœ๋…๋“ค์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๊ณ , ๋…์ž ์Šค์Šค๋กœ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

    ๋‹น์‹ ์ด ๋ชจ๋ฅด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ๋น„๋ฐ€

    ์›น ๊ฐœ๋ฐœ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ ๊ฒ€ํ•ด ๋ณธ ์ ์ด ์žˆ๋Š”๊ฐ€? CPU ๋ฐ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ธก์ •์€ ํ”ํ•œ ์ ๊ฒ€์ด์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ์ผ์€ ๋Œ€๊ฐœ ํ”์น˜ ์•Š์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ๋ณธ ๊ธ€์—์„œ๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ , ๋‹ค์„ฏ ๊ฐ€์ง€์˜ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ•ด์†Œํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    Draw SVG rope using JavaScript

    SVG path๋ฅผ ์ด์šฉํ•ด ์‚ฌ์‹ค์ ์ธ ๋ฐง์ค„์„ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •๊ณผ ์‚ฌ์‹ค์  ๊ตฌํ˜„์„ ์œ„ํ•œ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋“ค๋„ ํ•จ๊ป˜ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์˜จ๋ผ์ธ ๋ฐ๋ชจ & ์ฝ”๋“œ

    Webhooks 101 - How I Use Discord Webhooks to Get My Personal Notifications

    ์›นํ›…์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ํ†ต์‹ ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ, ์ˆ˜๋™์ ์ธ ๊ฐœ์ž… ์—†์ด ์•Œ๋ฆผ์ด๋‚˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์•Œ๋ ค์ฃผ๋Š”๋ฐ ํ™œ์šฉ๋œ๋‹ค.

    ๊ธฐ๋ณธ์ ์ธ REST API์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์›นํ›…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์œผ๋ฉฐ, ์ด ๊ธ€์„ ํ†ตํ•ด Discord ์›นํ›…์„ ํ™œ์šฉํ•ด ๊ฐœ์ธ ์•Œ๋ฆผ์„ Discord ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Master Notifications With ChatGPT, React and NodeJS

    ์ด ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ChatGPT๋กœ ์ƒ์„ฑ๋œ ์•Œ๋ฆผ์„ React์™€ Node.js๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    Build your Own Virtual Scroll - Part I - DEV Community ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป

    ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ virtual scroll ๊ฐœ๋…์„ ์†Œ๊ฐœํ•˜๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํžˆ ์•Œ์•„๋ณธ๋‹ค.

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

    tRPC

    tRPC๋Š” ์Šคํ‚ค๋งˆ ๋˜๋Š” ์ฝ”๋“œ ์ƒ์„ฑ ์—†์ด ํƒ€์ž… ์„ธ์ดํ”„ ํ•œ API๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ์ด๋ฅผ ์‰ฝ๊ฒŒ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด ์ค€๋‹ค.

    modern-errors

    modern-errors๋Š” ์˜ค๋ฅ˜๋“ค์„ ์‰ฝ๊ณ  ์•ˆ์ •์ ์ด๊ฒŒ, ๊ทธ๋ฆฌ๊ณ  ์ผ๊ด€๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด ์ค€๋‹ค.

    // 1) ์˜ค๋ฅ˜๋ฅผ ํ•ธ๋“ค๋งํ•  ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    import ModernError from 'modern-errors';
    const BaseError = ModernError.subclass('BaseError');
    export const InputError = BaseError.subclass('InputError', {
      plugins: [modernErrorsSerialize],  // ์ œ๊ณต๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    });
    
    // 2) ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์ฝ”๋“œ๋ฅผ try...catch๋กœ ๊ฐ์‹ผ๋‹ค.
    try {
      // ...
    } catch (cause) {
      // ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์†์„ฑ์„ ์„ค์ •
      throw new InputError('Could not read the file.', { cause })
    }
    
    

    GraphJin, Build APIs in 5 minutes not weeks

    ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ฝ”๋“œ ์ž‘์—… ์—†์ด GraphQL API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. GraphQL ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด API๋ฅผ ์ •์˜ํ•˜๋ฉด, GraphJin์ด ์ž๋™์œผ๋กœ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ API๋กœ ์ƒ์„ฑํ•ด ์ค€๋‹ค.

    Canvas Confetti

    ๋‹ค์–‘ํ•œ ์ƒ‰์ข…์ด ํญ์ฃฝ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    Multiline Structural Search - CodeQue

    VSCode ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋ฌธ๋ฒ•์„ ์ดํ•ดํ•ด ๊ตฌ์กฐ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

    ๋ฐ๋ชจ ๋™์˜์ƒ

    Dittytoy

    ๊ฐ„๋‹จํ•œ JavaScript API๋ฅผ ํ™œ์šฉํ•ด ์˜จ๋ผ์ธ์œผ๋กœ ์Œ์•…์„ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ๋งคํ•ด ํฌ๋ฆฌ์Šค๋งˆ์Šค ์‹œ์ฆŒ๋งˆ๋‹ค ๋“ฃ๋Š” All I want for Christmas Is You ๋“ค์–ด๋ณด๊ธฐ