수업 끝나고 15분 정도 팀 면담 있습니다. (15~15:15)
데이터 스키마 설계
이미지 최적화
sever 폴더 구조 아래와 같음
📂 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 // 직무 질문
}
bash
복사편집
npx prisma db pull # 기존 DB 구조를 가져옴. DB 기존 내용없으면 필요없음 (선택사항)
npx prisma generate # Prisma Client 생성
npx prisma studio # 브라우저에서 DB GUI 보기
bash
복사편집
npx prisma migrate dev --name init
삭제
npx prisma migrate reset