๋งํฌ
GitHub Repository
DEMO
Blog Posting
๋ด๋น ์ญํ ๋ฐ ๊ธฐ์ ์คํ
๋ณ๋์ Backend ์๋น์ค ์์ด, Next.js๋ฅผ ํตํด Frontend์ Backend๋ฅผ ํจ๊ป ์ฒ๋ฆฌํฉ๋๋ค.
์ ํ | ์ ์ฉ ๊ธฐ์ |
Node | v20.9.0 |
Package Manager | PNPM 8.14.0 |
Framework | Next.js 14.1.0 (App router) |
Styling | Tailwind CSS |
DB | MySQL(PlanetScale) |
ORM | Prisma |
Infra | Vercel SaaS |
Validation | Superstruct |
Form | react-hook-form |
Monitoring & Analyzer | Google Analytics, Sentry, next-bundle-analyzer |
Etc | Storybook, SVGR, Prettier, ESLint |
ย ์ฃผ์ ๊ฐ๋ฐ์ฌํญ
โข
๋ฉ์ธํ์ด์ง
โฆ
์น๊ตฌ๋น ์์์ฆ ์์ฑํ์ด์ง๋ก ์ฐ๊ฒฐ๋๋ CTA ๋ฒํผ๊ณผ ํ ์ค ์์ด๋๋ฅผ ์ฐพ๊ธฐ ์ํ ๋ฒํผ์ ์ ๊ณตํจ
โฆ
ํธํฐ์ CHINGOO.BE๋ฅผ ํตํ ํ๋ก์ ํธ ํ์ ๋งํฌ ๋ฒํผ, ๋ฒ๊ทธ/๋ถํธ์ฌํญ ์ ๋ณด ๋ฒํผ, GitHub ๋ ํฌ์งํ ๋ฆฌ ๋ฒํผ์ ์ ๊ณตํจ.
โข
์น๊ตฌ๋น ์์์ฆ ์์ฑ ํ์ด์ง
โฆ
React-Hook-Form๊ณผ Superstruct๋ฅผ ์ฌ์ฉํ์ฌ ์น๊ตฌ๋น ์์์ฆ์ ํ์ํ Form data๋ฅผ ๊ด๋ฆฌํจ.
โช
Input ํ๋ ์
๋ ฅ์ ๋ฐ๋ฅธ ๋ฆฌ๋ ๋๋ง์ ์ต์ ์์ญ์ผ๋ก ์ค์ด๊ธฐ ์ํด ๋๋ฉ์ธ์ ๋ฐ๋ผ Component๋ฅผ ์๊ฒ ์ชผ๊ฒ ๊ด๋ฆฌํจ.
โฆ
โ๋งํฌ ๋ณต์ฌโ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ์ผ๋ก Next.js App router route handler์ POST ์์ฒญ์ ๋ณด๋ด๊ฒ ๋จ.
โช
route handler์์ Prisma๋ฅผ ํตํด PlanetScale MySQL์ ์ง์ ์ ๊ทผํด, ์์์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ client์ UUID๋ฅผ ๋ด๋ ค์ค.
โช
client๋ ์๋ต์ ํตํด ๋ต์ UUID๋ฅผ ๊ฐ์ง๊ณ ์น๊ตฌ๋น ์์์ฆ ๋งํฌ๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํจ.
โข
์น๊ตฌ๋น ์์์ฆ ์ด๋ ํ์ด์ง
โฆ
https://chingoo.be/receipt/{UUID} ํ์์ URL๋ก ์ ๊ทผํ ๊ฒฝ์ฐ, Prisma๋ฅผ ํตํด PlanetScale MySQL์ UUID๋ก select ์ฟผ๋ฆฌ๋ฅผ ์คํํจ.
โช
row๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ, ํด๋น row์ ๊ฐ์ ์ด์ฉํ์ฌ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ์ด๋ฅผ client์ ์ ๋ฌํจ.
โฆ
์น๊ตฌ๋น ๋ณด๋ด๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ์์์ฆ ๋ด ํฉ๊ณ ๊ธ์ก์ ๋ง์ถฐ ์์์ฆ ์ฃผ์ธ์ ํ ์ค ์ต๋ช
์ก๊ธ ๋งํฌ๋ก ์ฐ๊ฒฐํจ.