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

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

    2020-06

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

    Recoil: State Management library for React

    ์ง€๋‚œ 5์›” 14์ผ ์˜จ๋ผ์ธ์œผ๋กœ ์—ด๋ฆฐ ReactEurope ์ฝ˜ํผ๋Ÿฐ์Šค์—์„œ ํŽ˜์ด์Šค๋ถ์€ ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ด€๋ฆฌ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Recoil์„ ๊ณต๊ฐœํ–ˆ๋‹ค.

    ๋ฐœํ‘œ์˜์ƒ: Recoil: State Management for Today's React

    Recoil์€ ๊ธฐ์กด ์ƒํƒœ ๊ด€๋ฆฌ์ž๋“ค๋งŒ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ๋‹ค์Œ์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค๊ณ  ๊ทธ ์ด์œ ๋ฅผ ๋ฐํžˆ๊ณ  ์žˆ๋‹ค.

    • Flexible shared state
    • Derived data and queries
    • App-wide state observation

    ๋‹ค์Œ์˜ Egghead์—์„œ ์ œ๊ณต๋˜๋Š” ์ด 6๋ถ„ ๋‚ด์™ธ์˜ ์งง์€ ์˜จ๋ผ์ธ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ Recoil์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ๋น ๋ฅด๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.

    Implementing Dark Mode In React Apps Using styled-components

    ๋งŽ์€ ์›น์‚ฌ์ดํŠธ๊ฐ€ ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์ถ”์„ธ๋‹ค. ๋‹คํฌ ๋ชจ๋“œ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ˆˆ์˜ ํ”ผ๋กœ๋ฅผ ์ค„์—ฌ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ๋””๋ฐ”์ด์Šค์˜ ์ „๋ ฅ ์†Œ๋ชจ๋ฅผ ์ค„์ด๋Š” ๋ฐ์—๋„ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ธ styled-components๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ React ํ™˜๊ฒฝ์—์„œ Dark Mode๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ AST(๋ฒˆ์—ญ)

    AST(Abstract Syntax Tree)๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๋˜, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ AST๋กœ ๋ณ€ํ™˜์ด ๋˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๊ธ€์ด๋‹ค. AST๊ฐ€ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ Babel, Prettier ๋“ฑ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด์—ฌ์ค€๋‹ค.

    Become a better godfather for your React components

    React Component๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋‹ค ๋ณด๋ฉด ํ•œ ๋ฒˆ์ฏค์€ React Developer Tools์—์„œ Anonymous Component๋ฅผ ๋งˆ์ฃผํ•œ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋Š” React ๋””๋ฒ„๊น… ์‹œ ์ž‘์ง€ ์•Š์€ ๋ฐฉํ•ด ์š”์†Œ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด Anonymous Component๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•œ๋‹ค.

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ AbortController ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—… ์ค‘๋‹จํ•˜๊ธฐ

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋„์ค‘์— ์ค‘๋‹จํ•˜๊ธฐ๋ž€ ๋ณดํ†ต ์–ด๋ ค์šด ์ผ์ด ์•„๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ AbortController API๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋„์ค‘์— ์ค‘๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์˜ˆ์ œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•œ๋‹ค.

    What's New in Lighthouse 6.0

    Chrome DevTools์˜ ์›น ์‚ฌ์ดํŠธ ์ง„๋‹จ ๋„๊ตฌ์ธ Lighthouse๊ฐ€ 6.0 ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ•˜์˜€๋‹ค. Chrome 84 ๋ฒ„์ „๋ถ€ํ„ฐ ํƒ‘์žฌ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” 6.0 ๋ฒ„์ „์—์„œ ์–ด๋–ค ๊ฒƒ๋“ค์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค.

    Text fields & Forms design โ€” UI components series

    FE ๊ฐœ๋ฐœ์ž๋“ค์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” form. ์šฐ๋ฆฌ๋Š” ๊ทธ๋™์•ˆ ์ต์ˆ™ํ•จ์— ๋Š˜ ๊ด€์„ฑ์ ์œผ๋กœ form์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์•˜๋Š”๊ฐ€?

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

    FE-news๋ฅผ ํ†ตํ•ด ์ง€๋‚œ 3์›”์— ๊ณต์œ ํ•œ Design Better Forms๋ฅผ ํ•จ๊ป˜ ์ฝ์–ด๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ด์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•œ form์„ ๋งŒ๋“œ๋Š”๋ฐ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

    web.dev - LIVE

    ๊ตฌ๊ธ€ ์›น ํ”Œ๋žซํผ ํŒ€์—์„œ 3์ผ(6/30 ~ 7/2) ๋™์•ˆ ์˜จ๋ผ์ธ ์ด๋ฒคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.

    ๋นŒ๋“œ ๋„๊ตฌ๋ถ€ํ„ฐ CSS, ์ด๋ฏธ์ง€ ์••์ถ•, ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ๋ฌธ์ œ์  ๋ฐœ๊ฒฌ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•, PWA๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์œผ๋กœ ๋ฐฐํฌํ•˜๊ธฐ ๋“ฑ๋“ฑ ์›น ๊ฐœ๋ฐœ์— ์œ ์ตํ•œ ๋‹ค์–‘ํ•œ ๋ชจ๋˜ ์›น ๊ธฐ์ˆ ๊ณผ ํ…Œํฌ๋‹‰ ์„ธ์…˜๋“ค์ด ์˜ˆ์ •๋˜์–ด ์žˆ๋‹ค.

    Standard IO Under the Hood

    ์šฐ๋ฆฌ๊ฐ€ console.log()๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ œ๋กœ๋Š” ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ํ˜ธ์ถœ์ด ์‹คํ–‰๋ ๊นŒ?

    C++๋กœ ์ž‘์„ฑ๋œ JavaScript ๋Ÿฐํƒ€์ž„ V8์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ „์ฒด ์‹คํ–‰ ๊ณผ์ •์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. C++์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†๋‹ค๋ฉด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ๋งค์ผ ์ž‘์„ฑํ•˜๋Š” JavaScript ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ํ˜ธ๊ธฐ์‹ฌ์„ ์ถฉ์กฑ์‹œ์ผœ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

    Why is immutability so important (or needed) in JavaScript?

    ๋ถˆ๋ณ€์„ฑ(Immutability)์€ JavaScript์—์„œ ํ•„์ˆ˜์ ์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ํŒจ์…˜ ํŠธ๋ Œ๋“œ์— ๊ฐ€๊น๊ณ , React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ƒํƒœ ๊ด€๋ฆฌ์—์„œ ์ผ๋ถ€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์„ค๊ณ„์— ๋Œ€ํ•œ ๊น”๋”ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ๋Š” ๋„์ž…์— ๋”ฐ๋ฅธ ๋ณต์žก์„ฑ์ด ์ถฉ๋ถ„ํ•œ ๊ฐ€์น˜๋ฅผ ๋”ํ•ด์ฃผ์ง€ ๋ชปํ•œ๋‹ค๋Š” ์˜๊ฒฌ์„ ๋ฐํžˆ๊ณ  ์žˆ๋‹ค.

    ํŠœํ† ๋ฆฌ์–ผ

    A Visual Guide To React Mental Models

    Part 1, Part 2

    React์˜ ๊ฐ ํŠน์ง•์  ์š”์†Œ๋“ค๊ณผ ๋™์ž‘ ๋ฐฉ์‹์„ ์‹œ๊ฐ์  ์ด๋ฏธ์ง€๋กœ ์„ค๋ช…ํ•œ โ€˜React Mental Modelโ€™ ๊ฐ€์ด๋“œ๋‹ค.

    Mental Model ์ด๋ž€ ์šฐ๋ฆฌ๊ฐ€ โ€˜์ธํ„ฐ๋„ทโ€™์„ ๋จธ๋ฆฟ์†์œผ๋กœ ๋– ์˜ฌ๋ ธ์„ ๋•Œ ๊ทธ ๊ฑฐ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•„์ฃผ ์„ธ์„ธํžˆ ์•Œ์ง€ ๋ชปํ•˜์ง€๋งŒ ๋Œ€๋žต์  ๋™์ž‘ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ, ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๊ณ  ๊ณผ์ •์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ฐ€์ด๋“œ๋Š” React์˜ ๊ธฐ๋ณธ์  ๊ฐœ๋…๊ณผ ๋™์ž‘ ๋ฐฉ์‹ ๋“ฑ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ํ›‘์–ด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์‹œ๊ฐ์  ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•ด, React๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์ด๋“ค๊ณผ ์ „์ฒด ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ ์ž ํ•˜๋Š” ์ด๋“ค์—๊ฒŒ ํฐ ๋„์›€์„ ์ค€๋‹ค.

    Deno Handbook

    ์ง€๋‚œ 5์›” 14์ผ 1.0 ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์Šค๋œ ์ƒˆ๋กœ์šด TypeScript ๋Ÿฐํƒ€์ž„ Deno์— ๋Œ€ํ•œ ํ•ธ๋“œ๋ถ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐ„๊ฒฐํ•œ ์†Œ๊ฐœ์™€ ํ•จ๊ป˜ Node.js์™€์˜ ๋น„๊ต๋ฅผ ํ†ตํ•œ ์ฐจ์ด์ , ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    Deconstructing React || Tejas Kumar

    React API๋“ค์„ Vanilla JS๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๋ฉฐ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค. Virtual DOM(render), Hooks, Suspense์— ๋Œ€ํ•ด ๋‹ค๋ฃฌ๋‹ค.

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

    Responsively

    ๋ฐ˜์‘ํ˜• ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ์‹œ, ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ๋””๋ฐ”์ด์Šค์—์„œ ๋ Œ๋”๋ง ๋˜๋Š” ํ™”๋ฉด์„ ํ•œ ๋ฒˆ์— ๋ณด๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋กœ Electron์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

    Appy Dev

    ์ˆ˜๋…„๊ฐ„์˜ ํ๋ ˆ์ด์…˜์„ ํ†ตํ•ด ์ˆ˜์ง‘๋œ ๋‹ค์–‘ํ•œ ์›น ๊ฐœ๋ฐœ ๋„๊ตฌ, ์œ ํ‹ธ๋ฆฌํ‹ฐ, ๋ฆฌ์†Œ์Šค ๋“ค์˜ ๋งํฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฆฌ์ŠคํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡๋ช‡ ๋„๊ตฌ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • Keyframes: CSS ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ shadow ๋“ฑ์˜ ๊ฐœ๋ฐœ์„ ๋„์™€์ฃผ๋Š” ์‹œ๊ฐ์  ๋„๊ตฌ
    • Picular: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ํ‚ค์›Œ๋“œ๋ฅผ ๊ตฌ๊ธ€ ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ด๊ฐ’ ์ด๋ฏธ์ง€๋“ค์—์„œ ์‚ฌ์šฉ๋œ ์ฃผ์š” ์ƒ‰์ƒ ๊ฐ’๋“ค์„ ์ถ”์ถœํ•ด ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ
    • HEAD: HTML5 <head> ์š”์†Œ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

    pico

    client side์—์„œ ์Šคํฌ๋ฆฐ์ˆ์„ ์ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. viewport์— ๋งž์ถฐ cross origin image, web fonts ๋“ฑ headless browser๋ฅผ ์ด์šฉํ•ด์„œ๋Š” ์–ป์„ ์ˆ˜ ์—†๋Š” ์ •๋ณด๋“ค์„ ํฌํ•จํ•˜์—ฌ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ์Šคํฌ๋ฆฐ์ˆ ์ฐ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

    motion

    React์—์„œ ๋‹จ์ง€ props๋กœ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ, animation๊ณผ gesture๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

    react-error-boundary

    React ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ„ํ˜น DOM๊ณผ sync๊ฐ€ ์•ˆ ๋งž๋Š” ๋“ฑ์˜ ์ด์œ ๋กœ ๋ Œ๋”๋ง ์ค‘ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์œผ๋ฉฐ ํฐ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์„ ๋Œ€์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด React v16์—์„œ ErrorBoundary API๊ฐ€ ์†Œ๊ฐœ๋˜์—ˆ๋Š”๋ฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ErrorBoundary๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.