로그인・회원가입

이메일과 비밀번호 검증, 전송 중 표시, 로그인 후 화면까지 만듭니다.

이 코드는 파일 2개로 되어 있습니다. 모두 같은 폴더에 넣으면 동작합니다.

LoginTabs.tsx

로그인・회원가입 화면

auth.tsx

로그인한 사용자 정보를 전달한다 (실제로는 NextAuth 등으로 바꾼다)

사용 방법 (Next.js)

내 프로젝트에서 이 화면을 띄우기까지의 3단계입니다

  1. 1

    터미널에서 사용할 컴포넌트와 라이브러리를 설치 (한 번만)

    npx shadcn@latest add button input label tabs
    npm i react-hook-form zod
    npm i @hookform/resolvers

    아직 shadcn/ui를 설치하지 않은 프로젝트라면 먼저 npx shadcn@latest init 을 한 번 실행합니다

  2. 2

    파일을 이 위치에 붙여넣기

    my-app/
    ├─ components/
    │   └─ login/
    │       ├─ LoginTabs.tsx   ← 위의 창에서 복사한 것
    │       └─ auth.tsx   ← 위의 창에서 복사한 것
    └─ app/
        └─ login/
            └─ page.tsx   ← 3단계에서 만든다

    폴더가 없으면 만듭니다. 파일은 모두 같은 폴더에 넣습니다.

  3. 3

    페이지 파일에서 불러오기

    import LoginTabs from "@/components/login/LoginTabs"
    
    export default function Page() {
      return <LoginTabs />
    }

    app/login/page.tsx 에 씁니다. npm run dev 로 실행하고 /login 로 가면 보입니다

핵심 포인트

  1. 1

    검증 규칙은 한곳에 모으기

    Zod로 "이메일 형식", "8자 이상"을 한곳에 쓰고 오류 메시지도 거기서 정합니다. 회원가입은 로그인 규칙에 "이름"만 하나 더한 것입니다.

  2. 2

    전송 중에는 버튼을 누를 수 없게 하기

    중복 전송을 막습니다. 버튼 문구도 "로그인 중…"으로 바꿔서 잠시 기다려야 한다는 것을 알립니다.

  3. 3

    로그인한 사용자 정보를 앱 전체에 나눠 주기

    Context에 넣어 두면 헤더의 이름과 본문의 "환영합니다" 모두에서 쓸 수 있습니다.

사용한 도구

누르면 제2부의 비교 페이지로