First PR to Svelte repository
Published at 2024. 9. 26.
6 min read
Table of Contents
Why Svelte?
๋๋ React๋ก ๋ฐฅ ๋ฒ์ด ๋จน๊ณ ์ฌ๋ ์ฌ๋์ด์ง๋ง, ์ฌ์ค React์ ์ฒ ํ์ ๊ทธ๋ค์ง ์ข์ํ์ง๋ ์๋๋ค. ๊ทธ๋ฅ ํ๊ตญ ์ฑ์ฉ ์์ฅ์์๋ React๊ฐ ์ ๋ ์ฐ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์ ๊ณต๋ถํด์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ผ ๋ฟ.
React๋ฅผ ์ฐ๋ฉด์ ๊ฐ์ฅ ๋ถํธํ๊ณ ์ฐ์ฐ(?)ํ ์ ์, React๋ Virtual DOM์ด๋ผ๋ tree data structure๋ฅผ ํ์ฉํ๋ ๊ตฌ์กฐ๋ค๋ณด๋ ์ด์ฉ ์ ์์ด ๊ฐ๋ฐ์๊ฐ ๋ ๋๋ง ์ต์ ํ์ ํญ์ ์ ๊ฒฝ์ ์ธ ์ ๋ฐ์ ์๋ค๋ ์ ์ด๋ค.
์ํ ๋ณ๊ฒฝ ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก re-rendering๋์ด ๋ถํ์ํ๊ฒ ๋ฆฌ์์ค๋ฅผ ๋ญ๋น๋๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๋ถ๋ถ์ ์ง์ ์ ๊ฒฝ์จ์ค์ผ ํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ฅผ ์ํ memoisation API์กฐ์ฐจ ๋ง๊ตฌ์ก์ด๋ก ์ผ๋ค๊ฐ๋ ์ฝ๋ ๊ฐ๋
์ฑ์ ์ฌํ๊ฒ ํด์น ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์๊ณ ์จ์ผํ๋ค(๋ฌผ๋ก ์ ๋๋ก ์๋ ๊ฒ์ด ๋์๊ฑด ์๋์ง๋ง๐
).
๊ทธ๋ฐ๋ฐ Svelte๋ React์๋ ๋ค๋ฅด๊ฒ runtime์ ๋์ํ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ง compiler์ด๊ธฐ์ React์ ๊ฐ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฐ๋ฐ์๊ฐ ๋งค๋ฒ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค.
React์ฒ๋ผ runtime์ Virtual DOM diffing์ ํ์ฌ DOM์ ์
๋ฐ์ดํธ ํ๋ ๊ฒ์ด ์๋๋ผ build time์ ๋ฑ ํ์ํ DOM ์
๋ฐ์ดํธ(surgical update) ๋ก์ง๋ง ์์ฑํ์ฌ runtime์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ Svelte์ ์ฒ ํ์ด ๋์๊ฒ๋ ํจ์ฌ ์ค๋๋ ฅ์ด ์์๊ณ ๋ ๊น๊ฒ ํ๋ณด๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค๊ฒ ๋์๋ค.
Dive into Svelte world
์ด์ ์ Svelte๋ฅผ ๊ฐ์ธ ์ฌ์ด๋ ํ๋ก์ ํธ์์ ํ ๋ฒ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์๋ค.
๊ทธ๋์ Svelte์ ์ด๋์ ๋ ์ต์ํด์ ธ ์๊ธฐ๋ ํ ์ํ์๋ค(๋ฌผ๋ก , ์์ง๋ ์์จ๋ณธ ๊ธฐ๋ฅ์ด ํจ์ฌ ๋ ๋ง๊ธดํ์ง๋ง).
ํ์ง๋ง ๋๋ ์ด์ ์ค๋์ด๋ก ์ ์ด๋ค์๊ธฐ์, ๋จ์ํ ์ฌ์ฉ๋ฒ๋ง์ ์ตํ๋ ๊ฒ์ ๋ ์ด์ ๊ฐ๋ฐ์๋ก์์ ์ฑ์ฅ์ ํฐ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋์ ๋ฐ๋ก Svelte repo๋ฅผ cloneํ์ฌ ๋ฌด์์ ๋ถ์ํ๊ธฐ ์์ํ๋ค.
์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ์ ๋ดค์ ๋์ ๋๋์ ๋ค์๊ณผ ๊ฐ๋ค.
- directory structure์ ์๊ณ๊ฐ ์ ์กํ์๊ณ , ์ญํ ์ด ์ ๋๋์ด์ ธ ์๋ค.
- ๋ณ์๋ช , ํจ์๋ช ๋ฑ์ identifier์ ์ด๋ฆ๋ค์ด ๊ฝค๋ ์ง๊ด์ ์ผ๋ก ์ ์ง์ด์ ธ ์๋ค.
- type ๊ด๋ จ ํ์ผ์ ์กด์ฌํ์ง๋ง, TypeScript๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ ์๋๋ค. (JS Doc +
*.d.ts
ํ์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์์)
๋ญ ๊ฐ๋จํ ์ด ์ ๋์ ์ ๋ณด๋ง ํ์
ํ๊ณ compiler ๊ด๋ จ ์ฝ๋์ entry file ๊ฒฉ์ธ packages/svelte/src/compiler/index.js
ํ์ผ๋ก ๋์งํ๋ค.
ํ์คํ pure JavaScriptํ์ผ์ด ๋ณต์กํ type์ด ์ฝ๋์ ์์ฌ ๋ค์ด๊ฐ ์๋ TypeScript ํ์ผ๋ณด๋ค๋ ์ฝ๊ธฐ๊ฐ ํธํ๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ๋๋ฅผ ์ฝ๋ ์ค์ JS Doc์ syntax๊ฐ ์ฝ๊ฐ ์ด์ํ๊ฒ ๋ณด์ด๋ ๋ถ๋ถ์ ๋ฐ๊ฒฌํ๋ค.
๋จ์ํ๊ฒ @typedef
์ ์ธ์ ๋์ newline character๋ฅผ ๋ฃ์ง ์์์ ์๊ธด ๋ฌธ์ ์๋ค.
์ด๋ฐ ๋ถ๋ถ์ ์์งํ maintainer๋ค์ด ์ ๊ฒฝ์ฐ๊ธฐ๊ฐ ์ฝ์ง ์์ ์ฌ์ํ ๋ถ๋ถ์ด๋ค. ์๋ํ๋ฉด ๋ ํฐ task๋ค์ด ์ฐ์ ํด ์์ผ๋๊น.๊ทธ๋์ ๋ด๊ฐ ๋น์ฅ PR์ ์ฌ๋ ค์ ์์ ํ๋๊ฒ ๋ซ๊ฒ ๋ค๊ณ ํ๋จํ๋ค.
์๊ฐ์ ํ์๋ง์ ๋ฐ๋ก Svelte repository๋ฅผ fork ํด์ patch ์์ ์ ํ ๋ค์, remote PR์ ์๋์ฒ๋ผ ์ฌ๋ ค ๋์๋๋ ํ๋ฃจ ๋ค์ Rich Harris๊ฐ ์ง์ merge๋ฅผ ํด์ฃผ์๋๋ผ..!
์ฌ์ค ๋ณ ๊ฒ๋ ์๋์ง๋ง, ์ด๋ ๊ฒ ์ฌ์ํ ๋ถ๋ถ์ด๋ผ๋ PR์ ์ฌ๋ ค์ merge ์์ผ๋ณธ ๊ฒฝํ์ ํด๋ณธ ๊ฒ๊ณผ ์ํด๋ณธ ๊ฒ์ ์ฐจ์ด๊ฐ ์๊ฐ๋ณด๋ค ํฌ๋ค. ์๋ํ๋ฉด ์๋ฌด๋ฆฌ ๊ฐ๋จํ PR์ด๋ผ๋ ๊ทธ PR์ ํตํด ๋ด๊ฐ ํด๋น ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์๋ค๋ โ๋๋โ์ด, ํด๋น ํ๋ก์ ํธ์ ์ง์์ ์ผ๋ก ๊ธฐ์ฌํ ์ ์๊ฒ ๋ง๋๋ โ๋๊ธฐ๋ถ์ฌโ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์์ผ๋ก์ ๊ณํ
๋ด๋ ์๋ฐ๊ธฐ๊น์ง Svelte์ ์ค์ํ ๋ก์ง๋ค์ ๊น๊ฒ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค. ๊ทธ ๊ณผ์ ์์ ์๊ฒ ๋ ๊ฒ๋ค๋ ๋ฌผ๋ก ํฌ์คํ ํ ์์ ์ด๋ค. ๊ทธ ๊ณผ์ ์ด ๋ น๋ก์น๋ ์๊ฒ ์ง๋ง, ํ๋ก ํธ์๋ ์์ง๋์ด๋ก์์ ๋ค์ step์ ์ํด ์กฐ๊ธ์ฉ์ด๋ผ๋ ๊พธ์คํ๊ฒ ํด์ผ์ง.