[Library] Zod

2024. 3. 7. 11:42ใ†๐Ÿ“š Library

๊ฐœ์š”

  • TS๋ฅผ ์œ„ํ•œ data schema ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • BE์™€ FE ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•จ
  • TS ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ , Zod schema๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • ์ž…๋ ฅ๊ฐ’์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ œ๊ณต

์‚ฌ์šฉ

  • src/validator ๋””๋ ‰ํ† ๋ฆฌ์— .ts ํŒŒ์ผ์ƒ์„ฑ
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import ํ›„์—, ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋ฐ‘ ๋ฐ์ดํ„ฐ ์œ ํšจ ํ˜•์‹ ์ž‘์„ฑ
    import { z } from "zod";
    

const passwordRegex =
/^(?=.[a-zA-Z])(?=.*\d)(?=.[@$!%?&])[A-Za-z\d@$!%?&]{8,}$/;

const phoneRegex = /^010\d{8}$/;

export const registerSchema = z.object({
email: z.string().email({ message: "์˜ฌ๋ฐ”๋ฅธ ์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”." }),
phone: z
.string()
.min(11, "์—ฐ๋ฝ์ฒ˜๋Š” 11์ž๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
.max(11, "์—ฐ๋ฝ์ฒ˜๋Š” 11์ž๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
.refine(
(value) => phoneRegex.test(value),
"010์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” 11์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”",
),
username: z
.string()
.min(2, { message: "์ด๋ฆ„์€ 2๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." })
.max(100, { message: "์ด๋ฆ„์€ 100๊ธ€์ž ์ดํ•˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." }),
role: z.string().min(2, { message: "์—ญํ• ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”." }),
password: z
.string()
.min(6, "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 6์ž๋ฆฌ ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
.max(100, "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” 100์ž๋ฆฌ ์ดํ•˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
.refine(
(value) => passwordRegex.test(value),
"๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 6์ž๋ฆฌ ์ด์ƒ, ์˜๋ฌธ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
),
confirmPassword: z
.string()
.min(6, "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 6์ž๋ฆฌ ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
.max(100, "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” 100์ž๋ฆฌ ์ดํ•˜์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
.refine(
(value) => passwordRegex.test(value),
"๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 6์ž๋ฆฌ ์ด์ƒ, ์˜๋ฌธ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
),
});

```

refe: https://zod.dev/?id=type-inference

'๐Ÿ“š Library' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Library] Zustand  (0) 2024.03.19
[Library] react-hook-form  (0) 2024.03.07
[Library] [shadcn/ui]  (0) 2024.03.04
[Library]lodash์— ๋Œ€ํ•˜์—ฌ  (0) 2023.04.27