Next.js + Prisma로 이메일 인증 기능 구현하는 법

세이박사
1,966
1 0

Next.js를 기반으로 회원가입 기능을 만들고 있다면, 단순한 계정 생성만으로는 부족합니다.
서비스의 신뢰도와 보안을 확보하려면 이메일 인증을 통한 계정 활성화 절차가 필요합니다.


이메일 인증은 아래와 같은 흐름으로 구성됩니다:

  1. 1. 사용자가 회원가입을 요청합니다.

  2. 2. 서버는 유저 정보를 저장하되 isVerified: false 상태로 생성하고,

  3. 3. 인증 토큰을 발급해 이메일로 전송합니다.

  4. 4. 사용자가 메일의 링크를 클릭하면 토큰이 검증되고, 계정이 활성화됩니다.


이제 이 기능을 GPT에게 다음처럼 요청하면, 설계와 구현을 한 번에 받을 수 있습니다.

프롬프트

복사
넌 인증/보안 기능에 숙련된 시니어 풀스택 개발자야. 나는 지금 Next.js 기반 회원가입 시스템에 "이메일 인증 기반 계정 활성화" 기능을 추가하려고 해. 아래 환경, 목표, 보안 기준에 맞게 전체 구조와 코드를 작성해줘.

[기술 스택 및 환경]
- 프레임워크: Next.js 13 이상 (App Router 구조)
- 언어: TypeScript
- ORM: Prisma
- 데이터베이스: PostgreSQL
- 메일 전송: nodemailer 또는 추천 SMTP 라이브러리
- 비밀번호 암호화: bcrypt

[기능 흐름 요약]
1. 사용자가 이메일/비밀번호로 회원가입 요청
2. 서버는 사용자 계정을 "inactive" 상태로 생성하고, 인증 토큰을 생성하여 저장
3. 해당 이메일로 인증 링크를 전송 (`https://example.com/verify?token=xxx`)
4. 사용자가 인증 링크 클릭 시 토큰 검증 → 성공 시 계정 활성화 (`active: true` 업데이트)
5. 인증 링크는 24시간 유효, 1회용이며 재사용 불가
6. 인증되지 않은 계정은 로그인 불가

[보안 및 예외 처리 기준]
- 인증 토큰은 단방향 해시로 저장 (DB에 평문 저장 금지)
- 만료된 토큰 또는 잘못된 토큰에 대한 명확한 예외 처리
- 인증 메일은 실제 서비스에 사용 가능한 형태로 템플릿 구성
- 인증 상태가 `false`인 계정은 로그인 시도 시 "이메일 인증 필요" 메시지 출력
- 인증 링크 클릭 시 UX 피드백 페이지 제공 (`성공/실패/만료 안내`)

[세부 구현 요청]
- Prisma에 `User` 모델 + `EmailVerificationToken` 모델 구성
- API 경로: `/api/auth/register`, `/api/auth/verify-email`
- 유틸 함수: 토큰 생성/검증, 이메일 발송 함수 분리
- 이메일 템플릿 구성 예시 포함
- 클라이언트 회원가입 form 예시 포함
- 모든 코드에 상세한 주석 포함
- 서버에서 쿠키 사용은 필요 없음

이 모든 조건을 반영해 다음을 포함한 전체 코드를 작성해줘:
1) Prisma 모델  
2) API route 파일  
3) 토큰/메일 관련 유틸 함수  
4) 회원가입 폼 컴포넌트  
5) 인증 결과 페이지 컴포넌트  
6) UX 흐름 설명
이 정도로 구체적인 프롬프트를 구성하면,
GPT가 단순 코드가 아니라 전체 인증 흐름을 설계 수준으로 제안해줍니다.
이메일 인증은 보안과 사용자 신뢰를 동시에 잡을 수 있는 기본 기능이므로,
서비스에 도입할 계획이라면 꼭 이 구조를 기반으로 구현해보세요.

댓글 작성

유튜브 알고리즘이 사랑하는 영상의 DNA를 해독하다

"열심히 만든 영상인데 조회수가 100회도 안 돼요." 수많은 유튜버들이 공감할 이 한탄, 단순히 운이 없어서일까요? 아니면 ...

고객의 마음을 읽는 AI 고객관리 혁신 프롬프트

"고객이 떠나는 이유를 미리 알 수 있다면 얼마나 좋을까?" 이런 생각 해보신 적 있으시죠? 저도 영업팀에서 일할 때 그랬어...

프롬프트

ChatGPT

“회의는 지루한데 워크숍은 왜 이렇게 재밌을까?”

ChatGPT

“예술가의 꿈, 스타트업으로 현실이 되다!”

ChatGPT

“법무팀도 놓친 자산 위험, AI가 찾아냈다”

ChatGPT

“혼자서는 절대 알 수 없었던 것들”

ChatGPT

500번째 수동 배포에서 실수한 그날, 모든 걸 자동화하기로 결심했다

ChatGPT

“몇 시에 와서 몇 시에 가세요” vs “결과만 보여주세요”의 놀라운 차이

ChatGPT

1만 구독자에서 100만 구독자가 되기까지, 알고리즘이 아닌 진정성의 힘

ChatGPT

“예술로는 돈을 못 번다”는 편견을 깨뜨린 작은 갤러리의 기적

ChatGPT

아버지의 건물 증여, 세금폭탄이 될 뻔한 위기와 해결책

ChatGPT

혼자 공부하다 포기한 영어, 함께 하니 1년 만에 토익 900점

ChatGPT

새벽 3시에 울린 알림, 그리고 5분 만에 해결한 기적

ChatGPT

“당신은 뭘 잘하세요?”라는 질문에 답하지 못한 3년차 직원

ChatGPT

평범한 일상 속에서 다음 시대를 읽어내는 법

ChatGPT

“예산 삭감”이라는 한 마디로 무너진 지역 예술가들의 꿈

ChatGPT

2008년 금융위기 때 모든 걸 잃고 깨달은 진실

ChatGPT

“제가 도울 수 있는 게 있을까요?”라는 질문에서 시작된 작은 기적