📂 server/
├── 📂 node_modules/          
│
├── 📂 prisma/
│   └── 📄 schema.prisma      # Prisma 데이터 모델 정의 ----> 오늘 해야함
│
├── 📂 src/
│   ├── 📂 controllers/               # 여기다가 본인 담당 controller 추가(HTTP 핸들러)
│   │   └── 📄 interviewController.js  # 인터뷰 관련 HTTP 핸들러(예시)
│   │
│   ├── 📂 middleware/
│   │   └── 📄 authMiddleware.js       # JWT 인증 미들웨어
│   │
│   ├── 📂 routes/                    # 여기다가 본인 담당 api router 추가
│   │   └── 📄 root.route.js           # 기본 API 라우터
│   │
│   ├── 📂 services/                  # 여기다가 본인 담당 service 추가(비즈니스 로직)
│   │   └── 📄 interviewService.js     # 인터뷰 비즈니스 로직(예시)
│   │
│   ├── 📂 utils/
│   │   └── 📄 prisma.js               # Prisma 클라이언트 초기화
│   └── 📄 index.js                    # Express 설정
│
├── 📄 .gitignore                      
├── 📄 package.json                    
└── 📄 package-lock.json              

데이터 스키마 설계

DATABASE_URL="postgresql://app_user:user123@localhost:5432/app_db"

// Prisma 데이터베이스 스키마

// PostgreSQL 데이터베이스 테이블 구조와 관계를 정의

generator client {
	provider = "prisma-client-js"
}

datasource db {
	provider = "postgresql" // 필요에 따라 mysql 등으로 변경
	url      = env("DATABASE_URL")
}

// 사용자 모델: 유저 정보 관리
model User {
	id         String   @id @default(cuid())  // 고유 사용자 ID (문자열, 생성 시 자동으로 UUID 형식인 cuid로 생성)
	name       String                         // 사용자 이름
	email      String   @unique               // 이메일 (로그인에 사용, 유니크)
	password   String                         // 해시된 비밀번호
	role       String                         // 직무 (예: 백엔드, 프론트엔드)
	career     Int                            // 경력 (연차)
	createdAt  DateTime @default(now())       // 생성일 (기본값으로 현재 시간)
	interviews Interview[]                    // 사용자가 생성한 여러 면접 기록
}

// 면접 모델: 면접 정보 관리
model Interview {
	id             String   @id @default(cuid())  // 면접 고유 ID (문자열, 자동 생성)
	userId         String   // 면접을 진행한 사용자 ID (User 모델의 외래 키)
	user           User     @relation(fields: [userId], references: [id]) // User 모델과 연결된 관계
	role           String    // 직무 (면접에서 다루는 직무)
	questions      Question[]   // 해당 면접의 여러 질문 목록
	totalScore       Int   // 총점
	summary          String   // 총평
	strengths        String   // 잘한 점
	improvements     String   // 개선점
	personalityScore Int      // 인성 점수
	personalityEval  String   // 인성 평가
	jobScore         Int      // 직무 점수
	jobEval          String   // 직무 평가
	createdAt      DateTime @default(now())    // 면접 생성일 (기본값 현재 시간)
	bookmarked     Boolean
}

// 질문 모델: 면접에서 사용될 질문 정보
	model Question {
	id             String   @id @default(cuid())  // 질문 고유 ID (문자열, 자동 생성)
	interviewId    String  // 해당 질문이 속한 면접의 ID (Interview 모델의 외래 키)
	interview      Interview @relation(fields: [interviewId], references: [id])  // 면접과의 관계 설정
	order          Int  // 면접 내에서 질문의 순서
	type           QuestionType  // 질문 유형 (인성 or 직무)
	content        String   // 질문 내용
	myAnswer       String   // 사용자의 답변
	videoUrl       String?  // 답변하는 영상의 URL (옵셔널)
	recommended    String   // 추천 답변
	bookmarked     Boolean
}

// 질문 유형(enum): 인성 또는 직무 질문 구분
enum QuestionType {
	PERSONALITY  // 인성 질문
	JOB          // 직무 질문
}
  1. 터미널에서 아래 명령 실행
bash
복사편집
npx prisma db pull     # 기존 DB 구조를 가져옴. DB 기존 내용없으면 필요없음 (선택사항)

npx prisma generate    # Prisma Client 생성
npx prisma studio      # 브라우저에서 DB GUI 보기

  1. 또는 마이그레이션을 통한 DB 생성
bash
복사편집
npx prisma migrate dev --name init

삭제
npx prisma migrate reset