์ธ๋ถํ๋ ๋ฐ์์ฑ์ ํตํด ๋ฐ์ด๋ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ธ SolidJS๋ฅผ ์ดํด๋ณด์ธ์. ํต์ฌ ๊ฐ๋ , ์ฅ์ , ๋ค๋ฅธ ํ๋ ์์ํฌ์์ ๋น๊ต๋ฅผ ์์๋ด ๋๋ค.
SolidJS: ์ธ๋ถํ๋ ๋ฐ์ํ ์น ํ๋ ์์ํฌ ์ฌ์ธต ๋ถ์
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ์ฌ๋ฐ๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. SolidJS๋ ๋ฐ์์ฑ๊ณผ ์ฑ๋ฅ์ ๋ํ ๋ ํนํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ฉฐ ๋งค๋ ฅ์ ์ธ ์ต์ ์ผ๋ก ๋ถ์ํ์ต๋๋ค. ์ด ๊ธ์์๋ SolidJS์ ํต์ฌ ๊ฐ๋ , ์ฅ์ , ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๋ค๋ฅธ ์ธ๊ธฐ ํ๋ ์์ํฌ์์ ๋น๊ต๋ฅผ ํตํด ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
SolidJS๋ ๋ฌด์์ธ๊ฐ?
SolidJS๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์ ์ธ์ ์ด๊ณ ํจ์จ์ ์ด๋ฉฐ ๊ฐ๋จํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Ryan Carniato๊ฐ ๊ฐ๋ฐํ์ผ๋ฉฐ, ์ธ๋ถํ๋ ๋ฐ์์ฑ(fine-grained reactivity)๊ณผ ๊ฐ์ DOM(Virtual DOM)์ด ์๋ค๋ ์ ์ด ํน์ง์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐ์ด๋ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฒผ์ด ๋ฐํ์์ ์ ๊ณตํฉ๋๋ค. ๊ฐ์ DOM ๋น๊ต(diffing)์ ์์กดํ๋ ํ๋ ์์ํฌ์ ๋ฌ๋ฆฌ, SolidJS๋ ํ ํ๋ฆฟ์ ๊ณ ํจ์จ์ DOM ์ ๋ฐ์ดํธ๋ก ์ปดํ์ผํฉ๋๋ค. ๋ฐ์ดํฐ ๋ถ๋ณ์ฑ๊ณผ ์ ํธ(signal)๋ฅผ ๊ฐ์กฐํ์ฌ ์์ธก ๊ฐ๋ฅํ๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋ฐ์ํ ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ํน์ง:
- ์ธ๋ถํ๋ ๋ฐ์์ฑ: SolidJS๋ ๊ฐ๋ณ ์์ฑ ์์ค์์ ์์กด์ฑ์ ์ถ์ ํ์ฌ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ DOM์ ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ์ต์ํํ๊ณ ์ฑ๋ฅ์ ๊ทน๋ํํฉ๋๋ค.
- ๊ฐ์ DOM ์์: SolidJS๋ ํ ํ๋ฆฟ์ ์ต์ ํ๋ DOM ๋ช ๋ น์ผ๋ก ์ง์ ์ปดํ์ผํ์ฌ ๊ฐ์ DOM์ ์ค๋ฒํค๋๋ฅผ ํผํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ DOM ๊ธฐ๋ฐ ํ๋ ์์ํฌ์ ๋ด์ฌ๋ ์กฐ์ (reconciliation) ํ๋ก์ธ์ค๋ฅผ ์ ๊ฑฐํ์ฌ ๋ ๋น ๋ฅธ ์ ๋ฐ์ดํธ์ ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ๊ตฌํํฉ๋๋ค.
- ๋ฐ์ํ ์์ ๊ฐ(Reactive Primitives): SolidJS๋ ์ ํธ(signal), ํจ๊ณผ(effect), ๋ฉ๋ชจ(memo)์ ๊ฐ์ ๋ฐ์ํ ์์ ๊ฐ ์ธํธ๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ ์ธ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ์ํ์ ๋ถ์ ํจ๊ณผ(side effect)๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค.
- ๊ฐ๋จํ๊ณ ์์ธก ๊ฐ๋ฅํจ: ํ๋ ์์ํฌ์ API๋ ๋น๊ต์ ์๊ณ ๊ฐ๋จํ์ฌ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค. ๋ฐ์ํ ์์คํ ๋ํ ์์ธก ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- TypeScript ์ง์: SolidJS๋ TypeScript๋ก ์์ฑ๋์์ผ๋ฉฐ ๋ฐ์ด๋ TypeScript ์ง์์ ์ ๊ณตํ์ฌ ํ์ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.
- ์์ ๋ฒ๋ค ํฌ๊ธฐ: SolidJS๋ ์ผ๋ฐ์ ์ผ๋ก 10KB ๋ฏธ๋ง(gzipped)์ ๋งค์ฐ ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์๋ํ๋ฉฐ, ์ด๋ ๋ ๋น ๋ฅธ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๊ธฐ์ฌํฉ๋๋ค.
SolidJS์ ํต์ฌ ๊ฐ๋
SolidJS์ ํต์ฌ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํจ๊ณผ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค:
1. ์ ํธ (Signals)
์ ํธ(Signal)๋ SolidJS ๋ฐ์ํ ์์คํ
์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์
๋๋ค. ๋ฐ์ํ ๊ฐ์ ๋ณด์ ํ๊ณ ํด๋น ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์์กดํ๋ ๋ชจ๋ ๊ณ์ฐ์ ์๋ฆผ์ ๋ณด๋
๋๋ค. ๋ฐ์ํ ๋ณ์๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. createSignal ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค:
import { createSignal } from 'solid-js';
const [count, setCount] = createSignal(0);
console.log(count()); // Access the value
setCount(1); // Update the value
createSignal ํจ์๋ ๋ ๊ฐ์ ํจ์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค: ์ ํธ์ ํ์ฌ ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํ getter ํจ์(์์ ์์๋ count())์ ๊ฐ์ ์
๋ฐ์ดํธํ๊ธฐ ์ํ setter ํจ์(setCount())์
๋๋ค. setter ํจ์๊ฐ ํธ์ถ๋๋ฉด ์ ํธ์ ์์กดํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ ๊ณ์ฐ์์ ์๋์ผ๋ก ์
๋ฐ์ดํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
2. ํจ๊ณผ (Effects)
ํจ๊ณผ(Effect)๋ ์ ํธ์ ๋ณํ์ ๋ฐ์ํ๋ ํจ์์
๋๋ค. DOM ์
๋ฐ์ดํธ, API ํธ์ถ, ๋ฐ์ดํฐ ๋ก๊น
๊ณผ ๊ฐ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. createEffect ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํจ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค:
import { createSignal, createEffect } from 'solid-js';
const [name, setName] = createSignal('World');
createEffect(() => {
console.log(`Hello, ${name()}!`); // This will run whenever 'name' changes
});
setName('SolidJS'); // Output: Hello, SolidJS!
์ด ์์ ์์ ํจ๊ณผ ํจ์๋ ์ด๊ธฐ์ ํ ๋ฒ ์คํ๋๊ณ , name ์ ํธ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์คํ๋ฉ๋๋ค. SolidJS๋ ํจ๊ณผ ๋ด์์ ์ด๋ค ์ ํธ๊ฐ ์ฝํ๋์ง ์๋์ผ๋ก ์ถ์ ํ๊ณ , ํด๋น ์ ํธ๊ฐ ์
๋ฐ์ดํธ๋ ๋๋ง ํจ๊ณผ๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
3. ๋ฉ๋ชจ (Memos)
๋ฉ๋ชจ(Memo)๋ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋ ๋ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋๋ ํ์ ๊ฐ์
๋๋ค. ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. createMemo ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฅผ ์์ฑํฉ๋๋ค:
import { createSignal, createMemo } from 'solid-js';
const [firstName, setFirstName] = createSignal('John');
const [lastName, setLastName] = createSignal('Doe');
const fullName = createMemo(() => `${firstName()} ${lastName()}`);
console.log(fullName()); // Output: John Doe
setFirstName('Jane');
console.log(fullName()); // Output: Jane Doe
fullName ๋ฉ๋ชจ๋ firstName ๋๋ lastName ์ ํธ ์ค ํ๋๋ผ๋ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋์ผ๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค. SolidJS๋ ๋ฉ๋ชจ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ํจ์จ์ ์ผ๋ก ์บ์ํ๊ณ ํ์ํ ๋๋ง ๋ค์ ์คํํฉ๋๋ค.
4. ์ปดํฌ๋ํธ (Components)
์ปดํฌ๋ํธ๋ UI ๋ก์ง๊ณผ ํํ์ ์บก์ํํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์์ ๋๋ค. SolidJS ์ปดํฌ๋ํธ๋ JSX ์์๋ฅผ ๋ฐํํ๋ ๊ฐ๋จํ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ๋๋ค. props๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒด ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
import { createSignal } from 'solid-js';
import { render } from 'solid-js/web';
function Counter() {
const [count, setCount] = createSignal(0);
return (
<div>
<p>Count: {count()}</p>
<button onClick={() => setCount(count() + 1)}>Increment</button>
</div>
);
}
render(() => <Counter />, document.getElementById('root'));
์ด ์์ ๋ ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ๋จํ ์นด์ดํฐ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ฉด setCount ํจ์๊ฐ ํธ์ถ๋์ด ์ ํธ๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์ปดํฌ๋ํธ์ ์ฌ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
SolidJS ์ฌ์ฉ์ ์ด์
SolidJS๋ ์น ๊ฐ๋ฐ์์๊ฒ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
1. ๋ฐ์ด๋ ์ฑ๋ฅ
SolidJS์ ์ธ๋ถํ๋ ๋ฐ์์ฑ๊ณผ ๊ฐ์ DOM ๋ถ์ฌ๋ ๋ฐ์ด๋ ์ฑ๋ฅ์ผ๋ก ์ด์ด์ง๋๋ค. ๋ฒค์น๋งํฌ๋ SolidJS๊ฐ ๋ ๋๋ง ์๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ ๋ฐ์ดํธ ํจ์จ์ฑ ์ธก๋ฉด์์ ๋ค๋ฅธ ์ธ๊ธฐ ํ๋ ์์ํฌ๋ฅผ ์ง์์ ์ผ๋ก ๋ฅ๊ฐํจ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ์ฆ์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํนํ ๋๋๋ฌ์ง๋๋ค.
2. ์์ ๋ฒ๋ค ํฌ๊ธฐ
SolidJS๋ ์ผ๋ฐ์ ์ผ๋ก 10KB ๋ฏธ๋ง(gzipped)์ ๋งค์ฐ ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ ํ์ด์ง ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ํนํ ๋์ญํญ์ด๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ ํ๋ ์ฅ์น์์ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ์์ ๋ฒ๋ค์ ๋ ๋์ SEO์ ์ ๊ทผ์ฑ์๋ ๊ธฐ์ฌํฉ๋๋ค.
3. ๊ฐ๋จํ๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฐ์์ฑ
SolidJS์ ๋ฐ์ํ ์์คํ ์ ๊ฐ๋จํ๊ณ ์์ธก ๊ฐ๋ฅํ ์์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋์์ ์ฝ๊ฒ ์ดํดํ๊ณ ์ถ๋ก ํ ์ ์์ต๋๋ค. ์ ํธ, ํจ๊ณผ, ๋ฉ๋ชจ์ ์ ์ธ์ ํน์ฑ์ ๊นจ๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ด์งํฉ๋๋ค.
4. ๋ฐ์ด๋ TypeScript ์ง์
SolidJS๋ TypeScript๋ก ์์ฑ๋์์ผ๋ฉฐ ๋ฐ์ด๋ TypeScript ์ง์์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ํ์ ์์ ์ฑ์ ์ ๊ณตํ๊ณ , ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํค๋ฉฐ, ๋ฐํ์ ์ค๋ฅ์ ๊ฐ๋ฅ์ฑ์ ์ค์ฌ์ค๋๋ค. ๋ํ TypeScript๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ํ์ ํ๊ณ ์๊ฐ์ด ์ง๋๋ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
5. ์ต์ํ ๊ตฌ๋ฌธ
SolidJS๋ ํ ํ๋ฆฟ์ JSX๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๋ React๋ก ์์ ํด ๋ณธ ๊ฐ๋ฐ์์๊ฒ ์ต์ํฉ๋๋ค. ์ด๋ ํ์ต ๊ณก์ ์ ์ค์ฌ์ฃผ๊ณ ๊ธฐ์กด ํ๋ก์ ํธ์ SolidJS๋ฅผ ๋ ์ฝ๊ฒ ๋์ ํ ์ ์๊ฒ ํฉ๋๋ค.
6. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) ๋ฐ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)
SolidJS๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)์ ์ง์ํ์ฌ SEO์ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. Solid Start์ ๊ฐ์ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ SSR ๋ฐ SSG ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํด SolidJS์์ ์ํํ ํตํฉ์ ์ ๊ณตํฉ๋๋ค.
SolidJS์ ์ฌ์ฉ ์ฌ๋ก
SolidJS๋ ๋ค์์ ํฌํจํ ๋ค์ํ ์น ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค:
1. ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
SolidJS์ ์ฑ๋ฅ๊ณผ ๋ฐ์์ฑ์ ๋์๋ณด๋, ๋ฐ์ดํฐ ์๊ฐํ, ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ์ฆ์ ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ์ ํ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ง์์ ์ผ๋ก ๋ณํํ๋ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ํ์ํด์ผ ํ๋ ์ค์๊ฐ ์ฃผ์ ๊ฑฐ๋ ํ๋ซํผ์ ์๊ฐํด ๋ณด์ญ์์ค. SolidJS์ ์ธ๋ถํ๋ ๋ฐ์์ฑ์ UI์ ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ๋๋๋ก ๋ณด์ฅํ์ฌ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
2. ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์
์ฑ๋ฅ์ด ์ต์ฐ์ ์์๋ผ๋ฉด SolidJS๋ ๊ฐ๋ ฅํ ๊ฒฝ์์์ ๋๋ค. ์ต์ ํ๋ DOM ์ ๋ฐ์ดํธ์ ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ ํนํ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ์ฅ์น์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๋์ ๋ฐ์์ฑ๊ณผ ์ต์ํ์ ์ง์ฐ ์๊ฐ์ด ์๊ตฌ๋๋ ์จ๋ผ์ธ ๊ฒ์์ด๋ ๋น๋์ค ํธ์ง ๋๊ตฌ์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
3. ์ค์ ๊ท๋ชจ ํ๋ก์ ํธ
SolidJS์ ๋จ์์ฑ๊ณผ ์์ ์ค์น ๊ณต๊ฐ์ ๊ฐ๋ฐ์ ์์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ์ค์ํ ์ค์ ๊ท๋ชจ ํ๋ก์ ํธ์ ์ข์ ์ ํ์ ๋๋ค. ํ์ต ๋ฐ ์ฌ์ฉ์ ์ฉ์ด์ฑ์ ๊ฐ๋ฐ์๊ฐ ๋ ํฌ๊ณ ๋ณต์กํ ํ๋ ์์ํฌ์ ์ค๋ฒํค๋ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ฒ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ง์ญ ๋น์ฆ๋์ค๋ฅผ ์ํ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ์์ํด ๋ณด์ญ์์ค โ SolidJS๋ ๊ฐ์ํ๋๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
4. ์ ์ง์ ํฅ์ (Progressive Enhancement)
SolidJS๋ ์ ์ง์ ํฅ์์ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ ์ฒด ์ฌ์์ฑ ์์ด ๊ธฐ์กด ์น์ฌ์ดํธ์ ์ ์ง์ ์ผ๋ก ์ํธ์์ฉ๊ณผ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ ์ฒด ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ๊ด๋ จ๋ ๋น์ฉ๊ณผ ์ํ์ ๊ฐ์ํ์ง ์๊ณ ๋ ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ํํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ HTML๋ก ๊ตฌ์ถ๋ ๊ธฐ์กด ์น์ฌ์ดํธ์ ๋์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐ SolidJS๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SolidJS์ ๋ค๋ฅธ ํ๋ ์์ํฌ ๋น๊ต
SolidJS์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ์ดํดํ๊ธฐ ์ํด ๋ค๋ฅธ ์ธ๊ธฐ ํ๋ ์์ํฌ์ ๋น๊ตํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค:
SolidJS ๋ React
- ๋ฐ์์ฑ: React๋ ๊ฐ์ DOM๊ณผ ์ปดํฌ๋ํธ ์์ค์ ์กฐ์ ์ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, SolidJS๋ ์ธ๋ถํ๋ ๋ฐ์์ฑ๊ณผ ์ง์ ์ ์ธ DOM ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฑ๋ฅ: SolidJS๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋๋ง ์๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก๋ฉด์์ React๋ณด๋ค ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ: SolidJS๋ React๋ณด๋ค ํจ์ฌ ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ค.
- ํ์ต ๊ณก์ : React๋ ๋ ํฐ ์ํ๊ณ์ ๋ ๊ด๋ฒ์ํ ๋ฌธ์๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, SolidJS๋ ๋ ๊ฐ๋จํ API ๋๋ถ์ ๋ฐฐ์ฐ๊ธฐ ๋ ์ฝ๋ค๊ณ ์ฌ๊ฒจ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๊ฐ์ DOM: React๋ ๊ฐ์ DOM์ ํฌ๊ฒ ์์กดํ์ง๋ง, SolidJS๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
SolidJS ๋ Vue.js
- ๋ฐ์์ฑ: Vue.js๋ ํ๋ก์ ๊ธฐ๋ฐ์ ๋ฐ์ํ ์์คํ ์ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, SolidJS๋ ์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฑ๋ฅ: SolidJS๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋๋ง ์๋ ์ธก๋ฉด์์ Vue.js๋ณด๋ค ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ: SolidJS๋ Vue.js๋ณด๋ค ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ค.
- ํ์ต ๊ณก์ : Vue.js๋ ๋ ์ ์ง์ ์ธ ํ์ต ๊ณก์ ๊ณผ ๋ ๊ด๋ฒ์ํ ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค ๋๋ถ์ SolidJS๋ณด๋ค ๋ฐฐ์ฐ๊ธฐ ๋ ์ฝ๋ค๊ณ ์ฌ๊ฒจ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
SolidJS ๋ Svelte
- ๋ฐ์์ฑ: SolidJS์ Svelte๋ ๋ชจ๋ ์ปดํ์ผ ํ์ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ์์ฑ์ ์ฌ์ฉํ์ง๋ง, ๊ตฌํ ์ธ๋ถ ์ฌํญ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ์ฑ๋ฅ: SolidJS์ Svelte๋ ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ ๋ฉด์์ ๋น์ทํฉ๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ: SolidJS์ Svelte๋ ๋ชจ๋ ๋งค์ฐ ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ค.
- ํ์ต ๊ณก์ : Svelte๋ ๋ ๊ฐ๋จํ ๊ตฌ๋ฌธ๊ณผ ๋ ์ง๊ด์ ์ธ ๊ฐ๋ฐ ๊ฒฝํ ๋๋ถ์ SolidJS๋ณด๋ค ๋ฐฐ์ฐ๊ธฐ ๋ ์ฝ๋ค๊ณ ์ฌ๊ฒจ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
SolidJS ์์ํ๊ธฐ
SolidJS๋ฅผ ์์ํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค:
1. ๊ฐ๋ฐ ํ๊ฒฝ ์ค์
์ปดํจํฐ์ Node.js์ npm(๋๋ yarn)์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์๋ก์ด SolidJS ํ๋ก์ ํธ๋ฅผ ์ ์ํ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
npx degit solidjs/templates/ts my-solid-app
cd my-solid-app
npm install
npm run dev
์ด๋ ๊ฒ ํ๋ฉด my-solid-app ๋๋ ํ ๋ฆฌ์ ์๋ก์ด SolidJS ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ณ , ํ์ํ ์์กด์ฑ์ด ์ค์น๋๋ฉฐ, ๊ฐ๋ฐ ์๋ฒ๊ฐ ์์๋ฉ๋๋ค.
2. ๊ธฐ๋ณธ ์ฌํญ ํ์ต
๊ณต์ SolidJS ๋ฌธ์์ ํํ ๋ฆฌ์ผ์ ์ดํด๋ณด๋ ๊ฒ์ผ๋ก ์์ํ์ธ์. ์ ํธ, ํจ๊ณผ, ๋ฉ๋ชจ, ์ปดํฌ๋ํธ์ ํต์ฌ ๊ฐ๋ ์ ์ต์ํด์ง์ธ์. ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด๋ฉฐ ์ดํด๋ฅผ ๋ค์ง์ธ์.
3. ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ๊ธฐ
SolidJS ์ปค๋ฎค๋ํฐ๋ ํ๋ฐํ๊ณ ํ์ํ๋ ๋ถ์๊ธฐ์ ๋๋ค. SolidJS Discord ์๋ฒ์ ๊ฐ์ ํ๊ณ , ํ ๋ก ์ ์ฐธ์ฌํ๋ฉฐ, ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํ์ธ์. ์ง์๊ณผ ๊ฒฝํ์ ๊ณต์ ํ๋ ๊ฒ์ SolidJS ๊ฐ๋ฐ์๋ก์ ๋ฐฐ์ฐ๊ณ ์ฑ์ฅํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
SolidJS ์ค์ ์ฌ์ฉ ์ฌ๋ก
SolidJS๋ ๋น๊ต์ ์๋ก์ด ํ๋ ์์ํฌ์ด์ง๋ง, ์ด๋ฏธ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ฃผ๋ชฉํ ๋งํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Webamp: ๋ธ๋ผ์ฐ์ ์์ ํด๋์ Winamp ๋ฏธ๋์ด ํ๋ ์ด์ด๋ฅผ ์ถฉ์คํ ์ฌํํ ๊ฒ์ผ๋ก, ๋ณต์กํ UI์ ์ค์๊ฐ ์ค๋์ค ์ฒ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ SolidJS์ ๋ฅ๋ ฅ์ ๋ณด์ฌ์ค๋๋ค.
- Suid: SolidJS ์์ ๊ตฌ์ถ๋ ์ ์ธ์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ค์ํ ์ฌ์ ์ ์ ์ปดํฌ๋ํธ์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ค์์ ์๊ท๋ชจ ํ๋ก์ ํธ: SolidJS๋ ์๋์ ์ฌ์ฉ ํธ์์ฑ ๋๋ถ์ ์๊ท๋ชจ ๊ฐ์ธ ํ๋ก์ ํธ ๋ฐ ๋ด๋ถ ๋๊ตฌ์์ ์ ์ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
SolidJS๋ ๋ฐ์ด๋ ์ฑ๋ฅ, ์์ ๋ฒ๋ค ํฌ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋จํ๋ฉด์๋ ์์ธก ๊ฐ๋ฅํ ๋ฐ์ํ ์์คํ ์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ๊ณ ์ ๋งํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ ๋๋ค. ์ธ๋ถํ๋ ๋ฐ์์ฑ๊ณผ ๊ฐ์ DOM์ ๋ถ์ฌ๋ ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค๋ ฅ์ ์ธ ์ ํ์ด ๋๊ฒ ํฉ๋๋ค. ์ํ๊ณ๋ ์์ง ์ฑ์ฅ ์ค์ด์ง๋ง, SolidJS๋ ๋น ๋ฅด๊ฒ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ผ๋ฉฐ ์น ๊ฐ๋ฐ ๋ถ์ผ์ ์ฃผ์ ์ฃผ์๊ฐ ๋ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค. ๋ค์ ํ๋ก์ ํธ์ SolidJS๋ฅผ ๊ฒํ ํ์ฌ ๋ฐ์์ฑ๊ณผ ์ฑ๋ฅ์ ๋ํ ๋ ํนํ ์ ๊ทผ ๋ฐฉ์์ ์ด์ ์ ๊ฒฝํํด ๋ณด์ญ์์ค.