๐ ๏ธ ๊ธฐ์ ์คํ ์ ์ ์ด์ โ
๋ณธ ํ๋ก์ ํธ๋ ์งง์ ๊ฐ๋ฐ ๊ธฐ๊ฐ, ์์ ์ธ์, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฅธ ํผ๋๋ฐฑ๊ณผ ๋ฐ๋ณต์ ์ธ ๊ฐ์ ์ด ํต์ฌ์ด ๋๋ ํ๊ฒฝ์์ ์งํ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ์์ํ๊ณ ์์ ์ ์ผ๋ก ์ ์ง๋ณด์ํ ์ ์๋ ๊ธฐ์ ์คํ์ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ์ต๋๋ค.
๊ธฐ์ ์ ์ ์ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค
- ํ์์ด ๊ธฐ์กด์ ์ฌ์ฉ ๊ฒฝํ์ด ์์ด ๋น ๋ฅด๊ฒ ์ง์ ๊ฐ๋ฅํ ๊ธฐ์
- ํ์ ๊ณผ์ ์์ ์ถฉ๋์ ์ค์ด๊ณ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ ๊ตฌ์กฐ
- ๋ฐฐํฌ ๋ฐ ์ด์๊น์ง์ ํ๋ฆ์ด ๋จ์ํ๊ณ ๊ฐ๋ฒผ์ด ๋๊ตฌ
์ด๋ฌํ ๋ฐฐ๊ฒฝ์์, ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ๋ค์ ์ ์ ํ๊ณ ์ ์ฉํ๊ฒ ๋์์ต๋๋ค.
React & TypeScript โ
React๋ UI๋ฅผ ์ปดํฌ๋ํธ ๋จ์๋ก ๋๋์ด ๊ตฌ์ฑํ ์ ์์ด ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ์ญํ ๋ถ๋ด์ด ๋ช ํํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ๋ก์ ํธ ์ด๊ธฐ๋ถํฐ ํ์๋ค์ด React์ ์ต์ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ํ์ต ๊ธฐ๊ฐ ์์ด ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ์ฐฉ์ํ ์ ์์๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋๋ ๋์ ์ปค๋ฎค๋ํฐ์ ํ๋ถํ ๋ ํผ๋ฐ์ค๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์์ต๋๋ค. TypeScript๋ ์ ์ ํ์ ์์คํ ์ ํตํด ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ๊ณ , ํจ์๋ ์ปดํฌ๋ํธ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ช ํํ ์ ์ํ์ฌ ํ์ ํจ์จ์ฑ์ ํฌ๊ฒ ๋์ฌ์ฃผ์์ต๋๋ค. ํนํ ์ฌ๋ฌ ๋ช ์ด ๋์์ ์์ ํ๋ ํ๊ฒฝ์์ TypeScript์ ํ์ ์ ์๋ ๋ช ํํ ๊ณ์ฝ์ ์ญํ ์ ํ๋ฉฐ ์ฝ๋ ์ถฉ๋์ ์ค์ด๋ ๋ฐ ํจ๊ณผ์ ์ด์์ต๋๋ค.
ํํธ, ๋ชจ๋ ธ๋ ํฌ๋ ํฐ๋ณด๋ ํฌ๋ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ํฌ์ง ์๊ณ ํจํค์ง ๋ถ๋ฆฌ๊ฐ ํ์ํ ๋ณต์กํ ๊ตฌ์กฐ๋ ์๋์๊ธฐ ๋๋ฌธ์, ๋จ์ผ ๋ ํฌ์งํ ๋ฆฌ๋ก ์์ ํ๋ ๊ฒ์ด ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ด์์ต๋๋ค. ๋ํ ์งง์ ๊ฐ๋ฐ ๊ธฐ๊ฐ ์์ ๋น ๋ฅด๊ฒ ํผ๋๋ฐฑ์ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ ์ํฉ์์๋ ๋ณต์กํ ๋ ํฌ ๊ด๋ฆฌ๋ณด๋ค ๋จ์ผ ๊ตฌ์กฐ์์ ์ง์คํ๋ ๊ฒ์ด ๋ ์ค์ฉ์ ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค.
CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Tailwind vs Vanilla Extract โ
์คํ์ผ๋ง ๋๊ตฌ๋ก๋ Vanilla Extract์ Tailwind CSS๋ฅผ ๋๊ณ ๊ณ ๋ฏผํ์ต๋๋ค. Vanilla Extract๋ ์คํ์ผ๊ณผ ๋ก์ง์ด ๋ถ๋ฆฌ๋์ด ๊น๋ํ ๊ตฌ์กฐ๋ฅผ ์ ์งํ ์ ์๊ณ , ํ์ ์คํฌ๋ฆฝํธ์ ์ฐ๋๋์ด ํ์ ์์ ์ฑ๊ณผ ๋์์ธ ํ ํฐ ๊ธฐ๋ฐ ์์คํ ๊ตฌํ์ ์ ๋ฆฌํ์ต๋๋ค. ์ ์ ์คํ์ผ ์ถ์ถ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ ๋ถ๋ด๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ์ ์คํ์ผ ํ์ผ์ด ๋ถ๋ฆฌ๋์ด ์์ด ๋งฅ๋ฝ ํ์ ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๊ณ , ํ์๋ค์ด ์ด ํด์ ์ต์ํ์ง ์์ ๋ฌ๋ ์ปค๋ธ๊ฐ ์กด์ฌํ์ต๋๋ค. ์งง์ ๊ธฐ๊ฐ ๋์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํด์ผ ํ๋ ํ๊ฒฝ์์๋ ์ง์ ์ฅ๋ฒฝ์ด ์๋ ๋๊ตฌ์์ต๋๋ค.
Tailwind CSS๋ ์ ํธ๋ฆฌํฐ ํด๋์ค ๊ธฐ๋ฐ์ด๋ผ ๋น ๋ฅธ ์คํ์ผ๋ง์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์์์ง๋ง, ํด๋์ค๋ช
์ด ๋ง์์ง๋ฉด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ์ ์๋ค๋ ์ฐ๋ ค๊ฐ ์์์ต๋๋ค. ํ์ง๋ง v4๋ถํฐ Rust ๊ธฐ๋ฐ ์์ง์ด ๋์
๋๋ฉฐ ๋น๋ ์๋๊ฐ ํฌ๊ฒ ๊ฐ์ ๋์๊ณ , ์ต์ CSS ๊ธฐ๋ฅ(JIT ์ต์ ํ, ์ปจํ
์ด๋ ์ฟผ๋ฆฌ, OKLCH ์์ ์์คํ
๋ฑ)์ ์ง์ํ๋ฉฐ ์์ฐ์ฑ๊ณผ ๋์์ธ ํ์ง ๋ชจ๋์์ ๊ธ์ ์ ์ธ ๋ณํ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ์ค์ ํ๋ก์ ํธ์์๋ cn
, cva
๊ฐ์ ์ ํธ๋ฆฌํฐ ํจ์๋ก ํด๋์ค ๊ด๋ฆฌ๋ฅผ ์ฒด๊ณํํด ๊ฐ๋
์ฑ ๋ฌธ์ ๋ฅผ ์ด๋ ์ ๋ ํด์ํ๊ณ , ๋น ๋ฅธ ๊ฐ๋ฐ ์๋์ ์ ์ง๋ณด์ ํจ์จ์ฑ์ ๊ณ ๋ คํด ์ต์ข
์ ์ผ๋ก Tailwind CSS๋ฅผ ์ ํํ์ต๋๋ค.
Biome ๋์ ๋ฐฐ๊ฒฝ โ
๊ธฐ์กด์ ํฌ๋งคํฐ์ ๋ฆฐํฐ ์กฐํฉ์ธ Prettier์ ESLint๋ ๊ฐ๊ฐ ์ค์ ์ด ๋ณต์กํ๊ณ , ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ๊ณผ ์ค์ ํ์ผ ๊ฐ์ ์ถฉ๋๋ก ์ธํด ๊ฐ๋ฐ ํ๋ฆ์ ๋ฐฉํดํ๋ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ์์์ต๋๋ค. ํนํ TypeScript ํ๊ฒฝ์์๋ tsconfig์ eslint, prettier ์ค์ ๊ฐ์ ์ถฉ๋์ ์กฐ์ ํ๋๋ผ ์๊ฐ์ ์๋ชจํ๋ ์ผ์ด ๋ฐ๋ณต๋์์ต๋๋ค. CI ํ๊ฒฝ์์๋ ๊ฐ๊ฐ์ ๋ณ๋ ฌ ์คํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ก์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Biome์ ๋์
ํ์ต๋๋ค. Biome์ Rust ๊ธฐ๋ฐ์ผ๋ก ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋๋ฉฐ, ํฌ๋งคํ
๊ณผ ๋ฆฐํ
์ ํ๋์ ๋๊ตฌ๋ก ํตํฉํด ์ค์ ๋ณต์ก๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์์ต๋๋ค. .biome.json
ํ์ผ ํ๋๋ก ํ์ํ ์ค์ ์ ๊ด๋ฆฌํ ์ ์๊ณ , ๋ณ๋์ ํ๋ฌ๊ทธ์ธ ์์ด๋ TypeScript์ JSX, React๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ๊ธฐ์กด Prettier์ ์ ์ฌํ ํฌ๋งท ํธํ์ฑ์ ์ ๊ณตํ๋ฉด์๋, ์ค์ ๊ฐ ์ถฉ๋์ด ๊ฑฐ์ ์๊ณ ์ค๋ฅ ๋ฉ์์ง๋ ๋ช
ํํด ์ ์ง๋ณด์์ ํฐ ๋์์ด ๋์์ต๋๋ค. Biome ํ๋๋ง์ผ๋ก CI ์ต์ ํ๊ฐ ๊ฐ๋ฅํด์ก๊ณ , ๊ฐ๋ฐ์ ๊ฒฝํ๋ ํฌ๊ฒ ํฅ์๋์์ต๋๋ค.
Cloudflare Pages ์ ์ ์ด์ โ
๋ฐฐํฌ ํ๋ซํผ์ผ๋ก๋ Cloudflare Pages๋ฅผ ์ ํํ์ต๋๋ค. ํ๋ก์ ํธ๋ CSR ๊ธฐ๋ฐ์ SPA๋ก ๊ตฌ์ฑ๋์ด ์์๊ธฐ ๋๋ฌธ์, Next.js์ SSR ๊ธฐ๋ฅ์ด๋ Edge Function ์ต์ ํ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Vercel์ ๊ฐ์ ์ ํ์ฉํ ์ ์๋ ๊ตฌ์กฐ์์ต๋๋ค. ๋ํ Vercel์ ํ ํ๋ก์ ํธ์์ Organization Repository๋ก ๋ฐฐํฌํ ๊ฒฝ์ฐ ์ ๋ฃ ํ๋์ ์๊ตฌํด ์ ๊ทผ์ฑ์ด ๋จ์ด์ก๊ณ , Netlify ์ญ์ ์ ์ฌํ ์ ์ฝ์ด ์์์ต๋๋ค.
๋ฐ๋ฉด Cloudflare Pages๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ฉฐ, Organization Repository๋ ์ ํ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. GitHub ์ฐ๋๋ง์ผ๋ก ์๋ ๋น๋ ๋ฐ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๊ฐ PR๋ง๋ค ์๋์ผ๋ก ์์ฑ๋๋ Preview ํ๊ฒฝ์ ํ ํ์ ์ ํฐ ๋์์ ์ฃผ์์ต๋๋ค. ๋น๊ฐ๋ฐ์๋ ๋์์ด๋๋ ๊ฐํธํ๊ฒ URL์ ํตํด ๊ฒฐ๊ณผ๋ฌผ์ ํ์ธํ๊ณ ํผ๋๋ฐฑ์ ์ค ์ ์์์ผ๋ฉฐ, ์ค์ ๊ณผ์ ์ด ์ง๊ด์ ์ด๊ณ ๋จ์ํด ๋ฐฐํฌ ๊ด๋ฆฌ์ ๋ถ๋ด์ด ๊ฑฐ์ ์์์ต๋๋ค. ๊ธ๋ก๋ฒ CDN ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌ ์๋๋ ๋งค์ฐ ๋น ๋ฅด๊ณ , ๋ณ๋ ์ค์ ์์ด SSL ์ธ์ฆ์ด ์๋ ์ ์ฉ๋๋ ์ ๋ ์ฅ์ ์ด์์ต๋๋ค.
๋ฌผ๋ก Vercel์ด๋ Netlify์ ๋นํด ๋ฌธ์๋ ๋ ํผ๋ฐ์ค๋ ๋ค์ ๋ถ์กฑํ ํธ์ด์ง๋ง, ์ฐ๋ฆฌ ํ๋ก์ ํธ์ฒ๋ผ SSR์ด ํ์ ์๋ ์ ์ SPA์๋ Cloudflare Pages๊ฐ ๊ฐ์ฅ ์ ํฉํ ์ ํ์ด์์ต๋๋ค. ๊ฒฝ๋ํ๋ ๋ฐฐํฌ, ์์ ๋ก์ด ํ์ ํ๊ฒฝ, ์ฌ์ด ์ค์ ๋ฑ ๋ชจ๋ ์กฐ๊ฑด์ ๊ณ ๋ คํ์ ๋, ์ ํฌ ํ๋ก์ ํธ์ ๋ชฉ์ ๊ณผ ๊ฐ์ฅ ์ ๋ง๋ ํ๋ซํผ์ด์์ต๋๋ค.