naver/fe-news λ‰΄μŠ€λ ˆν„° λ·°μ–΄ (비곡식)

λͺ©μ°¨
λͺ©μ°¨

    2021-08

    링크 & 읽을거리

    An Introduction to WebAssembly for JavaScript Developers

    이 λ¬Έμ„œλŠ” JavaScript WebAssembly μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ μ†Œκ°œ κΈ€λ‘œ JavaScript μ½”λ“œκ°€ wasmκ³Ό μ–΄λ–»κ²Œ μƒν˜Έμž‘μš©ν•˜λŠ”μ§€μ™€ ν•¨κ»˜ 래퍼(Emscripten 도ꡬ 등을 톡해 μƒμ„±λœ)λ₯Ό ν†΅ν•œ κ΅¬ν˜„ 방식에 λŒ€ν•΄λ„ μ„€λͺ…ν•œλ‹€.

    wasm에 관심이 생겼닀면, μ΄μ–΄μ„œ 15k 라인의 C++ μ½”λ“œλ‘œ μž‘μ„±λœ λ Œλ”λ§ 엔진을 wasm λ³€ν™˜κΈ° 글도 재미있게 읽을 수 μžˆμ„ 것이닀.
    Porting a C++ Rendering Engine to WebAssembly

    ESM doesn't need to break the ecosystem

    였랜 μ‹œκ°„ λ™μ•ˆ npm νŒ¨ν‚€μ§€λ₯Ό λ‹€λ£¨λŠ” ν™˜κ²½μ—μ„œ κ°œλ°œν•΄ μ™”λ‹€λ©΄ λͺ¨λ“ˆ μ‚¬μš©κ³Ό κ΄€λ ¨ν•΄μ„  CommonJS(require()) 문법이 ESM 보닀 더 μΉœμˆ™ν•  것이닀. κ·ΈλŸ¬λ‚˜ CommonJSλŠ” ν‘œμ€€ μ˜μ—­μ— μ†ν•˜μ§€ μ•ŠμœΌλ©°, ESM λ“±μž₯ μ΄ν›„λ‘œ 전체 μƒνƒœκ³„λŠ” μ μ§„μ μœΌλ‘œ ESM으둜 μ „ν™˜μ΄ μ΄λ€„μ§ˆ 것이닀.

    이 글은 CommonJS νŒ¨ν‚€μ§€λ₯Ό 순수 ESM νŒ¨ν‚€μ§€λ‘œ μ „ν™˜ν•˜λŠ” 방법과 μƒνƒœκ³„ ν˜Έν™˜μ„±μ„ μœ„ν•œ Dual CJS/ESM λͺ¨λ“ˆ νŒ¨ν‚€μ§€λ₯Ό μ–΄λ–»κ²Œ λ§Œλ“€ 수 μžˆλŠ”μ§€ μ„€λͺ…ν•œλ‹€.

    순수(Pure) ESM νŒ¨ν‚€μ§€κ°€ 무엇인지, 그리고 ν˜„μ‹€μ  μ΄μŠˆλ“€μ— λŒ€ν•΄ κΆκΈˆν•˜λ‹€λ©΄ λ‹€μŒ 링크λ₯Ό μΆ”κ°€λ‘œ μ°Έκ³ ν•˜λΌ.
    Pure ESM package

    How to use finite state machines in React?

    Finite state machines(μœ ν•œ μƒνƒœ 기계)λŠ” μ‹œμŠ€ν…œμ˜ μƒνƒœ(ν–‰μœ„)λ₯Ό κΈ°μˆ ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μˆ˜ν•™μ  λͺ¨λΈμ΄λ‹€. μ£Όμ–΄μ§„ 객체가 κ°€μ§ˆ 수 μžˆλŠ” λͺ¨λ“  μƒνƒœμ™€ μƒνƒœ κ°„μ˜ μ „ν™˜μ„ 닀루며, κΈ°λ³Έ κ·œμΉ™μ€ μƒνƒœ μ‹œμŠ€ν…œμ€ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μƒνƒœμ—λ§Œ μžˆμ„ 수 μžˆλ‹€λŠ” 것이닀. (ν˜„μ‹€ μ„Έκ³„μ—μ„œμ˜ μ˜ˆλŠ” μ‹ ν˜Έλ“±μ„ λ– μ˜¬λ € λ³Ό 수 μžˆλ‹€.)

    이 글은 React ν”„λ‘œμ νŠΈμ˜ 일반적 μƒνƒœ κ΄€λ¦¬μ—μ„œ finite state machine을 μ‚¬μš©μœΌλ‘œ μ „ν™˜ν•˜λŠ” 예제λ₯Ό 톡해 보닀 μ•ˆμ •μ„± 높은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 방법을 μ†Œκ°œν•œλ‹€.

    OpenJS World 2021

    μ§€λ‚œ 6μ›”, λ¦¬λˆ…μŠ€ μž¬λ‹¨ μ‚°ν•˜μ˜ OpenJS μž¬λ‹¨μ΄ ν•΄λ§ˆλ‹€ μ£Όμ΅œν•˜λŠ” 콘퍼런슀둜 총 6개 νŠΈλž™μ˜ λ‹€μ–‘ν•œ μ–‘μ§ˆμ˜ JavaScript μƒνƒœκ³„ κ΄€λ ¨ μ„Έμ…˜λ“€μ„ 확인해 λ³Ό 수 μžˆλ‹€.

    Yarn 3.0 πŸš€πŸ€– Performances, ESBuild, Better Patches, ...

    νŒ¨ν‚€μ§€ κ΄€λ¦¬μžμΈ Yarn의 μ°¨κΈ° 메이저 릴리슀인 3.0에 λŒ€ν•œ μž‘μ—…μ΄ μ‹œμž‘λ˜μ—ˆκ³ , μ–΄λ–€ κΈ°λŠ₯듀이 포함될지λ₯Ό μ†Œκ°œν•˜λŠ” 글이닀.

    Yarn 1 β†’ 2둜의 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ³Όμ •μ—μ„œμ˜ λΆˆνŽΈν•¨μ„ μ œκ±°ν•΄, λͺ¨λ“  λ²„μ „μ—μ„œ 3으둜의 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ‰½κ²Œ λ§Œλ“€κ³ , Node 10+ μ΄μƒμ˜ 버전을 지원할 κ³„νšμ΄λΌκ³  밝히고 μžˆλ‹€.

    [참고] yarn berry 적용기

    A Visual Guide to React Rendering - It Always Re-renders

    React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ쑰와 상탯값 변경에 따라 μ»΄ν¬λ„ŒνŠΈλ³„ 재 λ Œλ”λ§μ΄ λ°œμƒν•˜λŠ” 과정을 μ‹œκ°μ  예제λ₯Ό 톡해 보여주고, React.memoλ₯Ό 톡해 λΆˆν•„μš”ν•œ 재 λ Œλ”λ§μ„ λ°©μ§€ν•  수 μžˆλŠ”μ§€ μ„€λͺ…ν•œλ‹€.

    상탯값에 이어, propsλ₯Ό 닀룬 글도 μ΄μ–΄μ„œ 보면 μ’‹λ‹€.
    A Visual Guide to React Rendering - Props

    Deep JavaScript: Theory and techniques

    μ–Έμ–΄(JavaScript)λ₯Ό 보닀 잘 λ‹€λ£° 수 μžˆλŠ” μ‹€μš©μ μΈ 기법듀과 ECMAScript μŠ€νŽ™μ— κΈ°λ°˜ν•œ 언어적 μΈ‘λ©΄μ—μ„œμ˜ λ™μž‘κ³Ό κ·Έ μ΄μœ μ— λŒ€ν•΄ μ„€λͺ…ν•˜λŠ” 책이닀. (HTML 버전은 무료둜 μ œκ³΅λœλ‹€.)

    ν”„λ ˆμž„μ›Œν¬λ‚˜ 도ꡬ ν™˜κ²½ 등이 μ•„λ‹Œ JavaScriptλ₯Ό 보닀 깊게 μ΄ν•΄ν•˜κ³  잘 닀루고 싢은 μ΄μ—κ²Œ 큰 도움이 될 것이닀.

    Vite: Rethinking Frontend Tooling

    ViteλŠ” Vue.js 개발자인 Evan Youκ°€ μƒˆλ‘­κ²Œ κ°œλ°œν•œ λΉŒλ“œ λ„κ΅¬λ‘œ, 개발 μ‹œμ—λŠ” λ²ˆλ“€λ§μ„ μˆ˜ν–‰ν•˜μ§€ μ•Šκ³  ESM을 톡해 ν•„μš”ν•œ λͺ¨λ“ˆλ§Œ λ‘œλ”©ν•˜κ³  이후 ν”„λ‘œλ•μ…˜ λΉŒλ“œλŠ” Rollup을 μ‚¬μš©ν•œλ‹€.

    Evan YouλŠ” 온라인 μ„Έμ…˜μ„ 톡해 ν”„λ‘œμ νŠΈμ˜ μžμ„Έν•œ λ°°κ²½(기술적 세뢀사항 및 섀계 κ³Όμ •)을 μ†Œκ°œν•˜λ©°, Viteλ₯Ό 톡해 무엇을 ν•΄κ²°ν•˜λŠ”μ§€ μ™œ λΉ λ₯Έμ§€ 그리고 JS 도ꡬ μ˜μ—­μ— μ™œ 더 μ ν•©ν•œμ§€ μ„€λͺ…ν•œλ‹€.

    RenderingNG

    Chrome κ°œλ°œνŒ€μ€ μ§€λ‚œ 8λ…„μ—¬μ˜ μž‘μ—…μ„ 톡해 Chromium의 Blink λ Œλ”λ§ 엔진을 μƒˆλ‘­κ²Œ μž¬μ„€κ³„ν•œ μ•„ν‚€ν…μ²˜μΈ RenderingNG(Next Generation)λ₯Ό κ³΅κ°œν–ˆλ‹€.

    RenderingNG은 보닀 μ•ˆμ •μ μΈ λ Œλ”λ§ μ„±λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 것에 있으며, 예츑 κ°€λŠ₯ν•˜κ³  μ‹ λ’°ν•  수 μžˆλŠ” μ„±λŠ₯, ν•˜λ“œμ›¨μ–΄ κΈ°λŠ₯ μ‚¬μš©μ˜ κ·ΉλŒ€ν™”, ν‘œμ‹œλ˜λŠ” λ‚΄μš©μ— ν•„μš”ν•œ μž‘μ—…λ§Œμ„ μˆ˜ν–‰, λ Œλ”λ§ λΉ„μš©μ„ 관리할 수 μžˆλŠ” 개발자 APIs 제곡, λΉ„μ£Όμ–Ό μ½˜ν…μΈ  μ΅œμ ν™” λ“±μ˜ μž‘μ—…μ΄ ν¬ν•¨λœλ‹€.

    RenderingNGλŠ” λ‹€μ–‘ν•œ μ£Όμš” ν”„λ‘œμ νŠΈλ“€(CompositeAfterPaint, LayoutNG, λ“±)둜 κ΅¬μ„±λ˜μ–΄ 있으며, 이듀에 λŒ€ν•΄μ„œλŠ” μ΄μ–΄μ§€λŠ” μ‹œλ¦¬μ¦ˆ 글을 톡해 μžμ„Έν•œ λ‚΄μš©μ„ κ³΅κ°œν•  μ˜ˆμ •μ΄λΌκ³  ν•œλ‹€.

    보닀 μžμ„Έν•œ μ•„ν‚€ν…μ²˜λŠ” μ΄μ–΄μ§€λŠ” λ‹€μŒ μ‹œλ¦¬μ¦ˆ 글을 μ°Έκ³ ν•˜λΌ.
    Overview of the RenderingNG architecture

    RenderingNG에 λŒ€ν•œ κ°„λž΅ν•œ μš”μ•½μ€ λ‹€μŒμ„ μ°Έκ³ ν•˜λΌ.
    Chromium이 λ°œν‘œν•œ RenderingNGκ°€ 무엇인가?

    The future of CSS: Nesting Selectors

    CSS μ „μ²˜λ¦¬κΈ°μΈ LESS/SASS 등을 μ‚¬μš©ν•΄ λ³Έ κ²½ν—˜μ΄ μžˆλ‹€λ©΄, 쀑첩 κ·œμΉ™μ„ 톡해 μƒμœ„ μ„ νƒμžμ™€ λ§€μΉ­ν•  수 μžˆλŠ” & κ·œμΉ™μ— λŒ€ν•΄ 잘 μ•Œκ³  μžˆμ„ 것이닀.

    이λ₯Ό λ³„λ„μ˜ 도ꡬλ₯Ό 톡해 λ³€ν™˜ 없이 λ„€μ΄ν‹°λΈŒμ—μ„œ μ‚¬μš©ν•  수 있게 ν•˜λŠ” "Nesting Selector"(CSS Nesting Module) μŠ€νŽ™μ— λŒ€ν•œ μ œμ•ˆμœΌλ‘œ, 기본적 문법과 μ‚¬μš© μ˜ˆμ‹œ 등을 μ†Œκ°œν•œλ‹€.

    table.colortable {
      & td {
        text-align: center;
        &.c { text-transform: uppercase }
        &:first-child, &:first-child + td { border: 1px solid black }
      }
      & th {
        text-align: center;
        background: black;
        color: white;
      }
    }
    

    CSSWG은 2021/7/7, κ΄€λ ¨ μ œμ•ˆμ— λŒ€ν•΄ Public Working Draft λ°œν–‰μ— λ™μ˜ν•΄ ν‘œμ€€ν™”λ₯Ό ν–₯ν•œ 여정이 μ‹œμž‘λ˜μ—ˆλ‹€.

    CSS ν‘œμ€€ν™” ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•΄μ„œλŠ” λ‹€μŒμ„ μ°Έκ³ ν•˜λΌ.
    An Inside View of the CSS Working Group at W3C

    Next Gen CSS: @container

    Containment Level 3 spec의 일원인 @container 속성은 λΆ€λͺ¨ μ»¨ν…Œμ΄λ„ˆμ˜ 크기λ₯Ό κΈ°μ€€ν•΄ μš”μ†Œλ₯Ό μŠ€νƒ€μΌλ§ ν•  수 있게 ν•œλ‹€.

    μ‚¬μš©μ„ μœ„ν•΄μ„  μ΅œμ‹  Chrome(v91+)μ—μ„œ λ‹€μŒ ν”Œλž˜κ·Έλ₯Ό ν™œμ„±ν™”ν•΄μ•Ό ν•œλ‹€.
    chrome://flags/#enable-container-queries

    Building A Dynamic Header With Intersection Observer

    λ·° μ˜μ—­μ—μ„œ νŠΉμ • μš”μ†Œκ°€ 슀크둀 됨에 따라 λ™μ μœΌλ‘œ λ°˜μ‘ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•˜λ €κ³  ν•  λ•Œ Intersection Observer APIλ₯Ό ν™œμš©ν•  수 μžˆλ‹€. 이 κΈ€μ—μ„œ μ œκ³΅ν•˜λŠ” 데λͺ¨λ₯Ό 확인해 λ³Έλ‹€λ©΄ Intersection Observerλ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆμ„ 것이닀.

    JS books

    무료둜 λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ 읽을 수 μžˆλŠ” λ‹€μ–‘ν•œ JavaScript μ„œμ λ“€μ— λŒ€ν•œ λͺ©λ‘μ„ μ œκ³΅ν•œλ‹€.

    νŠœν† λ¦¬μ–Ό

    Journey of a web page πŸ›£οΈ - How browsers work

    μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ—μ„œ μ›Ή μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜κ³ , κ·Έ 결과둜 좜λ ₯λ˜λŠ” μ›Ή νŽ˜μ΄μ§€ μ‚¬μ΄μ—λŠ” μ–΄λ–€ 일듀이 λ°œμƒν• κΉŒ?

    λΈŒλΌμš°μ €κ°€ λ™μž‘ν•˜λŠ” 방식에 λŒ€ν•΄μ„  많이 닀뀄져 μ™”μ§€λ§Œ, λ„€νŠΈμ›Œν¬ λ ˆλ²¨μ—μ„œμ˜ κ³Όμ •κ³Ό 이후 λΈŒλΌμš°μ €μ—μ„œμ˜ 처리 과정듀을 순차적 흐름에 따라 λ‚΄μš©μ„ 이해할 수 μžˆλ„λ‘ μ„€λͺ…ν•˜κ³  μžˆμ–΄ 보닀 넓은 μ‹œκ°μ—μ„œ 웹을 이해할 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 글이닀.

    How to write unit tests in JavaScript with Jest

    λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” 맀우 μ€‘μš”ν•˜μ§€λ§Œ, λ˜ν•œ λ§Žμ€ 경우 κ°„κ³Όλ˜λŠ” μ˜μ—­μ΄κΈ°λ„ ν•˜λ‹€. 쒋은 ν’ˆμ§ˆμ„ κ°–λŠ” μ½”λ“œμ— λŒ€ν•œ 이점은 ν™•μ‹€νžˆ 뢀정적인 면보닀 ν¬μ§€λ§Œ, λ³„λ„μ˜ μ‹œκ°„μ„ λ“€μ—¬ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것은 항상 λΆ€λ‹΄μŠ€λŸ¬μš΄ μ˜μ—­μ΄κΈ°λ„ ν•˜λ‹€.

    아직 λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±μ— μ΅μˆ™μΉ˜ μ•Šλ‹€λ©΄, 이 νŠœν† λ¦¬μ–Όμ„ 톡해 λ‹¨μœ„ ν…ŒμŠ€νŠΈ μž‘μ„±μ„ μ‹œμž‘ν•΄ 보자.

    μ½”λ“œμ™€ 도ꡬ

    Windows 11 in React

    μ›Ή ν‘œμ€€ 기술(React)을 μ‚¬μš©ν•΄, μ›Ήμ—μ„œ Windows 11 λ°μŠ€ν¬ν†± 버전을 κ²½ν—˜ν•΄ λ³Ό 수 μžˆλ„λ‘ λ³΅μ œν•œ ν”„λ‘œμ νŠΈλ‹€.

    https://win11.blueedge.me/

    Vanilla둜 κ΅¬ν˜„ν•œ Windows 7 ν”„λ‘œμ νŠΈλ„ μ°Έκ³ ν•΄ 보라.
    https://desk.glitchy.website/

    Abracadabra

    VS Codeμ—μ„œ μ œκ³΅ν•˜λŠ” 기본적 λ¦¬νŒ©ν† λ§μ— 더해 λ¦¬νŒ©ν† λ§μ„ λΉ λ₯΄κ³  μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆλŠ” 좔가적 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” ν”ŒλŸ¬κ·ΈμΈμ΄λ‹€.

    λ¦¬νŒ©ν† λ§ μžλ™ν™”λ₯Ό μœ„ν•΄ μ œκ³΅λ˜λŠ” 전체 κΈ°λŠ₯ λͺ©λ‘μ€ λ‹€μŒμ„ μ°Έκ³ ν•˜λΌ.
    List of available refactorings

    slinky

    SlinkyλŠ” Scala둜 React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•  수 μžˆλŠ” ν”„λ ˆμž„μ›Œν¬λ‹€.

    solid

    SolidλŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλŠ” 선언적이며, μœ μ—°ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ‹€.

    VDOM을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν…œν”Œλ¦Ώμ„ 톡해 μ‹€μ œ DOM으둜 μ»΄νŒŒμΌν•˜λ©°, μƒνƒœμ— μ’…μ†λœ μ½”λ“œλ§Œμ΄ μ—…λ°μ΄νŠΈ λ˜λ„λ‘ λž˜ν•‘ λœλ‹€.

    // solid둜 μž‘μ„±λœ κ°„λ‹¨ν•œ μΉ΄μš΄ν„° 증가 예제 μ½”λ“œ
    import { render } from "solid-js/web";
    import { createSignal } from "solid-js";
    
    function Counter() {
      const [count, setCount] = createSignal(0);
      const increment = () => setCount(count() + 1);
    
      return (
        <button type="button" onClick={increment}>
          {count()}
        </button>
      );
    }
    
    render(() => <Counter />, document.getElementById("app"));
    

    직접 solid μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•˜κ³  ν…ŒμŠ€νŠΈ ν•΄λ³Ό 수 μžˆλ‹€.
    Solid Playground

    solid의 보닀 μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒ 글을 μ°Έκ³ ν•˜λΌ.
    SolidJS Official Release: The long road to 1.0