[svelte] SVELTE ํ๋ฆฌ๋ทฐ
- ๋ฅ์ง
- Development
- ๋ถ๋ฅ
- Javascript
- ๋ฑ๋ก์ผ
๋ค์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ์ฌ ํ์ํ ๊ธฐ์ ๋ค์ ๋ฆฌ์์นํ๊ณ ์์๋ค.
์ธ์ ๋ vue.js๋ก๋ง ๋ง๋ค์๋ ์๊ณ , ์ข ๋ ๊ท์น์ ์ฝ๋งค์ด์ง ์๊ณ ์์ํ ๋ชจ์ต์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผํ ์๊ธฐ๊ฐ ์๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค.
๋๋ฌด ๋ง์ด๋ํ ํ๋ ์์ํฌ๋ฅผ ์ ์ธํ ๊ฒ๋ค ์ธ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค. (์ต๊ทค๋ฌ๋ ์๋์ ์ผ๋ก ์ ์ธ)
- react.js
- vue.js
- svelte
์ด์ ๋ ์ฏค์ธ๋ฐ ์ด๋ฒ์๋ svelte๊ฐ ์ด๋ค๊ฒ์ธ์ง ์ข ์์๋ณด๊ธฐ๋ก ํ๋ค.
๋จผ์ ์ง๊ธ๊น์ง ๊ฐ๋ฐํด์ค๋ฉด์ ์ฒดํฌํด๋ด์ผํ ํญ๋ชฉ๋ค์ ๋ชฉ๋ก์ผ๋ก ๋ง๋ค์ด๋ณด์๋ค.
- css ํด๋์ค ์๋๋ฐฉ์
- ์คํ ์ด
- ๋ผ์ฐํฐ ์ข ๋ฅ
- ํ์ ์คํฌ๋ฆฝํธ ์ง์
- ๋น๋์ ํ๋ก๋์ (์ฝ๋์คํ๋ฆฟ)
- ํ ํ๋ฆฟ ๋ฌธ๋ฒ
- ํ ์ปดํฌ๋ํธ๋ก์ ํต์ ๊ณผ ์ด๋ฒคํธ ์ ๋ฌ
- ์น ์ปดํฌ๋ํธ ์ง์
์ด ํญ๋ชฉ๋ค์ ํ๋์ฉ ์ง์คํ๋ฉด์ ์ดํด๋ณด์๋ค.
์คํ์ผ์ํธ
์ค๋ฒจํธ์ ์ปดํฌ๋ํธ๋ ์ฌ๋ฌ๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฃ๋๊ฒ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ vue ์ฒ๋ผ ์ปดํฌ๋ํธ์์ class props ์ฌ์ฉํ๋๊ฑด ์๋๋ค.
๊ทธ๋์ ๊ฐ์ ๊ทธ๋ฅ props๋ก ๋๊ธฐ๊ณ ๋ณ์๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ์คํ์ผ์ํธ ์์ฑ๋ฐฉ์์ ์กฐ๊ธ ๊ณ ์ณ์ผ ํ ๊ฒ์ด๋ค.
์ปดํฌ๋ํธ ๋ด๋ถ์ ์์๋ฅผ ์คํ์ผ๋ง ํ๊ณ ์ถ๋ค๋ฉด..
๋ค์๊ณผ ๊ฐ์ด :global()์ ์ด์ฉํ๋ฉด ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
.app {
:global(.foo) {
border: 1px solid red;
}
}
๋ธ๋ผ์ฐ์ ์์ ํ์๋ ํด๋์ค์ ์
๋ ํฐ๋ฅผ ์ดํด๋ณด๋ foo {RANDOM_ID} ํ์์ผ๋ก ๋์ด์๊ณ , ๋ถ๋ชจ์ ํด๋์ค ์์ ์์ ํด๋์ค๋ฅผ ์
๋ ํ
ํ๋ ๋ฐฉ์์ด๋ค๋ณด๋ ์์ ์ปดํฌ๋ํธ์๋ค ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ธ๋๊ฒ ์ข์ง ์์๊น ์ถ๋ค.
์ปค๋ค๋๊ฒ ๋ณด๋ฉด vue์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋น์ทํ์ง๋ง ์ปดํฌ๋ํธ ํน์ฑ์ ์ํด์ ์กฐ๊ธ์ฉ ์์ฑํ๋ ๋ฐฉ์์ด ๋ฌ๋ผ์ง ๋ฟ์ด๋ค. (vue์ ๋นํด์ ๋ถํธํ ์ ์๊ณ , ํธํ ์๋ ์์๊ฒ์ด๋ค.)
ํ ํ๋ฆฟ ๋ฌธ๋ฒ
์ธ๋ถ์ ํน์๋ฌด๋๋ฅผ ์กฐํฉํ์ฌ ๋ฌธ๋ฒ์ ๊ตฌ์ฑํ๋ค. ide์์๋ ๋งค๋๋ฝ๊ฒ ์๋์์ฑ์ด ๋์ง์์ ์ฌ์ฉํ๋๊ฒ ์กฐ๊ธ ๊ท์ฐฎ์ ์์ค์ด๋ค.
์ฝ๋์ ํํ๋ ๊ทธ๋ฅ ๋์์ง ์์๋ฏ.. php์์ ์ฌ์ฉํ๋ ํ
ํ๋ฆฟ ๋ฌธ๋ฒ๊ณผ ๋น์ทํ๋ค.
์ด๊ฒ์ ์ ์์ ๋ฌธ์ ..
์คํ ์ด
์คํ ์ด์ ๊ตฌ์ฑ์ ๋๋จํ ๋จ์ํด๋ณด์ด๋ ์ธ์์ด๋ค.
๊ฐ๋จํ ์์ ๋ฅผ ์์ฑํด๋ณด๋ฉด์ ํ์
ํด๋ณด๋ pinia๋ ๋น์ทํ ํ๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ทธ๋ณด๋ค ๋ ๋จ์ํ๊ฒ ๋๊ปด์ง๋ค.
ํ์ง๋ง ๋ก์ง์ ์ง์ ๋ง๋ค์ด์ผ ํ ๊ฑฐ๊ฐ์ ๋ณด์ด๋ ์ธ์์ด๋ค.
์คํ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ณ ์น ์ ์๋ ๋ฐฉ๋ฒ๋ ์ ๊ณต๋์ด ์๊ณ , actions์ด๋ getters ์ญํ ๋ค์ ๋ํ ๋๊ตฌ๋ค๋ ๋ค ์ค๋น๋์ด์๋ค.
๊ตฌ์กฐ๊ฐ ๊ฐ์ ๋์ด ์์ง์์ ์์ ๋ถ๋ฐฉํ๊ฒ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ด๋ณด์ธ๋ค.
์ด๊ฒ ๋๋ฌด ์์ ๋ถ๋ฐฉํ ์์ค์ผ๋ก ํ์ด๋์ ์ํ์ด๋ค๋ณด๋ ์ค๊ณ๋ฅผ ์ ํด์ผํ ๊ฑฐ ๊ฐ๋ค.
ํ์ ์คํฌ๋ฆฝํธ ์ง์
์ผ๋จ svelte ํ๋ก๊ทธ๋จ์ด ๋จ์ํ ๊ตฌ์กฐ๋ผ์ ๊ทธ๋ฐ์ง ๋ฏธ๋ฆฌ ์ธํ
ํด๋๋งํ ์ค์ ์ ์๋์ ์ผ๋ก ๋ณต์กํ๊ฒ ๋๊ปด์ง์ง ์๋๋ค.
๊ฑฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ํ๊ฒ ์์ฑํ๋ ๋ฐฉ์์ด๋ ๋ง์น๊ฐ์ง๋ผ์ ํ์
์คํฌ๋ฆฝํธ์ ๋ํ์ฌ ์๋นํ ๊ด๋ํ๊ฒ ๋๊ปด์ง๋ค.
์น ์ปดํฌ๋ํธ
์ฌ์ฉํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ํก์ฌํด์ ์๋ฌด ์ฝ๋์๋ค customElements.define('media-source', MediaSource) ๊ฐ์ ํ์์ผ๋ก ๋ฃ์ด์ ์ฌ์ฉํด๋ฒ๋ฆฌ๋ฉด ์๋๋๋ค. vite์์ ๋จผ์ ์กฐ์ ํด์ค์ผ ํ๋ ์์
๊ฐ์๊ฑด ์๊ณ ๊ทธ๋ฅ ๋ฐ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฃผ์ํด์ผํ ์ ์ define ์ ์ธ์ด ๋์ด์๋๋ฐ ๋ ์ ์ธ์ ํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ณต์ ์ธ์ ํผํด์ค์ผํ๋ค.
if (!customElements.get('media-source'))
{
customElements.define('media-source', MediaSource);
}
ํ ์ปดํฌ๋ํธ ์ด๋ฒคํธ ์ฒ๋ฆฌ
๊ฐ์ ์์์๊ฒ ๋ด๋ฆฌ๊ฑฐ๋ ๋ถ๋ชจ์๊ฒ ์ฌ๋ฆฌ๋ ์ผ ๋ชจ๋ ๊ฐ๋ฅํ๋ค. ๊ฝค ๊ด์ฐฎ์ ๋ฐฉ๋ฒ์ผ๋ก..
์ด๋ฒคํธ ํธ์ถ์ vue์ ๋นํด์ ์ข๋ ๋ค์ดํฐ๋ธํ ๋ชจ์ต์ผ๋ก ์ฒ๋ฆฌํ๋๊ฑฐ๋ผ์ ์ฝ๋ ์์ฑ์ด ๊ฝค ๊ท์ฐฎ์ ํธ์ผ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํด์ ์ข์๋ณด์ธ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฒคํธ ๋ชจ๋ํ์ด์ด๋ผ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํด์ preventDefault๊ฐ์ ๊ธฐ๋ฅ์ vue์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. (ํ์ง๋ง ์ฌ์ฉํ๋ ๋ฌธ์๋ ๋ค๋ฅด๋ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ผํ๋ค.)
์ฐธ๊ณ URL: https://beomy.github.io/tech/svelte/events/
๋ผ์ฐํฐ
svelte ๋ ์ฃผ๋ก spa๋ฐฉ์์ ๋ผ์ฐํฐ๊ฐ ๋ง์ด ๋ณด์ฌ์ ์๋์ ์ผ๋ก ํ์คํ ๋ฆฌ ๋ฐฉ์์ ๋ผ์ฐํฐ๋ ์ทจ์ฝํด ๋ณด์๋ค. ์์ง๊น์ง ๋ง์์ ๋๋ ๋ผ์ฐํฐ๋ฅผ ์ฐพ์ง ๋ชปํด์ svelte ์ฌ์ฉ์ ๊บผ๋ คํ๊ณ ์๋ ํธ์ด์๋๋ฐ.. ใ
์ด๋ฒ์ tinro๋ผ๋ ๋ผ์ฐํฐ๋ฅผ ์ฐพ๊ฒ ๋์๋๋ฐ ์ด๊ฑด ์๋นํ ์ข์ ๋ณด์ธ๋ค. ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋ค ๊ฐ์ถ๊ณ ์๊ณ , hash, history, memory ๋ฐฉ์๋ ๋ค ์ง์ํ๋ค.
์ฌํ๊น์ง๋ ํ์ผ์ด๋ ํน์ ๋ฐฐ์ด์๋ค ๊ท์น์ ์ง๋ง์ถ๋ ๋ฐฉ์์ ์ฌ์ฉํด์๋๋ฐ ์ด๊ฒ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์กฐ๋ฅผ ์ง์ ๋ง๋๋ ๋ฐฉ์์ด๋ผ์ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ๊ฐ ์๋นํ ์ฌํํ๊ฒ ๋์๋ค.
์ฌ์ฉํ๋ ์
์ฅ์์ ์๋ชป ์ค๊ณํ๋ฉด ๋๋จํ ๋ค์ฃฝ๋ฐ์ฃฝ์ด ๋๋ ํธ์ด๋ผ์ ์ฐ๊ธฐ๋๋ฆ์ผ ๊ฒ์ด๋ค.
๋น๋ ๋ฐ ํ๋ก๋์ ์๋ฒ
vite๋ก ๋น๋ํ๋ ํธ์ด๋ผ์ ์๋ ์์ฒด๋ ๋ฌด๋ํ๊ฒ ๋๋ ํธ์ด๋ค.
๋น๋๋ ํ์ผ๋ค์ด ์ ๋ถ assets ์์ ์ ๋ถ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ค๋ฉด ์์ด ๋๋จํ ๋ง์์ง๊ฑฐ๋ผ ์๊ฐ๋๋ค. ๊ทธ๋์ vite.config ์์ญ์์ ์ข๋ ๋ํ
์ผํ๊ฒ ์์ฑํด์ผํ์ง ์์๊น ์๊ฐํ๋ค.(์ฉ๋์ ํ์
์ ๋๋์ด ๋๋ ํ ๋ฆฌ๋ฅผ ๋๋๋ค๋์ง..)
๋ผ์ด๋ธ ์๋ฒ ๋๋ฆฌ๋๊ฒ๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์ ๋น์ทํ ์์ค์ผ๋ก ๋์๊ฐ๋ ํธ์ด๋ฉฐ ํ๋ก์ ์๋ฒ ๊ฐ์๊ฑด ์ข๋ ํ ์คํธ ํด๋ด์ผํ ์ง๋..
SSR์ ์ด๋ป๊ฒ ๋์ค๋์ง ํ ์คํธ ํด๋ณด๊ณ ์ถ์ด์ก๋ค.
์ ๋ฆฌ
ํ๋ฆฌ๋ทฐ ํด๋ณด๋ฉด์ ๋๊ผ๋ ์ธ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ต๊ฒ ์์ ๋กญ๊ฒ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์๊ณ , ์๋ก์ด ๊ท์น๋ค์ ๊ฐ์ ํ๋๊ฒ๋ณด๋ค ๊ทธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ธฐ๋ถ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์ ๊ฐ์ธ์ ์ผ๋ก ์ฆ๊ฑฐ์ ๋ค. (๋ค๋ง ์ปดํฌ๋ํธ์ ํ ํ๋ฆฟ์ ๊ฐ์ ๋ ๊ท์น์ด ํ์ํ๋ฉฐ ์ด๋ฐ ์์๋ ์ด๋์ ๋ ๊ผญ ํ์ํ๋ค!)
๋ชฉ๋ก์ ์๋ ํญ๋ชฉ๋ค์ ์ ๋ถ ๊ด์ฐฎ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ์ด ๋์๊ณ ๋จ์๊ฒ์ SSR ์ ๋์ผ ๋ฟ์ด๋ค.
์ปค๋ฎค๋ํฐ์ ๋ ํผ๋ฐ์ค, ์ ์ฉ์ฌ๋ก๊ฐ ๋ถ์กฑํ์ง๋ง ๋์ ์๊ตฌ๊ฐ ๋์์ ธ์ ์ด๊ฑธ๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์ถ๊ธฐ๋ ํ๋ค.
์์ง๋ ๋ฆฌ์ํธ๋ ์คํ์ผ์ํธ ์ฌ์ฉ๋ฒ์ ๋ํ์ฌ ์ฌ์ ํ ๋ถ๋ง์ ๊ฐ์ง๊ณ ์์ด์ ๋์ฑ svelte์ ํฅ๋ฏธ๊ฐ ๋๋ฆฌ๊ธฐ๋ ํ๋ค.
์ด๊ฑธ๋ก ์น ์ปดํฌ๋ํธ ๊ฐ๋ฐ์ ์ข๋ ์์ํ๊ฒ ํ๋๊ฒ๋ ์ข ์ดํด๋ณด๊ณ SSR์ด ์ด๋ป๊ฒ ๋์ํ๋์ง๋ ์ข๋ ์ดํด๋ณด๊ณ ์์ผ๋ก ์ด๊ฑธ๋ก ์ฌ์ฉํ ๊ฒ์ธ์ง์ ๋ํ์ฌ ๊ณ ๋ คํด๋ด์ผ๊ฒ ๋ค.
๋ง์ฝ ์ด๊ฑธ๋ก ์ฌ์ฉํ๊ธฐ๋ก ์์ ํ๋ค๋ฉด ์์ผ๋ก ๋ง๋ค์ด์ง๋ ์ปดํฌ๋ํธ๋ค์ ์ ๋ถ svelte๋ก ๋ง๋ค์ด์ง๊ฒ ์ง.. ใ
ใ
์๋๋ฉด ํฌํ
ํ๊ธฐ๋ ํ ์๋ ์๊ณ ..
0๊ฐ์ ๋๊ธ
๋ฑ๋ก๋ ๋๊ธ์ด ์์ต๋๋ค.