์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ typescript์ next.js๋ฅผ ์ ๋ชฉ์์ผ์ ์ฝ๋๋ฅผ ์ง๊ณ ์๋๋ฐ, ๊ฐ๋์ฉ ๋๋ํ๊ฐ ๋์๋ค. ๋ด๊ฐ ์๋ ๋๋ํ๋ ๋ถ๋ฑํธ์ ํจ๊ป ์์ ์ฌ์ฉํ๋ not์ ์๋ฏธ๋ฐ์ ๋ชฐ๋๋๋ฐ, ๋๋ฌธ๋๋ฌธ ๋ค์ ๋๋ํ๊ฐ ์ฐํ๋ ๊ฒ์ด๋ค. ์ ๊ฒ ๋ญ๊น ์ ๊ฒ ๋ญ
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ createObjectURL URL.createObjectURL์ ๋ธ๋ผ์ฐ์ ์์ ๋ก์ปฌ ํ์ผ์ ๋ก๋ํ์ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค. ๋ธ๋ผ์ฐ์ ์์ ๋ก์ปฌ ํ์ผ์ ๊ฐ๋จํ ๋ก๋ ๊ฐ๋ฅ ์ด๋ฏธ์ง ํ์ผ์ ์ ๋ก๋ํ๊ธฐ ์ ์ ์ฌ์ฉ์์๊ฒ
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ .superRefine ctx.addIssue๋ฅผ ํตํด ์ํ๋ ๋งํผ ์ด์๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ํจ์ ์คํ ์ค์ ctx.addIssue๊ฐ ํธ์ถ๋์ง ์์ผ๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํต๊ณผ fatal: true ์ค์ ์, ๊ทธ ๋ค์ refine์ด ์คํ
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ Image ์ปดํฌ๋ํธ ๊ธฐ๋ณธ jsx img๊ฐ ์ง์ํ์ง ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ ฅํ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ๋ก๋ฉ ์ ํ๋ก ์ปดํฌ๋ํธ ์์น๊ฐ ๋ฐ๋ฆฌ๋ content shift๋ฅผ ๋ฐฉ์งํ๋ค. ์์ถ๋ฅ ์ด๋, ํ๋ฉด ํฌ๊ธฐ๋ณ ์์ถ ์ต์ ์ ์ ๊ณตํ๋ค. ํ์ prop์ผ๋ก
๋ง ๊ทธ๋๋ก ์ค๊ฐ์์ ๋์ํ๋ ์ผ์ข ์ ์ํธํ์จ์ด๋ฅผ ๋ปํ๋ค. ์ด๋ค ๊ฒ๊ณผ ๋ค๋ฅธ๊ฒ ์ฌ์ด์์ ์คํ๋๋ ์ฝ๋.๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด request๊ฐ ์๋ฃ๋๊ธฐ ์ ์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.์ด๋ฏธ์ง, CSS, JS, Favicon ์์ฒญ ๋ฑ ์น ์ฌ์ดํธ์ ๋ชจ๋ ๋จ์ผ request ํ๋ํ๋ ๋ง
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ bcrypt ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ํ ๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด์ํจ์๋ ๋จ๋ฐฉํฅ ๋ฉฑ๋ฑ์ฑ ํจ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ์ง ์๋๋ค.(ํดํน์ ์ํ์ฑ) ์ ํด์ง ์ ๋ ฅ์ ๋ฐ๋ผ ์ ํด์ง ๋์๋ฅผ ์ถ๋ ฅํจ bcryptํ๋ ์ด์ ๋ณด์์ ๋ฐ์ดํฐ๊ฐ
๋ฌธ์์ด ์ ํจ์ฑ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌcoerce๋ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ ๋ก ๋ณํ๋ด์ฅ ์์ฑ์(String(input), Number(input), new Date(input) ๋ฑ))๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ ๋ ฅ์ ๊ฐ์ ํจinput์ ๊ฐ์ ํญ์ string์ผ๋ก ์ค๊ธฐ ๋๋ฌธ์ ์ ํ๋ฒํธ ๊ฐ์๊ฑด ๊ผญ n
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ด์์ ํต์ญ์ฌ ์ญํ ์ ํด์ฃผ๋ ๋๊ตฌ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ถฐ ํ์ํ ํ์ผ์ด๋ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ ์ฉํจSQL์ ๋ชฐ๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ๋์์ค์ ๊ฐ๋ฐ ์ด๋ณด์์๊ฒ๋ ์ ์ฉํจ๋ฐ์ดํฐ๋ฒ ์ด์ค
Zod์๋ ๋ช ๊ฐ์ง ๋ฌธ์์ด ๊ด๋ จ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํฌํจ๋์ด ์๋ค.(https://zod.dev/?id=strings)๋ฌธ์์ด ์คํค๋ง๋ฅผ ๋ง๋ค ๋ ๋ช ๊ฐ์ง ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ง์ ํ ์ ์๋ค.const name = z.string({required_error: "Name์
npm i zodserver action์ผ๋ก ๋ณด๋ด๋ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ๋์์ ์ค๋ค. ๋ํ ๋ฐ์ดํฐ ๋ณํ(์: ๊ธฐ๋ณธ๊ฐ ์ถ๊ฐ, ํ์ ๋ณํ)์ ํ ์ ์๋ค.์๋ฅผ ๋ค์ด Username์ 3์~10์๋ก ์ค์ ํ๊ณ ์ถ๋ค๋ฉด Zod์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋ฉด Zod๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ i
Next.js๋ POST ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด์ฃผ๋ Server Actions๋ฅผ ์ ๊ณตํ๋ค.Next.js 13 ์ด์ ๋ฒ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ ํ๋ค.์ด์ ์๋ POST ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด route handler๋ฅผ ๋ง๋ค์ด์ผ ํ์ง๋ง, ์ด์ "use server" ํค์๋
๊ธฐ์กด next.js ๋ฒ์ ์์๋ API route๋ฅผ ๋ง๋ค์ด์ post, delete, get ๋ฑ์ ๋ชจ๋ ์์ฒญ์ ๋ณด๋๋ค.ํ์ง๋ง ์ต์ ๋ฒ์ (14)์๋ ์ด ๋ฐฉ๋ฒ ๋ฟ๋ง ์๋๋ผ ๋ ํธํ ๋ฐฉ๋ฒ์ด ๋์ ๋์๋ค.์ด๋จ๋๋ GET ์์ฒญ์ ๋ฐ์ ๊ฒ์ด๊ณ , ์ด๋จ ๋๋ POST ์์ฒญ์ ๋ฐ์ ๊ฒ์ด๋ค.
Tailwind CSS ์ ์์๊ฐ ์์ผ๋ก ๋ง๋ ์๋ฆ๋ค์ด SVG ์์ด์ฝ (๋ฌด๋ฃ ์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์์ SVG ์์ด์ฝ์ผ๋ก. Tailwind์ ์ ํธ๋ฆฌํฐ ํด๋์ค์ ์ฝ๊ฒ ๊ฒฐํฉํ์ฌ ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅhttps://heroicons.com์ค์น: npm install @hero
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ TailWind๋ ๊ธฐ์กด์ css ํ๋ ์์ํฌ์ฒ๋ผ ๊ณ ์ ๋ cssํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ์ ํธ๋ฆฌํฐ ํด๋์ค ๊ธฐ๋ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ , ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ๊ณ ์๋ค. (์์ฒญ์ ๋ฐ๋ผ ์์ฑ๋๋ ๊ฒ์) ํน์ง ๋ฏธ๋ฆฌ ์ ์๋ ์ ํธ๋ฆฌํฐ ํด๋
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ odd: ์์ ์์ ์ค ํ์๋ฒ์งธ์๋ง ์คํ์ผ ์ค๋ ์ฌ์ฉ odd:bg-gray-100 CSS์์ :nth-child(odd) ์ ํด๋น even: ์์ ์์ ์ค ์ง์๋ฒ์งธ์๋ง ์คํ์ผ ์ค๋ ์ฌ์ฉ even:bg-cyan-100 CSS์์
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ gradient: Search .bg-gradient-to-tr { background-image: linear-gradient(to top right, var(--tw-gradient-stops)); } .from-cy
Tailwind CSS๋ ๋ชจ๋ฐ์ผ ์ฐ์ ์ด๋ค.์์ฑํ๋ css๋ ๋ชจ๋ ์ํ ๊ธฐ๊ธฐ์ ์ ์ฉ๋๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ ํฐ ํ๋ฉด์ ์ ์ฉ์ํค๋ modifier๋ค์ด ์กด์ฌํ๋ค. Tailwind Css๋ ๋ชจ๋ฐ์ผ ๋์์ธ์ ๋จผ์ ๊ตฌํํ๊ณ ๊ทธ ๋ค์ ํฐ ํ๋ฉด์ผ๋ก ํค์๊ฐ๋ ๊ฒ์ ๋ช ์ฌํ์.๋ค
Tailwind๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์์ vscode์ ๊ผญ ์ค์นํด์ผ ํ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ด๋ค.์๋์์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ ์์ ๊ฐ์ด๋ ๊ธฐ์กด css ์ฝ๋๋ฅผ ์๋ ค์ค์ ๋ณด๊ธฐ๊ฐ ํธํ๋ค.class ์ค๋ณต์ด ์๊ฑฐ๋ ์คํ๊ฐ ์์๋๋ ์๋ ค์ฃผ๊ธฐ์ ๊ต์ฅํ ์ ์ฉํ๋ค.tailwind.config
์ด๋ ๊ฒ ํ๋ฉด next.js ์ต์ ๋ฒ์ ์ด ์ค์น ๋๋ค.๋ค๋ฅธ ๋ฒ์ ์ค์น๋ฅผ ์ํ๋ค๋ฉด latest๋์ ๋ฒ์ ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.ex) nextjs14๋ฒ์ ์ค์น๋ฅผ ์ํ๋ค๋ฉด npx create-next-app@14 ์ ๋ ฅ!์ค์น๋ฅผ ํ๊ฒ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ด ๋์จ๋ค!๊ทธ๋ฅ ์ํฐ์น๋ฉด ๋จ!!
package.json์ ์ฝ๋ ์ถ๊ฐ -> ์ด ๋ช ๋ น์ด๋ค์ ์ง์ ํธ์ถํ์ง ์๊ณ vercel์ด ํธ์ถํ๋ ์ฉ์ผ๋ก ๋ฃ์ด์คvercel ํํ์ด์ง ๋ค์ด๊ฐ 1\. Add New > Project2\. ๋ด ๊นํ๋ธ ๋๋ ํ ๋ฆฌ๋ ์ฐ๊ฒฐํด์ ๋ง๋ ํ๋ก์ ํธ import3\. Project Name