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

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

    2022-10

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

    Schema Validation Layer

    const { data } = await axios.get<Post>(
      'https://jsonplaceholder.typicode.com/posts'
    );
    

    API ์‘๋‹ต์œผ๋กœ ๋ฐ›์€ data๊ฐ€ Post ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์„ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

    data๊ฐ€ Post ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์„๊นŒ?

    js-ts

    ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ํ™”๋ คํ•˜๊ฒŒ ํƒ€์ž…์„ ์ž‘์„ฑ์€ ํ–ˆ์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์ด ๊นจ์ง€๋Š” ๊ฒฝํ—˜์„ ๋งŽ์ด ํ•œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์žฌ๋ฐŒ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ธ€์ด๋‹ค

    CSS Transform ๋ถ„ํ• 

    CSS์˜ transform ์†์„ฑ์€ ๋ชจ๋“  ์†์„ฑ์„ ๋ฌธ์ž์—ด๋กœ ๋‚˜์—ดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ๋ฒˆ์žกํ•˜๊ณ  ์–ด๋ ค์› ๋‹ค.

    ์ด์ œ 3๊ฐœ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ชจ๋‘ transform์— ์ธ๋ผ์ธ์œผ๋กœ ๋“ค์–ด๊ฐ€๋˜ ์†์„ฑ๋“ค์ด ๊ฐ๊ฐ์˜ CSS ์†์„ฑ์œผ๋กœ ์ง€์›๋œ๋‹ค.

    As-Is

    .target:hover {
      transform: translateX(50%) rotate(30deg) scale(2);
    }
    

    To-Be

    .target:hover {
      translate: 50% 0;
      rotate: 30deg;
      scale: 2;
    }
    

    61 Frontend Web Development Buzz Words

    ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋งŽ์ด ์“ฐ์ด๋Š” Buzzword 61์„ 

    Buzzword: ํŠน์ •๋ถ„์•ผ ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ ์“ฐ๋Š” ์œ ํ–‰์–ด

    ๋ฒŒ์ด ์‚ฌ๋žŒ ์ฃผ์œ„๋ฅผ ์œ™์œ™๊ฑฐ๋ฆฌ๋“ฏ ์–ด๋””๋ฅผ ๊ฐ€๋‚˜ ์–ด๋–ค ํŠน์ •ํ•œ ๋ง์„ ์ž์ฃผ ๋“ฃ๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ buzzword๋ผ๋Š” ๋ง์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค

    Translating Typescript Errors with a VS Code Extension - Open Source Friday

    ๊นƒํ—™ ์œ ํŠœ๋ธŒ ์ฑ„๋„์—์„œ Open Source Friday๋กœ Typescript Error Translator์˜ ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฒŒ์ŠคํŠธ๋กœ ์ดˆ๋Œ€ํ•ด์„œ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

    Typescript Error Translator ๋ฐ๋ชจ์™€ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ์†Œ๊ฐœํ•˜๋ฉด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ vscode extension ๊ฐœ๋ฐœ์˜ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ๋‚ด์šฉ๋„ ํ•จ๊ป˜ ์†Œ๊ฐœํ•œ๋‹ค.

    Typescript Error Translator์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‹ˆ ๊ด€์‹ฌ ์žˆ๋‹ค๋ฉด ํ•œ๋ฒˆ ์ฐธ์—ฌํ•ด ๋ณด์ž!

    The new wave of Javascript web frameworks

    ์ƒˆ๋กญ๊ฒŒ ์ด ์˜์—ญ์— ๋ง‰ ๋›ฐ์–ด๋“œ๋Š” ์ด๋“ค์—๊ฒŒ๋Š” ์˜ค๋Š˜๋‚ ์˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ƒํƒœ๊ณ„๋ฅผ ๋”ฐ๋ผ์žก๋Š” ๊ฒƒ์€ ์–ด๋ ค์šด ์ผ์ด๋‹ค. ์ด๋“ค์—๊ฒŒ๋Š” ๋Œ€์ฒด๋กœ ์ง€๋ฃจํ•  ์ˆ˜๋„ ์žˆ๋Š” ํ˜„์žฌ ์‹œ์ ์˜ ์ฃผ๋„์  ๊ธฐ์ˆ (๋˜๋Š” ์ต์ˆ™ํ•œ)์„ ์„ ํƒํ•œ ํ›„, ๋Šฆ์€ ์„ ํƒ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ๋‹ค.

    ์ด ๊ธ€์€ ๋Œ€๊ทœ๋ชจ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์ถ•์—์„œ ๊ณผ๊ฑฐ์˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์˜ ๋“ฑ์žฅ๊ณผ ์ง„ํ™”๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

    CSR vs SSR case study

    SSR์€ ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ Next.js์™€ Remix๋ฅผ ํ†ตํ•ด ์ธ๊ธฐ๋ฅผ ๋†’์—ฌ์™”๊ณ , ์ฃผ๋กœ ์„ฑ๋Šฅ์  ํ–ฅ์ƒ์„ ๊ฐ•์กฐํ•ด ์˜ค๊ณ  ์žˆ๋‹ค. ์ด๋Š” ๋ฐ˜๋Œ€๋กœ CSR์ด ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

    ์ด ํ”„๋กœ์ ํŠธ๋Š” SSR ๋ฐฉ์‹๊ณผ์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด CSR ๋ฐฉ์‹์˜ ์ž ์žฌ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์ธ CSR ์•ฑ์„ ๊ตฌํ˜„(Webpack 5๋กœ ๋นŒ๋“œ/๋ฒˆ๋“ค๋ง ๋˜๋Š”) ํ•˜๊ณ  code-splitting๊ณผ ์š”์ฒญ๋“ค์„ ๋Œ€๋ถ€๋ถ„ ๋ณ‘๋ ฌํ™”์‹œ์ผœ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

    ํ”„๋กœ์ ํŠธ๋Š” ๊ฒฐ๋ก ์ ์œผ๋กœ CSR์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด SSR๊ณผ ๋น„๊ต ์‹œ ๋Œ€๋“ฑํ•˜๋ฉฐ, ๋•Œ๋ก  ๋” ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค. ๋˜ํ•œ pre-rendering์„ ํ†ตํ•ด ์™„๋ฒฝํ•œ SEO ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•จ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

    Porting Tests from Cypress to Playwright with AI

    Cypress์™€ Playwright๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” e2e ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

    ์ €์ž๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ Cypress์—์„œ Playwright๋กœ OpenAI์—์„œ ๊ฐœ๋ฐœํ•œ GPT-3 ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŒ…ํ•œ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

    JavaScript APIs You Donโ€™t Know About

    Page Visibility API, Web Share API, Broadcast Channel API, Internalization API ๋“ฑ ๋น„๊ต์  ์ƒ์†Œํ•œ Web API์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ด๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    Build Your Own React

    React๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃฌ๋‹ค.

    ํ‰์†Œ์— React์˜ ๊นŠ์€ ๋™์ž‘ ๋ฐฉ์‹์— ๊ถ๊ธˆ์ฆ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด ์žฌ๋ฐŒ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค

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

    TypeScript tips and Tricks with Matt

    10๊ฐœ์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฑŒ๋ฆฐ์ง€ ๋ฌธ์ œ์™€ ํ•ด์„ค์„ ํ†ตํ•ด์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž… ๋ ˆ๋ฒจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ตํž ์ˆ˜ ์žˆ๋‹ค

    ์˜์ƒ์„ ํ†ตํ•ด ํƒ€์ž… ๋ ˆ๋ฒจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ต์ˆ™ํ•ด์กŒ๋‹ค๋ฉด type-challenges๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋„์ „ํ•ด ๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ์ด๋‹ค

    Web Scraping Google With Node JS

    ์ด ํŠœํ† ๋ฆฌ์–ผ์€ Node.js ์ƒํƒœ๊ณ„์˜ ์›น ์Šคํฌ๋ž˜ํ•‘๊ณผ ํŒŒ์‹ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ๊ตฌ๊ธ€์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์Šคํฌ๋ž˜ํ•‘ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด JavaScript๋กœ ์›น ์Šคํฌ๋ž˜ํ•‘๊ณผ ๋ฐ์ดํ„ฐ ์ถ”์ถœ๊ณผ ๋งˆ์ด๋‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค.

    Throttle and Debounce in Javascript and React

    Debounce์™€ Throttle์€ JavaScript์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ตœ์ ํ™” ๊ธฐ๋ฒ•๋“ค ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์ด๋ฅผ React์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.

    Debounce ๋ž€?

    • ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์•ก์…˜์˜ ์ง€์—ฐ, ๊ทธ๋ฃนํ™” ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์š”์ฒญ์—๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

    Throttle ์ด๋ž€?

    • ์‹คํ–‰์˜ ์†๋„(๋นˆ๋„)๋ฅผ ์ œํ•œ์‹œ์ผœ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, debounce์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ทœ์น™์ ์ธ ์‹คํ–‰์„ ๋ณด์žฅํ•œ๋‹ค.

    Introduction Learn HTML

    ๊ตฌ๊ธ€์˜ web.dev ํŒ€์—์„œ Estelle Weyl์ด ์ž‘์„ฑํ•œ HTML ํŠœํ† ๋ฆฌ์–ผ์„ ๊ณต๊ฐœํ–ˆ๋‹ค. ํ•ด๋‹น ํŠœํ† ๋ฆฌ์–ผ์—๋Š” Document ๊ตฌ์กฐ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์‹œ๋งจํ‹ฑ HTML ๋“ฑ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋‘ ๊ณต๊ฐœ๋œ ์ƒํƒœ๋Š” ์•„๋‹ˆ๋ฉฐ, ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ์— ๊ฑธ์ณ ๋‹จ๊ณ„์ ์œผ๋กœ ๊ณต๊ฐœํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

    ์ง€๋‚œ FE News 2021๋…„ 6์›”ํ˜ธ์—์„œ๋„ Learn CSS๊ฐ€ ์†Œ๊ฐœ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค. HTML๊ณผ CSS ํŠœํ† ๋ฆฌ์–ผ๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์Œ ํŠœํ† ๋ฆฌ์–ผ๋„ ์ œ๊ณตํ•œ๋‹ค.

    jschallenger

    JavaScript์™€ JavaScript DOM API๋ฌธ์ œ๋“ค์„ ํ’€๋ฉด์„œ ์ตํžˆ๋Š” ํŠœํ† ๋ฆฌ์–ผ ์‚ฌ์ดํŠธ์ด๋‹ค.

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

    Fig

    fig-demo

    ํ„ฐ๋ฏธ๋„์— IDE์—์„œ ๋ณด๋˜ ์ž๋™์™„์„ฑ ๋ฐ•์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

    ์•„์ง์€ macOS๋งŒ ์ง€์›๋˜๊ณ , windows/linux๋Š” ๊ฐœ๋ฐœ ์ค‘์ด๋‹ค.

    Zsh-hangul

    zsh-hangul-gif

    ls๋ฅผ ์น˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ํ•œ๊ธ€๋กœ ์ž…๋ ฅ๋˜์–ด์„œ ใ…ฃใ„ด๊ฐ€ ์ž…๋ ฅ๋œ ๊ฒฝํ—˜์ด ๋งŽ์„ ๊ฒƒ์ด๋‹ค.

    ์ด๋Ÿฐ ํ•œ์˜ ์ „ํ™˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

    The Fuck

    thefuck-demo

    ๋ช…๋ น์–ด๋ฅผ ์ž˜๋ชป ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ๊ทธ ๋ช…๋ น์–ด๋ฅผ ๊ณ ์ณ์„œ ์˜๋„ํ•œ ๋ช…๋ น์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, git commit์„ git comit์œผ๋กœ ์ž˜๋ชป ์ž…๋ ฅํ–ˆ์„ ๋•Œ, git commit์œผ๋กœ ๋ฐ”๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

    Auto-Animate

    Simple example of AutoAnimation motion

    ๋‘ ์ค„์˜ ์ฝ”๋“œ ์ถ”๊ฐ€๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์„ฑ๋น„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    Pico.js

    pico-js-gif

    JavaScript 200์ค„๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ผ๊ตด์ธ์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    MemLab

    MemLab์€ Meta์—์„œ ๊ณต๊ฐœํ•œ JavaScript ๋ฉ”๋ชจ๋ฆฌ ํ…Œ์ŠคํŒ… ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ž๋™ํ™”๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํƒ์ง€๋ฅผ ํ•ด์ค€๋‹ค. ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค(Puppeteer API)๋ฅผ ์ž‘์„ฑํ•œ ํ›„, ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ JavaScript Heap ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ƒท์„ ํ†ตํ•ด ๋ˆ„์ˆ˜๋ฅผ ํƒ์นจ ํ•œ๋‹ค. ์ด ๊ณผ์ •์€ ๋‹ค์Œ์˜ ์ด 6๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค.

    1. Browser Interaction
    2. Diffing the heap
    3. Refining the list of memory leaks
    4. Generating retainer traces
    5. Clustering retainer traces
    6. Reporting the leaks

    [์ฐธ๊ณ ] ์ถ”๊ฐ€๋กœ Meta ์—”์ง€๋‹ˆ์–ด๋ง ๋ธ”๋กœ๊ทธ์˜ ์†Œ๊ฐœ ๊ธ€๋„ ์ฝ์–ด๋ณด๋ผ.

    JSON crack

    ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ์˜ ๋ณต์žกํ•œ JSON ๋ฐ์ดํ„ฐ๋Š” ์‰ฝ๊ฒŒ ์ฝ๊ธฐ ์–ด๋ ต๋‹ค. ์ด ๋„๊ตฌ๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•ด ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ํ˜•ํƒœ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.