RSC(React Server Component)์™€ RHF(React Hook Form), Zod ์†Œ๊ฐœ

Goyoung2ยท2023๋…„ 8์›” 7์ผ
2
post-thumbnail

๐Ÿ‘‹ ์ธ์‚ฌ

์•ˆ๋…•ํ•˜์„ธ์š”~ ๊ณ ์˜์ด์—์š”.
๋˜ ์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŠธ๋ฅผ ์“ฐ๋„ค์š”. ์ž์ฃผ ์จ์•ผํ•˜๋Š”๋ฐ ๋ธ”๋กœ๊ทธ์— ํ†ต ๊ด€์‹ฌ์„ ๋ชป๊ฐ€์กŒ๋„ค์š”.
๋ฐ”์˜๊ธฐ๋„ํ•˜๊ณ  ๊ทธ๋Ÿด์‹ธํ•˜๊ฒŒ ์“ธ๊ฒƒ๋“ค์„ ์ฐพ๋Š๋ผ ์‹œ๊ฐ„์ด ํ›Œ์ฉ ์ง€๋‚ฌ์–ด์š”. ์˜ค๋Š˜์€ ์งง๊ฒŒ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณผ๊ฒŒ์š”~

์˜ค๋Š˜ ์†Œ๊ฐœํ•  ๊ฒƒ?

RSC์™€ RHF, Zod๋ฅผ ์†Œ๊ฐœํ• ๊นŒํ•ด์š”.

RSC(React Server Component)

ํ˜„์žฌ RSC๋Š” Next.jsํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‹œ๋ฒ”์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์š”. ์•„์ง ์•ˆ์ •์„ฑ์€ ์กฐ๊ธˆ ๋–จ์–ด์ง€๋Š” ํŽธ์ด์—์š”.
RSC์˜ ์žฅ์ ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์ง€์•Š๊ณ , ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์™€์„œ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•ด์ฃผ๋Š” ๋“ฑ์˜ ์žฅ์ ์ด ์žˆ์–ด์š”.
RSC์˜ ๋‹จ์ ์œผ๋กœ๋Š” ๊ธฐ์กด์˜ ๋ฆฌ์•กํŠธ์™€ ์ƒ๋‹นํžˆ ๋‹ค๋ฅธ ํŒจํ„ด์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•ด์š”.

๊ธฐ์กด์˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ๋ฅผ ๋ฌถ์–ด์„œ ์ด๋ฅผ ์ถ”์ƒํ™”ํ•˜๋Š”๋ฐ ๋ชฉ์ ์„ ๋‘์—ˆ์ง€๋งŒ, RSC๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•˜๋Š”๊ฐ€์™€ ์‚ฌ์šฉ์ž ๋™์ž‘์„ ํ†ตํ•ด ํŽ˜์ด์ง€์— ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š”๊ฐ€๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ ์š”.

์„œ๋ฒ„์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ์กด์˜ ์ปดํฌ๋„ŒํŠธ์™€ ๋‹ค๋ฅด๊ฒŒ ๋‹ค์–‘ํ•œ ์ œ์•ฝ ์‚ฌํ•ญ๋“ค์ด ์žˆ์–ด์š”. ํด๋ผ์ด์–ธํŠธ์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์™€ ๋งค์šฐ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, props์— ์ง๋ ฌํ™”๋œ ์š”์†Œ(ํ•จ์ˆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€)๋งŒ ๋„˜๊ฒจ์ค„ ์ˆ˜์žˆ์–ด์š”.

์ด๋ ‡๋“ฏ ๊ธฐ์กด์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹๊ณผ ์ƒ๋‹นํžˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๊ฝค ๋†’์€ ํŽธ์ด์—์š”. ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์žฅ์ ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์›Œ๋‘๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•ด์š”.

RHF(React Hook Form)

RHF๋Š” RSC์ฒ˜๋Ÿผ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•„๋‹ˆ๊ณ , ๋‹จ์ˆœํ•œ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์š”. ๋ฆฌ์•กํŠธ์™€ ๊ฒฐํ•ฉํ–ˆ์„๋•Œ ๋‹ค์–‘ํ•œ ์žฅ์ ๋“ค์ด ์žˆ์–ด์š”.
๋ณดํ†ต input์„ ๋งŒ๋“ค๋•Œ useState๋กœ state๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  onChange์™€ setState๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์„ ๋งŽ์ดํ•ด์š”. input์ด ์—ฌ๋Ÿฌ๊ฐœ๋ฉด useState๋„ ๊ทธ๋งŒํผ ๋งŽ์•„์ง€๊ณ  ์ฝ”๋“œ๋Š” ์ง€์ €๋ถ„ํ•ด์ง€๋Š”๊ฒŒ ๋‹น์—ฐํ•œ ์ผ์ด๊ฒ ์ฃ . ์ •๋ง ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ์ด ์•„๋‹ ์ˆ˜ ์—†์–ด์š”.
input๊ณผ state๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š”๊ฒŒ ๋ฐ”๋กœ RHF์—์š”. useForm()์„ ์ด์šฉํ•ด์„œ form๊ด€๋ฆฌ ํ•จ์ˆ˜์™€ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ input๊ณผ form์— ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋”ฐ๋กœ useState์—†์ด input๊ณผ form์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

Zod

Zod๋Š” ์ƒํƒœ ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์š”. ์ƒํƒœ์˜ ๊ฐ’์ด ๋น„์–ด์žˆ๋Š”์ง€, ๋ฌธ์ž์—ด, ์ด๋ฉ”์ผ, url, ์ตœ์†Œ๊ธธ์ด, ์ตœ๋Œ€๊ธธ์ด, ์ˆซ์ž, ๋Œ€์†Œ๋น„๊ต, ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒ€์ฆ์„ ์•„์ฃผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋„์™€์ค˜์š”.
๊ทธ๋ž˜์„œ ์œ„์— ์†Œ๊ฐœํ•œ useForm์˜ resolver์— ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด form ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ๋„์™€์ค€๋‹ต๋‹ˆ๋‹ค.

๐Ÿ™‡โ€โ™‚๏ธ ๋งˆ๋ฌด๋ฆฌ

์˜ค๋Š˜์€ ์งง๊ฒŒ ์š”์ฆ˜ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์†Œ๊ฐœ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ดค์–ด์š”. ๊ฐœ๋ฐœ์— ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ข‹๊ฒ ๋„ค์š”.
์ด์ œ ์ž๋Ÿฌ๊ฐˆ๊ฒŒ์š” ๋ฐ”์ด๋ฐ”์ด~

profile
ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋กœ ์ผํ•˜๊ณ  ์žˆ์–ด์š”. ์ œํ’ˆ, ๋™๋ฃŒ, ์„ฑ์žฅ์„ ์ค‘์š”์‹œํ•ด์š”. ๊ฒธ์†, ์กด์ค‘, ์‹ ๋ขฐ๋ฅผ ๊ฐ–์ถ˜ ๋™๋ฃŒ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์š”. ๐Ÿ˜„

0๊ฐœ์˜ ๋Œ“๊ธ€