Next-Auth-로그인 구현 (1)
작성일 : 2024.12.24
1. Next.js 프로젝트 생성
npx create-next-app@latest next-auth-login
2. 프로젝트 디렉토리로 이동
cd my-nextjs-app
3. 추가 패키지 설치 (선택사항)
// shadcn 설치
npx --legacy-peer-deps shadcn@latest init
npx --legacy-peer-deps shadcn@latest add button, dialog, card
npm install react-icons
// next-auth 설치 (필수)
npm install next-auth
4. API 라우트 설정
반드시 /app/api/auth/[...nextauth]/route.ts 파일 생성 후 코드 입력
import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
const handler = NextAuth({
providers: [
// ID, PW 로그인 방식
CredentialsProvider({
name: "Credentials",
credentials: {
userName: { label: "UserName", type: "text", placeholder: "UserName" },
password: { label: "Password", type: "password" },
},
async authorize(credentials, req) {
const user = { id: "1", name: "JK", email: "qkrwhd1122@gmail.com" };
if (user) {
return user;
} else {
return null;
}
},
}),
],
});
export { handler as GET, handler as POST };
Next-auth에서 기본적인 로그인폼 지원 http://localhost:3000/api/auth/signin 에 이동 시 이런 화면이 나옴
이 화면에서 클릭 시 http://localhost:3000/ 으로 이동됨
Prisma 설정
로그인할 때 authorize() 함수를 통해 사용자 유효성 검증하기 위해 Prisma를 통해 DB를 제어할 예정
Prisma 설치
//prisma 설치
$npm install prisma -D
//prisma 초기화(sqlite 사용)
$npx prisma init --datasource-provider sqlite
위의 두 명령어를 입력했다면 prisma 폴더가 생성되었을 것이다.
이 안에는 schema.prisma 파일이 들어있는데 model 이라고 부른다.
( sqlite, postgreSql, MySql 등에서는 테이블로 전환된다.)
// /prisma/schema.prisma
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
generator client - Prisma는 백앤드 영역이기 때문에 Client 쪽에서 DB에 접근하려면 prisma-client가 필요하다.
datasource db : -어떤 DB를 사용할지, 해당 파일의 url을 적어둔다. .env 파일을 보면 DATABASE_URL="file:./dev.db" 라고 추가되어 있는데 dev.db 파일로 sqlite 파일을 저장한다는 뜻이다.
Prisma 공식 홈페이지
에 들어가면 기본적인 User 와 Post 모델 예제가 나와있다.
테이블은 model 로 정의하고 보통 대문자로 선언한다.
Prisma Migrate
스키마 작성을 완료하면 sqlite 파일을 만들어 주어야 한다.
$npx prisma migrate dev --name init

명령어를 실행하면 dev.db & dev.db-joumal 파일이 생성된다.

Prisma는 Studio라는 툴을 통해 웹상에서 테이블을 조작할 수 있다.
npx prisma studio
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Prisma Studio is up on http://localhost:5555
명령어를 실행하면 테이블을 쉽게 조작할 수 있는 페이지가 나온다.

Prisma Client 설치
Prisma 설치는 완료했지만 Next.js 에서 사용하려면 Prisma Client를 설치해 주어야한다.
$npm install @prisma/client
설치가 완료되면 이를 사용하기 위한 모듈을 만들어준다.
// /app/lib/prisma.ts
import { PrismaClient } from "@prisma/client";
const globalForPrisma = global as unknown as { prisma: PrismaClient };
export const prisma = globalForPrisma.prisma || new PrismaClient();
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
export default prisma;
이로써 Prisma 세팅은 완료되었다.