+ );
+}
diff --git a/src/containers/signin&signup/SignUpForm.tsx b/src/containers/signin&signup/SignUpForm.tsx
new file mode 100644
index 00000000..53b788a0
--- /dev/null
+++ b/src/containers/signin&signup/SignUpForm.tsx
@@ -0,0 +1,104 @@
+import { yupResolver } from '@hookform/resolvers/yup';
+import { useState, useEffect } from 'react';
+import { useForm } from 'react-hook-form';
+import * as yup from 'yup';
+
+import Button from '@/components/Button';
+import PwdInputWithLabel from '@/containers/signin&signup/PwdInputWithLabel';
+import TextInputWithLabel from '@/containers/signin&signup/TextInputWithLabel';
+
+export type TSignUpInputs = {
+ email: string;
+ nickname: string;
+ password: string;
+ passwordConfirmation: string;
+};
+
+const schema = yup.object().shape({
+ email: yup.string().email('유효한 이메일 주소를 입력해주세요.').required('이메일을 입력해주세요.'),
+ nickname: yup.string().required('닉네임을 입력해주세요.'),
+ password: yup.string().required('비밀번호를 입력해주세요.').min(8, '비밀번호는 최소 8자 이상이어야 합니다.'),
+ passwordConfirmation: yup
+ .string()
+ .required('비밀번호 확인을 입력해주세요.')
+ .oneOf([yup.ref('password'), ''], '비밀번호가 일치하지 않습니다.'),
+});
+
+export default function SignUpForm() {
+ const [checkTerms, setCheckTerms] = useState(false);
+
+ const {
+ register,
+ handleSubmit,
+ watch,
+ trigger,
+ formState: { errors, isValid },
+ } = useForm