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

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

    2024-05

    ๐Ÿ“š ๋งํฌ & ์ฝ์„ ๊ฑฐ๋ฆฌ

    WASM I/O 2024

    ์ง€๋‚œ 3์›” 14์ผ ~ 15์ผ ๋ฐ”๋ฅด์…€๋กœ๋‚˜์—์„œ ์ง„ํ–‰๋˜์—ˆ๋˜ WASM I/O ์ฝ˜ํผ๋Ÿฐ์Šค์˜ 35๊ฐœ ์„ธ์…˜์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

    Youtube ์žฌ์ƒ๋ชฉ๋ก

    ๋‹ค์Œ์˜ ํฅ๋ฏธ๋กœ์šด ์„ธ์…˜๋“ค์„ ๋งŒ๋‚˜๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    • Filling a Registry-Shaped Hole in the Wasm Component Ecosystem
      • ์ƒˆ๋กœ์šด wasm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ธ wa.dev๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

      [์ฐธ๊ณ ] ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ๋Š” Bytecode Alliance์˜ Warg(WebAssembly Registry)๊ฐ€ ์žˆ๋‹ค.

    • WebAssembly at Google
      • V8, Emscripten ํŒ€์„ ํฌํ•จ WebAssembly๋Š” Google์˜ ์ „๋žต์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์„ธ์…˜์€ Google์—์„œ Wasm์ด ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ๊ฐœ์š”๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
    • Extism 1.0, your framework to build with WebAssembly
      • 22๋…„ 12์›” ์ถœ์‹œ๋˜์—ˆ๋˜ Extism์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด 16๊ฐœ์˜ ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ wasm ๋ชจ๋“ˆ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.
    • WANIX: A WebAssembly Operating and Development Environment
      • WANIX๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ WebAssembly UNIX์™€ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์—์„œ wasm์„ ํŽธ์ง‘, ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด ์ค€๋‹ค.
    • Wasm can do that!?
      • ์ด ์„ธ์…˜์—์„œ๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ธฐ๊ธฐ์—์„œ์˜ ์‹คํ–‰๋ถ€ํ„ฐ ํฅ๋ฏธ์ง„์ง„ํ•œ ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™๊นŒ์ง€ wsm์˜ ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๋‹ค๋ฅธ ์ธก๋ฉด์„ ๋งŽ์€ ๋ผ์ด๋ธŒ ๋ฐ๋ชจ๋ฅผ ํ†ตํ•ด ์†Œ๊ฐœํ•œ๋‹ค.

    A TC39 Proposal for Signals

    Signals ์ œ์•ˆ์ž ์ค‘ Rob Eisenberg๊ฐ€ Signals๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ด๋‹ค.
    Signals ์ œ์•ˆ์€ ์ƒํƒœ ์…€๊ณผ ํŒŒ์ƒ ๊ณ„์‚ฐ์„ ์ด์šฉํ•ด ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.
    ์ด ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋Š” ์†Œ์Šค์™€ ์‹ฑํฌ๋ฅผ ํฌํ•จํ•˜๊ณ , ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ ํ”Œ๋ž˜๊ทธ๋งŒ์„ ํ‘ธ์‹œํ•˜๋ฉฐ ์‹ค์ œ ๊ณ„์‚ฐ์€ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ง€์—ฐ๋œ๋‹ค.
    ์ด ๋ฐฉ์‹์€ ์ž๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜๊ณผ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ๋ฐฉ์ง€ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค.

    ์ฐธ๊ณ ๋กœ Signals๋Š” Stage 1 ์ด ๋˜์—ˆ๋‹ค.

    Printing music with CSS Grid

    ์›น์—์„œ ์•…๋ณด ํ‘œ๊ธฐ๋ฒ•์€ ํ…์ŠคํŠธ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด CSS grid๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ–ˆ๋Š”์ง€ ์†Œ๊ฐœํ•œ๋‹ค. ์ €์ž๋Š” ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Scribe๋ผ๋Š” ์•…๋ณด ๋ Œ๋”๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๊ณ , HTML custom element๋ฅผ ํ†ตํ•ด ์•…๋ณด ํ‘œ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์•…๋ณด๋ฅผ ๋ Œ๋”๋ง ํ•œ๋‹ค.

    <scribe-music type="sequence" clef="treble" meter="4/4">
        0 chord Dmaj    4
        0 F#5 0.2 1
        0 A4  0.2 1
        0 D4  0.2 1
    </scribe-music>
    

    Every React 19 Feature Explained in 8 Minutes

    React 19๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ  ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋ฅผ ์—†์• ๋ฉฐ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ๋„์ž…๋œ๋‹ค.

    ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด React ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋Ÿฌ ๋„์ž…๊ณผ useCallback ๋ฐ useMemo์™€ ๊ฐ™์€ ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋„๊ตฌ์™€ forwardRef๊ฐ€ ๋”๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ fetching๊ณผ ์ปจํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด useEffect ํ›…์„ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    [์ฐธ๊ณ ] 4์›” 25์ผ React 19 Beta๊ฐ€ ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

    4 React Tips to Instantly Improve Your Code

    React ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค ๊ฐ€์ง€ ํŒ์„ ์†Œ๊ฐœํ•œ๋‹ค.

    1. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ
    2. ์ปดํฌ๋„ŒํŠธ์˜ ์ฑ…์ž„(UI, Logic/Model, Lib)์„ ๋ถ„๋ฆฌ
    3. ์กฐ๊ฑด๋ฌธ ๋Œ€์‹  ๊ฐ์ฒด ๋งต์„ ์‚ฌ์šฉ
    4. React ๋ผ์ดํ”„์‚ฌ์ดํด ์™ธ๋ถ€์—์„œ ๋…๋ฆฝ์  ๋ณ€์ˆ˜ ์‚ฌ์šฉ

    ์ด ํŒ๋“ค์€ React ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

    wizard zines

    wizard zines์€ ๋ช‡ ๊ฐœ์˜ ์งง์€ ์นดํˆฐ ์ปท์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ CSS examples๋ฅผ ํ†ตํ•ด์„œ๋Š” ์นดํˆฐ ์ปท๊ณผ ํ•จ๊ป˜ ์ง์ ‘ ํ•™์Šตํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” snippet ๋“ค์„ ํ™•์ธํ•ด ๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค.

    ์›น์—์„œ ํ”„๋ฆฌ ๋“œ๋กœ์ž‰ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ธฐ

    ์ฝด๋‹ค๋Š” ํƒœ๋ธ”๋ฆฟ์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ•„๊ธฐ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ์ค‘ ํ•œ๊ณ„๋กœ ์ธํ•ด ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.
    Pointer Move ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›์€ ์ ๋“ค์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋“œ๋กœ์ž‰ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฒ ์ง€์–ด ๊ณก์„ ์„ ์ ์šฉํ•˜๊ณ  ์Šคํ”Œ๋ผ์ธ ๋ณด์ •ํ•˜์˜€๋‹ค.
    ๋˜, Pen Event์— ๋Œ€์‘ํ•˜๊ณ , ์ธ์ ‘ํ•œ ์  ๊ฐ„์†Œํ™” ๋“ฑ์„ ํ†ตํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…ธ์ถœ ๋˜๋Š” ๊ณผ์ •์„ ์†Œ๊ฐœํ•œ๋‹ค.

    polyfill.io์˜ ์œ„ํ—˜์„ฑ๊ณผ ๊ทธ ๋Œ€์•ˆ

    ๊ตญ๋‚ด ํ”„๋ŸฐํŠธ์—”๋“œ ๋ถ„์•ผ ๊ธฐ์ˆ  ๊ณต์œ ์ž๋กœ ์œ ๋ช…ํ•œ ZeroCho์˜ ์œ ํŠœ๋ธŒ ์˜์ƒ์ด๋‹ค. ์˜์ƒ์—์„œ๋Š” polyfill.io ์„œ๋น„์Šค๊ฐ€ ์ค‘๊ตญ์˜ ํšŒ์‚ฌ์— ๋งค๊ฐ๋˜๋ฉฐ, ์•ฝ๊ด€์ด ๋ณ€๊ฒฝ๋œ ์ ์„ ์ง€์ ํ•˜๋ฉฐ ๋Œ€์•ˆ์„ ์ œ์‹œํ•œ๋‹ค.

    Upgrading jQuery: Working Towards a Healthy Web

    2024๋…„์˜ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์— jQuery๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋งŽ์ง€ ์•Š์ง€๋งŒ, IDC ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด ์—ฌ์ „ํžˆ ์ „์ฒด ์›น์‚ฌ์ดํŠธ์˜ 90%๋Š” jQuery๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ์ค‘์˜ 1/3์€ ์˜ค๋ž˜๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉ ์ค‘์ด๋‹ค.

    jQuery ํŒ€๊ณผ OpenJS ์žฌ๋‹จ์€ Healthy Web checkup ์บ ํŽ˜์ธ์˜ ์ผํ™˜์œผ๋กœ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด์„œ jQuery๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์˜ ํ•„์š”์„ฑ์„ ์„ค๋ช…ํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ ๊ณผ์ •์„ ์•ˆ๋‚ดํ•œ๋‹ค.

    jQuery ํŒ€์ด ์ œ๊ณตํ•˜๋Š” jQuery Migrate ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ jQuery ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๊ฐ€์˜ค๋Š” jQuery 4.0๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ œ๊ณตํ•  ์˜ˆ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.

    ๐Ÿ•น ํŠœํ† ๋ฆฌ์–ผ

    Learn JavaScript

    ๊ตฌ๊ธ€์ด ์šด์˜ํ•˜๋Š” ํ•™์Šต ์ •๋ณด ์‚ฌ์ดํŠธ์ธ web.dev์— JavaScript ํ•™์Šต ๊ณผ์ •์ด ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ์กฐ๊ธˆ์€ ๊นŠ์€ ๋‚ด์šฉ๋“ค๋„ ๋ชจ๋‘ ๋‹ค๋ฃจ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JavaScript ์ดˆ์‹ฌ์ž ๋˜๋Š” ๊ฐœ๋…์„ ๋ฐ”๋กœ ์ฐพ์•„ ์ดํ•ดํ•  ๋•Œ ํ™œ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

    type hero

    type hero๋Š” ๋ณต์žกํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ์„ ์ง€ํ–ฅํ•œ๋‹ค. ์Šค์Šค๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€๋ณ„ ๋ฌธ์ œ๋“ค์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ˜‘์—… ํ™˜๊ฒฝ ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

    CSS in React Server Components

    ์ด ๊ธ€์—์„œ๋Š” ๊ธฐ์กด CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋™์ž‘์„ ์‚ดํŽด๋ณด๊ณ  RSC์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•ด ๋ณธ๋‹ค.
    ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค.
    ์ปดํŒŒ์ผ ์‹œ์ ์— CSS๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” Zero-Runtime CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉฐ, ์ด๋“ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ RSC์™€ ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

    Building an interactive 3D event badge with React Three Fiber

    Vercel Ship 2024 ์›น์‚ฌ์ดํŠธ์— ์‚ฌ์šฉ๋œ ๋ชฉ๊ฑธ์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์†Œ๊ฐœํ•˜๋Š” Vercel์˜ ๋ธ”๋กœ๊ทธ์ด๋‹ค.

    ํ‰์†Œ three.js, react-three-fiber ๋“ฑ์„ ํ™œ์šฉํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ 3d ์ฒ˜๋ฆฌ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์žฌ๋ฏธ์žˆ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    From 0 to Production - The Modern React Tutorial (RSCs, Next.js, Shadui, Drizzle, TS and more)

    ์œ ๋ช…ํ•œ ๊ธฐ์ˆ  ์œ ํŠœ๋ฒ„์ธ Theo๊ฐ€ ์ œ์ž‘ํ•œ ๋ชจ๋˜ React ํ•™์Šต ์˜์ƒ์œผ๋กœ Next.js, ์„œ๋ฒ„ ๊ตฌ์„ฑ ์š”์†Œ, ์„œ๋ฒ„ ๋™์ž‘, TypeScript, Tailwind, Drizzle, Vercel์˜ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ ํ”„๋กœ๋•์…˜ ์•ฑ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์ตœ์‹  ๋„๊ตฌ ๋ฐ ๊ธฐ์ˆ ๋กœ์˜ ์ „ํ™˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค.

    JavaScript Visualized - Event Loop, Web APIs, (Micro)task Queue

    ๋ธŒ๋ผ์šฐ์ €์˜ event loop, task queue, microtask queue ๊ทธ๋ฆฌ๊ณ  Web APIs๊ฐ€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ non-blocking ๋น„๋™๊ธฐ JavaScript๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ๊ฐ์  ์„ค๋ช…์„ ํ†ตํ•ด ๊ฐ ์˜์—ญ๋“ค์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

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

    Introducing TypeSpec: A New Language for API-Centric Development

    ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” API ์ •์˜ ์–ธ์–ด์ธ TypeSpec์€ API๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ, ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„, ๋ฌธ์„œ ๋“ฑ์„ ๋™์‹œ์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋†’์€ ์ˆ˜์ค€์˜ ์ •์˜ ์–ธ์–ด์ด๋‹ค.

    Infinitown

    Three.js, Blender, Unity๋ฅผ ํ™œ์šฉํ•œ WebGL ์‹คํ—˜์€ ์ƒ๋™๊ฐ ์žˆ๊ณ  ๋ณด๋Š” ์žฌ๋ฏธ๊ฐ€ ์žˆ๋Š” ์ ˆ์ฐจ์  ๋„์‹œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์‹œ๋„์ด๋‹ค. ๋ฌด์ž‘์œ„ ๋„์‹œ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑ๋œ ์œ ํ•œ ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๋ช‡ ๊ฐ€์ง€ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•ด ๋์—†๋Š” ๋„์‹œ ํ’๊ฒฝ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค.

    tinyworldmap

    tinyworldmap์€ Leaflet๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์œผ๋ฉฐ, 450kB(gzipped) ํฌ๊ธฐ์— ๋ถˆ๊ณผํ•˜๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋ง์€ 10๋…„ ์ด์ƒ ๋œ ์ €์‚ฌ์–‘ ํœด๋Œ€ํฐ์—์„œ๋„ ์ง€์—ฐ ์—†์ด ์ž˜ ์ž‘๋™ํ•œ๋‹ค.

    OpenStreetMap์— ์ถ”๊ฐ€๋œ ๊ฐ€์žฅ ์ธ๊ตฌ๊ฐ€ ๋งŽ์€ 10k ๊ฐœ์˜ ๋„์‹œ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ, ์ธ๊ตฌ๊ฐ€ 48k ์ด์ƒ์ธ ๋ชจ๋“  ๋„์‹œ์™€ ๋งˆ์„์„ ํฌํ•จํ•œ๋‹ค.

    es-hangul

    import { josa } from 'es-hangul';
     
    const word1 = '์‚ฌ๊ณผ';
    const sentence1 = josa(word1, '์„/๋ฅผ') + ' ๋จน์—ˆ์Šต๋‹ˆ๋‹ค.';
    console.log(sentence1); // '์‚ฌ๊ณผ๋ฅผ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค.'
     
    const word2 = '๋ฐ”๋‚˜๋‚˜';
    const sentence2 = josa(word2, '์ด/๊ฐ€') + ' ๋ง›์žˆ์Šต๋‹ˆ๋‹ค.';
    console.log(sentence2); // '๋ฐ”๋‚˜๋‚˜๊ฐ€ ๋ง›์žˆ์Šต๋‹ˆ๋‹ค.'
    

    toss์—์„œ ๊ณต๊ฐœํ•œ ์‰ฝ๊ฒŒ ํ•œ๊ธ€์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ดˆ์„ฑ ๊ฒ€์ƒ‰ ๋ฐ ์กฐ์‚ฌ ๋ถ™์ด๊ธฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.