Basix Knowledge Base

Powered by ๐ŸŒฑRoam Garden

June 17th, 2022

์˜ค๋Š˜ ์ฝ์€ ๋งํฌ

์ œ๋ชฉ์€ ๋‚š์‹œ๊ณ  DRT ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ž„

DRT๋ผ ํ•จ์€ ์ˆœ๊ฐ„์˜ ์ฐฐ๋‚˜์— ์ง๊ด€๊ณผ ํ†ต์ฐฐ์„ ๋ฐœํœ˜ํ•˜๋Š” ์ „๋ฌธ๊ฐ€๋“ค์˜ ์ง๊ด€์„ ์—ญ์œผ๋กœ ๋ถ„์„ํ•ด ๋งŒ๋“  ๋ฐฉ๋ฒ•๋ก 

์ „๋ฌธ๊ฐ€๋Š” ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ค‘์š”ํ•œ ์‹ค๋งˆ๋ฆฌ๋ฅผ ํฌ์ฐฉํ•ด ํŠน๋ณ„ํ•œ ์ „๋žต์„ ํ†ตํ•ด ๋ฌธ์ œ์— ์ ‘๊ทผํ•œ๋‹ค

์ „๋ฌธ๊ฐ€๋Š” ์˜ค๋žœ ๊ฒฝํ—˜๊ณผ ์ˆ™๋ จ์œผ๋กœ ์ธํ•ด, ์ดˆ์‹ฌ์ž๋Š” ํฌ์ฐฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ค‘์š”ํ•œ ๋‹จ์„œ๋‚˜ ์‹ค๋งˆ๋ฆฌ๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ๊ณ , ์ดˆ์‹ฌ์ž์™€๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•๊ณผ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐฐ๊ฒฝ์—๋Š”, ์ดˆ์‹ฌ์ž์™€ ๋‹ค๋ฅธ ์‚ฌ๊ณ ๋ฐฉ์‹(๋ฉ˜ํƒˆ ๋ชจ๋ธ)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ „๋žต๊ณผ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ด๋ฏธ ๊ทธ๋“ค์—๊ฒŒ๋Š” ์ผ์ƒ์ ์ธ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ๋„ ์•Œ์•„์ฑ„์ง€ ๋ชปํ•จ

์ „๋ฌธ๊ฐ€๋Š” ์ด๋ฏธ ์ž์‹ ์ด ํ•˜๋Š” ํšจ๊ณผ์ ์ธ ํ–‰๋™์ด๋‚˜ ๋ฉ˜ํƒˆ ๋ชจ๋ธ๋“ค์ด ๋ชธ๊ณผ ๋งˆ์Œ์— ์ต์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์Šค์Šค๋กœ์˜ ํšจ๊ณผ์ ์ธ ์ „๋žต์„ ์•Œ์•„์ฑ„์ง€ ๋ชปํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ด๋ก ๊ณผ ์‹ ๋ด‰์ด๋ก ์˜ ์ฐจ์ด

Cloudflare๋Š” ๊ฝค ์˜ˆ์ „๋ถ€ํ„ฐ CAPTCHA๋ฅผ ์ œ๊ฑฐํ•˜๋Š” Privacy Pass ํ‘œ์ค€์„ ๋ฐ€๊ณ  ์žˆ์—ˆ์Œ

์›๋ž˜๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ์œผ๋กœ๋งŒ ์“ธ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— Apple ์ƒˆ iOS์™€ macOS์—์„œ ๊ณต์‹ ์ง€์›์„ ๋ฐœํ‘œ

Cloudflare ๋ณดํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์›น์‚ฌ์ดํŠธ๋Š” ๋ณ„๋„์˜ ์ž‘์—… ์—†์ด๋„ ํ•ด๋‹น ๊ธฐ๊ธฐ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ CAPTCHA ์—†์ด ์‚ฌ์šฉ์ž๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ”ํƒ•์œผ๋กœ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ถ„์„

ํ•„์ž๋Š” ํ˜„์กดํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋ก ์„ ํฌ๊ฒŒ 3๊ฐ€์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•จ

Where do you navigate?

When do you render?

How do you hydrate?

๊ฐ€์žฅ ์ „ํ˜•์ ์ธ ํ˜•ํƒœ์˜ ์—ฌ๋Ÿฌ ์œ ๋ช… ์‚ฌ์ดํŠธ๋ฅผ ์˜ˆ์‹œ๋กœ ์œ ํšจํ•œ ์ „๋žต์„ ์ •๋ฆฌ

๋ผ์šฐํŒ…

์„œ๋ฒ„ ๋ผ์šฐํŒ…์„ ํ†ตํ•œ MPA์ธ์ง€, ํด๋ผ์ด์–ธํŠธ ๋ผ์šฐํŒ…์„ ํ†ตํ•œ SPA์ธ์ง€๊ฐ€ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์žฌ๋กœ ๊ฐ€๋ฅด๋Š” ๊ธฐ์ค€

But the nuance is that all sites are first served from a server. A server rendered SPA becomes an MPA simply by removing the <script> tag.

