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

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

    2024-03

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

    Itโ€™s Official, Apple Kills Web Apps in the EU

    ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋“ค์€ iOS 17.4 ๋ฒ ํƒ€๋ฒ„์ „๋ถ€ํ„ฐ ์›น์•ฑ(PWA) ์„ค์น˜๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ค„์ง€์ง€ ์•Š๋Š” ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๋ฆฌํฌํŒ…์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋‚˜, ์ด๋Š” ์‹ค์ œ๋กœ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹Œ 24/3์›”๋ถ€ํ„ฐ ์‹œํ–‰๋˜๋Š” EU ๋””์ง€ํ„ธ์‹œ์žฅ๋ฒ•(DMA)์— ๋”ฐ๋ฅธ ์• ํ”Œ์˜ ์˜๋„์  ๊ธฐ๋Šฅ์˜ ์ œํ•œ์œผ๋กœ ํ™•์ธ๋˜์—ˆ๋‹ค.

    [์ฐธ๊ณ ] ์• ํ”Œ์˜ ์กฐ์น˜์— ๋Œ€ํ•œ ์„ค๋ช…์š”์•ฝ

    ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด, PWA์˜ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ(์นด๋ฉ”๋ผ, ๋งˆ์ดํฌ ๋“ฑ) ์ ‘๊ทผ๊ณผ ์ง€์›์€ ์ง์ ‘ ๊ตฌ์ถ•๋œ iOS์™€ WebKit์˜ ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ด๋ค„์ ธ์™”์œผ๋‚˜, DMA์˜ ๋Œ€์ฒด ๋ธŒ๋ผ์šฐ์ € ์—”์ง„ ํ—ˆ์šฉ ๋“ฑ์˜ ๊ธฐ์ค€์— ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•์ด ํ•„์š”ํ•ด์กŒ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ HSW์˜ ๋‚ฎ์€ ์ฑ„ํƒ๋ฅ ์„ ํฌํ•จ, ์ด๋Š” ํ˜„์‹ค์ ์œผ๋กœ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ง€์›์„ ์ค‘๋‹จํ•œ๋‹ค๊ณ  ๋ฐํ˜”๋‹ค.

    ์ดํ›„, ์• ํ”Œ์˜ ์กฐ์น˜์— ๋Œ€ํ•œ ์˜จ๋ผ์ธ ์ฒญ์›์ด ์ง„ํ–‰๋˜์—ˆ๊ณ , EU ๋˜ํ•œ ๊ด€๋ จ ์กฐ์น˜์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์กฐ์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์†Œ์‹์ด ์ „ํ•ด์ง€๊ธฐ๋„ ํ–ˆ์—ˆ๋‹ค.

    ์—ฌ๋Ÿฌ ์ผ๋ จ์˜ ์ƒํ™ฉ๋“ค ๋•Œ๋ฌธ์ธ์ง€๋Š” ์•Œ ์ˆ˜ ์—†์œผ๋‚˜, ๊ฒฐ๊ตญ ์• ํ”Œ์€ 3์›” 1์ผ Home Screen web app ์„ค์น˜ ์ œํ•œ ๊ฒฐ์ •์„ ์ฒ ํšŒํ•œ๋‹ค๊ณ  ๋‹ค์‹œ ๊ณต์ง€ํ–ˆ๋‹ค.

    Interaction to Next Paint (INP)

    INP๋Š” 3์›” 12์ผ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด Core Web Vitals ์ธก์ • ์ง€ํ‘œ๋กœ ํฌํ•จ๋˜๋ฉฐ, ๊ธฐ์กด์˜ FID(First Input Delay)๋ฅผ ๋Œ€์ฒด(FID๋Š” ์‚ญ์ œ๋  ์˜ˆ์ •) ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” FID๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ˜์‘์„ฑ ์ธก๋ฉด์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ์›น์—์„œ์˜ ์ƒํ˜ธ์ž‘์šฉ ์ธก๋ฉด์„ ํฌ์ฐฉํ•˜์ง€๋Š” ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    INP๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€ ๋ฐฉ๋ฌธ ์ „์ฒด ๊ธฐ๊ฐ„์— ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ƒํ˜ธ์ž‘์šฉ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๊ด€์ฐฐํ•˜๊ณ , ์ด์— ๋Œ€ํ•œ ํŽ˜์ด์ง€์˜ ์ „๋ฐ˜์ ์ธ ์‘๋‹ต์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ์ธก์ •ํ•ญ๋ชฉ์ด๋‹ค.

    [๋ฐ๋ชจ] Interaction to Next Paint (INP) โšก Live Demo

    JSR

    JSR์€ Deno ํŒ€์—์„œ ์ƒˆ๋กญ๊ฒŒ ๊ณต๊ฐœํ•œ JavaScript/TypeScript ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋‹ค. npm์˜ ์Šˆํผ ์…‹์œผ๋กœ npm ๋Œ€์ฒด์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, JSR ๋ชจ๋“ˆ์€ ๋ชจ๋“  ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์™€ ๊ธฐ์กด์˜ node_modules์— ์„ค์น˜๋˜๋Š” ํ”„๋กœ์ ํŠธ์™€ ํ˜ธํ™˜๋œ๋‹ค.

    ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • ์‚ฌ์šฉ์ž ์ ํ•ฉ ๋ฒ„์ „ ์ œ๊ณต: JS ๋˜๋Š” TS ๋งŒ์œผ๋กœ ์ด๋ค„์ง„ ์†Œ์Šค๊ฐ€ ํผ๋ธ”๋ฆฌ์‹ฑ ๋˜๋”๋ผ๋„, JSR์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ฝ”๋“œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ œ๊ณต
    • JS ํŠธ๋žœ์ŠคํŒŒ์ผ ๋ฐ Type Definition ์ œ๊ณต:
      • ์•„์ง ์ง€์›๋˜์ง€ ์•Š์ง€๋งŒ ์กฐ๋งŒ๊ฐ„ npm ์ƒํƒœ๊ณ„ ๋Œ€์ƒ์œผ๋กœ ์ œ๊ณต์ด ๋  ๋•Œ, JSR์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ JavaScript ์ฝ”๋“œ์™€ Type Definition์„ ์ž๋™์œผ๋กœ ์ œ๊ณต
    • ๋Ÿฐํƒ€์ž„ ์ธ์‹์„ฑ:
      • ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹จ์ผ ๋ฒ„์ „์„ ํผ๋ธ”๋ฆฌ์‹ฑ ํ•˜๋”๋ผ๋„, ๋Œ€์ƒ ๋Ÿฐํƒ€์ž„์— ๋งž๋Š” ๋ฒ„์ „์„ ์ œ๊ณต
    • ์ž๋™ ๋ฌธ์„œ ์ƒ์„ฑ: ํผ๋ธ”๋ฆฌ์‹ฑ ๋œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ๋ฌธ์„œํ™”๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ณต

    [์ฐธ๊ณ ]

    Introducing SafeTest: A Novel Approach to Front End Testing

    ๋„ทํ”Œ๋ฆญ์Šค๋Š” E2E ํ…Œ์ŠคํŠธ ์†”๋ฃจ์…˜์„ ์œ„ํ•ด Playwright, Jest/Vitest ๋ฐ React๋ฅผ ๊ฒฐํ•ฉํ•œ ์ƒˆ๋กœ์šด UI ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ SafeTest๋ฅผ ๊ณต๊ฐœํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฉฐ ๊ฐ•๋ ฅํ•œ ๋ณด๊ณ  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด SafeTest๋Š” ๋„ทํ”Œ๋ฆญ์Šค์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ E2E ํ…Œ์ŠคํŠธ์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

    Designing better target sizes

    ํƒ€๊ฒŸ ํฌ๊ธฐ(UI ์š”์†Œ ๋‚ด์—์„œ ํด๋ฆญ, ํ„ฐ์น˜, ํƒญ ๋ฒ”์œ„)๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์ง์ ‘์ ์œผ๋กœ ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— UI/UX ๋””์ž์ธ์—์„œ๋„ ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ํƒ€๊ฒŸ์— Fitts์˜ ๋ฒ•์น™์„ ์ ์šฉํ•˜๊ณ , ์ ์ ˆํ•œ ์ฃผ์œ„ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ , ์‹œ๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋ฉด์„œ ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ฃผ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

    100 Unique Website Footer Design Inspirations

    Footer ๋””์ž์ธ์˜ ์˜๊ฐ์„ ์ฃผ๋Š” 100๊ฐ€์ง€ ์‚ฌ์ดํŠธ๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

    Chromium. Web page rendering using Blink, CC and scheduler

    Chromium ์—”์ง„ ์€ ์ˆ˜๋งŽ์€ ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ์„œ๋ธŒ์‹œ์Šคํ…œ ๋ฐ ๊ธฐํƒ€ ์—”์ง„๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

    ์ด ๊ธ€์—์„œ๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ํ™”๋ฉด์— ์ง์ ‘ ๊ตฌ์„ฑํ•˜๊ณ  ๋ Œ๋”๋ง ํ•˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉฐ, Blink ์—”์ง„, Chorme Composer(CC, ๋˜๋Š” ์ฝ˜ํ…์ธ  ์กฐํ•ฉ์ž), ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ์˜ ๋™์ž‘์„ ๋‹ค๋ฃฌ๋‹ค.

    React Will Be Compiled

    React๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด useMemo, useCallback ๋“ฑ์˜ memoization hooks์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์ž˜ ์•Œ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ์›์น˜ ์•Š๋Š” rendering์„ ํ”ผํ•ด ์„ฑ๋Šฅ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ React ์ž…๋ฌธ์ž๋“ค์€ ์–ด๋А ๊ฒฝ์šฐ์— useMemo, useCallback์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ ค ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

    React ํŒ€์—์„œ Compiler๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. useMemo, useCallback ๋“ฑ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ž‘์—…์„ React Compiler๊ฐ€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์˜ˆ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.

    Frontend Application Security: Tips and Tricks

    ํ”„๋ŸฐํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜ํ•œ ๋ณด์•ˆ์ด ์ค‘์š”ํ•˜๋‹ค.

    ํ”„๋ŸฐํŠธ์—”๋“œ ๋ณด์•ˆ๊ณผ ๊ด€๋ จ๋œ ์ˆ˜๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ, ์ด ๊ธ€์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ 6๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ์ œ์‹œํ•˜๊ณ  ์–ด๋–ค ์‹์œผ๋กœ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค.

    ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ์™œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์›์ธ์„ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํŒ๊ณผ ์š”๋ น์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.

    8 repos used by the top 1% of React devs

    React ๊ฐœ๋ฐœ์ž ์ค‘ ์ƒ์œ„ 1%๊ฐ€ GitHub star๋ฅผ ๋ˆ„๋ฅธ ์ €์žฅ์†Œ๋Š” ๋ฌด์—‡์ผ๊นŒ? ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์œ„ 1%์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ €์žฅ์†Œ์— star๋ฅผ ํ‘œ์‹œํ•  ๊ฐ€๋Šฅ์„ฑ๊ณผ ํ•˜์œ„ 50%์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ star๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์„ ๋น„๊ตํ•ด์„œ ์ถ”๋ ธ๋‹ค๊ณ  ํ•œ๋‹ค. JSX์—์„œ ์Šคํƒ€์ผ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” jsxstyle/jsxstyle, ์ฝ”๋“œ ํ•˜์ด๋ผ์ดํŒ…์„ ๋„์™€์ฃผ๋Š” wooorm/refractor, Jest์—์„œ snapshot diff๋ฅผ ์ฃผ๋Š” jest-community/snapshot-diff ๋“ฑ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

    Syntax Highlighting code snippets with Prism and the Custom Highlight API

    ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ๋ฒ• ๊ฐ•์กฐ(Syntax Highliter)๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด, ๊ฐ ํ† ํฐ๋“ค์„ <span> ์š”์†Œ๋กœ ๊ฐ์‹ผ ํ›„ ํ† ํฐ ์œ ํ˜•์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์Šคํƒ€์ผ(ํด๋ž˜์Šค๋‚˜ ์ƒ‰์ƒ ๋“ฑ)์„ ์ ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

    CSS Custom Highlight API์™€ ํ† ํฐํ™”๋ฅผ ์œ„ํ•œ Prism.js๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•ด DOM ํŠธ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ <span>์œผ๋กœ ๋’ค์„ž๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋‹ค.

    The New CSS Math: pow(), sqrt(), and exponential friends

    CSS๋Š” calc()๊ณผ ๊ฐ™์€ ๊ธฐ์กด ํ•จ์ˆ˜๋“ค์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์ƒˆ๋กœ์šด Math ํ•จ์ˆ˜๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ ๊ถ๊ทน์ ์œผ๋กœ ์ˆซ์ž ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ์ž‘๋™ ๋ฐฉ์‹์˜ ๋‰˜์•™์Šค๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค.

    ์ด ๊ธ€์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค์Œ์˜ Math ํ•จ์ˆ˜๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ  ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ˜„์‹œ์ ์—์„œ ๋ชจ๋“  ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    • pow(): baseย ์—ย exponent๋ฅผ ์ œ๊ณฑํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜
    • sqrt(): ์ˆซ์ž์˜ ์ œ๊ณฑ๊ทผ์„ ๋ฐ˜ํ™˜
    • exp(): x๋ฅผ ์ธ์ˆ˜๋กœ ํ•˜๋Š”ย e^xย ๊ฐ’์„ ๋ฐ˜ํ™˜
    • log(): ์ž์—ฐ ๋กœ๊ฐ€๋ฆฌ์ฆ˜์€ (eย ๋ฅผ ๊ธฐ์ดˆ) ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐ
    • hypot(): ์ œ๊ณฑํ•ฉ์˜ ์ œ๊ณฑ๊ทผ์„ ๋ฐ˜ํ™˜
    line-height: pow(3, 2); /* 3 * 3 = 9 */
    line-height: sqrt(9); /* 3 */
    width: calc(100px * exp(1)); /* 100px * 2.718281828459045 = 217px */
    width: calc(100px * log(7.389)); /* 200px */
    width: hypot(30px, 40px); /* 50px */
    

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

    htmz

    htmz๋Š” ๋ฏธ๋‹ˆ๋ฉ€ HTML ๋งˆ์ดํฌ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์–ด๋– ํ•œ ์˜์กด์„ฑ ์—†์ด ํ”Œ๋ ˆ์ธ HTML๋งŒ์„ ์‚ฌ์šฉํ•ด ํŽ˜์ด์ง€ ๋‚ด ์š”์†Œ์— ๋‹ค๋ฅธ HTML์„ ๋กœ๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

    • ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜? htmz๋Š” ์‚ฌ์‹ค, htmz ์ด๋ฆ„์„ ๊ฐ–๋Š” <iframe>์œผ๋กœ, <iframe>์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋กœ๋”ฉ์ด ์™„๋ฃŒ๋˜๋ฉด onload ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ด๊ฐ’์„ ์ง€์ •ํ•œ ์š”์†Œ์— ์‚ฝ์ž…ํ•œ๋‹ค.
    <!-- 1. htmz ๊ตฌ์„ฑ -->
    <iframe
      hidden
      name="htmz"
      onload="setTimeout(()=>document.querySelector(contentWindow.location.hash||null)?.replaceWith(...contentDocument.body.childNodes))"></iframe>
    
    <!-- 2. GET /flower.html ๋ฅผ #my-element ์— ์‚ฝ์ž… --->
    <a href="/flower.html#my-element" target="htmz">Flower</a>
    

    openv0

    openv0์€ ์ƒ์„ฑํ˜• UI ์ปดํฌ๋„ŒํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ํ”„๋กฌํ”„ํŠธ(๋ฐ˜๋ณต์ ์ธ)๋ฅผ ํ†ตํ•ด UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋ผ์ด๋ธŒ ํ”„๋ฆฌ๋ทฐ๋„ ์ œ๊ณต๋œ๋‹ค.

    {JSON} Placeholder

    ํ”„๋กœํ† ํƒ€์ž… ๋˜๋Š” ๊ฐœ๋ฐœ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํŽ˜์ดํฌ JSON API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 6๊ฐœ ์œ ํ˜•์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, CRUD ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ชจ๋“  HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค.

    // ์‚ฌ์šฉ ์˜ˆ
    fetch('https://jsonplaceholder.typicode.com/todos/1')
      .then((response) => response.json())
      .then((json) => console.log(json));
    

    PGLite

    import { PGlite } from '@electric-sql/pglite';
    
    const db = new PGlite();
    await db.query("select 'Hello world' as message;");
    

    ๋ธŒ๋ผ์šฐ์ €, Node.js ๋ฐ Bun์—์„œ Postgres๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” TypeScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

    ๊ธฐ์กด์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” Postgres ํ”„๋กœ์ ํŠธ๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ, ๊ฐ€์ƒ ๋ฆฌ๋ˆ…์Šค ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” "Postgres in WASM"์ด๋‹ค.

    ๊ธฐํƒ€ ์ข…์†์„ฑ์ด ์—†์œผ๋ฉฐ, ์šฉ๋Ÿ‰์€ 3.7Mb(gzipped)๋กœ ๋ถ€๋‹ด์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์ด๋‹ค.

    jQuery 4.0.0 beta

    ์˜ค๋žซ๋™์•ˆ ์ž‘์—…ํ•œ jQuery 4.0.0์˜ ๋ฒ ํƒ€๋ฒ„์ „์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

    ์ฃผ์š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์œผ๋กœ๋Š”

    • IE 10 ์ดํ•˜ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ
    • ๊ตฌํ˜„ ๋ธŒ๋ผ์šฐ์ € ์ง€์› ์ค‘๋‹จ์— ๋”ฐ๋ฅธ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ ๊ฐ์†Œ
    • Deprecated API๋“ค์˜ ์ œ๊ฑฐ
    • array push/sort ๋“ฑ Javascript์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋œ ๊ธฐ๋Šฅ ์ œ๊ฑฐ
    • jQuery ์†Œ์Šค์ฝ”๋“œ์˜ ESM ์ „ํ™˜

    ๋“ฑ์ด ์žˆ๋‹ค.