์ƒˆ๋กœ์šด ๊ธฐ์ˆ  (RSC, TurboLinks) ๋“ฑ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ๋ถ€ํ„ฐ ๊ตฌ๋ถ„์ด ๋‹ค์†Œ ๋ชจํ˜ธํ•ด์ง€๊ณ  ์žˆ๋Š” ์ถ”์„ธ

Hybrid ๊ธฐ์ˆ ์˜ ํŠน์ง•์€ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋ฉด์„œ๋„ ํด๋ผ์ด์–ธํŠธ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ์‚ฌ์ดํŠธ ์ „์ฒด reload๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ ์ž ํ•œ๋‹ค๋Š” ๊ฒƒ

๋ Œ๋”๋ง

๋ Œ๋”๋ง์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์‹ค์งˆ์ ์œผ๋กœ ํ•˜๋‚˜๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ Œ๋”๋ง์ด ์–ธ์ œ ์ผ์–ด๋‚˜๋Š”๊ฐ€ ๋ฐ–์— ์—†์Œ

Flutter Web ๊ฐ™์€ ์‚ฌ๋„๋„ ์—†๋Š” ๊ฑด ์•„๋‹Œ๋ฐ ๊ตณ์ด ํƒœํด ๊ฑธ์ง€ ์•Š๊ธฐ๋กœ...

TTFB๋Š” Async SSR์„ ์ฑ„ํƒํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ฑฐ์˜ ํ•ญ์ƒ ๋‚ฎ์Œ Web Vitals

Remix, NextJS ๋“ฑ๋“ฑ ์œ ๋ช…ํ•œ SSR ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ฑ„ํƒํ•œ ๋ฐฉ๋ฒ•์ด๊ธฐ๋„

SSR์ด๋ผ๊ณ  ํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฃผ์ฒด์— ๋”ฐ๋ผ ํ†ต๊ณ„๊ฐ€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง Web Vitals

๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋ฉด TTFB๋Š” ๋†’์•„์ง€๋‚˜ LCP=FCP

ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋ฉด TTFB๋Š” ๋‚ฎ์•„์ง€๋‚˜ LCP>FCP

ํ•˜์ด๋“œ๋ ˆ์ด์…˜

์ €์ž๊ฐ€ ์ œ์ผ ๊ธ€์„ ๋งŽ์ด ๋‚จ๊ธด ์ฃผ์ œ์ด๊ธฐ๋„ ํ•จ... ๋ณธ์ธ ์™ˆ JavaScript Frameworks' Greatest Challenge

ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๋‚ด๊ธฐ ๋งค์šฐ ์–ด๋ ค์šด ๋ฌธ์ œ์— ์†ํ•จ https://dev.to/this-is-learning/why-efficient-hydration-in-javascript-frameworks-is-so-challenging-1ca3

Hydration์˜ ๋ฐฉ๋ฒ•๋ก ์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ธก๋ฉด์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ

When do you load?

What do you bundle/serialize?

What do execute on load?

๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋กœ๋“œ ํ›„ ํ•˜์ด๋“œ๋ ˆ์ด์…˜ ๋ฐฉ์‹์€ ๋†’์€ TTI๊ฐ€ ๋‹จ์ ์ด๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•œ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค์ด ์กด์žฌ

๋น… ํ…Œํฌ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ ๋ฐ ์šด์˜ํ•˜๋Š”๊ฐ€

No type-checking by default

๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ค‘ ์ œ์ผ ํ•ต์‹ฌ์ธ ๋“ฏ

์ผ๋ถ€ ์ปค๋งจ๋“œ๋Š” ์—ฌ์ „ํžˆ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‹œํ–‰ํ•˜์ง€๋งŒ run, eval, cache๊ฐ€ ๋” ์ด์ƒ ํƒ€์ž… ์ฒดํ‚น์„ ํ•˜์ง€ ์•Š์Œ

Remove unstable Deno.sleepSync API

// Polyfill
function sleepSync(timeout) {
  const sab = new SharedArrayBuffer(1024);
  const int32 = new Int32Array(sab);
  Atomics.wait(int32, 0, 0, timeout);
}

์›น API๋กœ๋„ ๊ตฌํ˜„์— ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  ์“ธ ๋ฐ๋„ ์—†์–ด ๋ณด์—ฌ์„œ ์ง€์› ๋‹ค ํ•จ...

๊ทธ ์™ธ์—๋„ ์ด๊ฒƒ์ €๊ฒƒ ์žˆ๋Š”๋ฐ ๋‚œ ์ •๋ฆฌํ•˜๋Š” ๊ฑฐ์ง€ ๋ฒˆ์—ญํ•˜๋Š” ๊ฑฐ ์•„๋‹ˆ๋‹ˆ๊นŒ ๊ฐ€์„œ ์ฝ์–ด๋ณด๋ฉด ๋˜๊ฒ ๋‹ค

์•„๋งˆ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋Š” unaliasํ•˜์ง€ ์•Š๊ณ  named type์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•ด์„œ ๊ทธ๋Ÿฐ ๋“ฏ

Telescope ๊ณ ์žฅ๋‚˜์„œ ๊ณ ์ณ๋‘