개발자 면접 질문 생성 & 복습 SaaS 플랫폼인 Dev Interview를 만들면서
가장 먼저 시작한건 데이터 모델링이었다.
단순히 User, Post, Comment 구조로는 담아낼 수 없는,
실제 사용자 행동 중심의 흐름을 설계하려 했다.
이 글에서는 이 프로젝트의 ERD 설계 과정을 단계별로 어떻게 고민했고, 어떤 선택을 했는지 공유할 것이다.
서비스 목적에 맞춘 핵심 모델 정의
먼저 Dev Interview의 핵심 흐름은 다음과 같다.
사용자가 공부한 내용을 붙여넣는다 →
GPT가 질문과 답변을 생성한다 →
사용자는 복습할 질문만 선택해서 저장한다 →
질문을 주기적으로 복습하며 면접을 준비한다
이 흐름을 모델링하기 위해 아래 4개의 핵심 테이블을 설계했다.
ERD 주요 테이블 구조
1. users - 사용자 정보
users (
id UUID (PK),
email VARCHAR,
password VARCHAR,
created_at TIMESTAMP
)
- 기본적인 로그인 인증을 위한 유저 테이블이다.
2. writings – 사용자가 붙여넣은 글
writings (
id UUID (PK),
user_id UUID (FK),
title VARCHAR,
content TEXT,
created_at TIMESTAMP
)
- 사용자가 공부한 내용을 붙여넣는 단위이다.
- 질문 생성의 기반이 되는 원문 글이다.
- 하나의 글은 여러 질문을 만들 수 있으므로 → 1:N 관계로 qna와 연결된다.
3. qna – GPT가 생성한 질문 / 모범답변
qna (
id UUID (PK),
writing_id UUID (FK),
user_id UUID (FK),
question TEXT,
answer TEXT,
created_at TIMESTAMP,
last_reviewed_at TIMESTAMP,
scheduled_date TIMESTAMP,
is_deleted BOOLEAN
)
여기서 가장 중요한 설계 포인트는
하나의 글에서 3~5개의 질문이 생성될 수 있고, 그 중 사용자가 선택한 질문만 저장된다는 것이다.
따라서 qna는 writing_id와 연결되어야 하고
user_id를 명시하여 각 질문이 어떤 유저의 것인지 구분해야 한다.
또한 복습 기능을 위해 scheduled_date (다음 복습 예정일)과
last_reviewed_at (마지막 복습일)을 관리하도록 했다.
그리고 삭제 처리는 실제 삭제가 아닌 soft delete (is_deleted) 방식으로 처리하여 유연성을 확보했다.
4. review_log – 복습 이력 저장
review_log (
id UUID (PK),
qna_id UUID (FK),
user_id UUID (FK),
reviewed_at TIMESTAMP
)
복습이라는 행위는 단발성 상태가 아니라, 지속적으로 반복되며 기록되는 흐름이라고 생각한다.
그래서 “복습 완료”를 qna에만 기록하는 것이 아니라,
별도의 로그 테이블로 관리하기로 했다.
이렇게 하여
특정 질문의 복습 횟수: SELECT count(*) FROM review_log WHERE qna_id = ?
최근 복습일 표시: MAX(reviewed_at)
로 마이페이지를 구성할 계획이다.
설계하면서 고민했던 것들
처음에는 review_queue라는 별도 테이블을 만들고
복습 예정 질문을 따로 관리하려 했지만,
질문 자체(qna)에 scheduled_date를 두는 방식이 훨씬 간결하고 유연하다고 판단했다.
그리고 GPT 응답을 먼저 보여주고 → 사용자가 선택한 질문만 저장하는 구조이기 때문에,
임시 상태는 프론트에서만 관리하고, 최종 선택된 질문만 DB에 저장되도록 설계했다.
마무리하며
인터뷰 질문은 생성만큼이나 복습과 반복이 중요하고,
AI를 효율적으로 활용하기 위해서는 저장 이전과 이후의 흐름이 분리되어야 한다.
앞으로 이 구조 위에 REST API, GPT 프롬프트 설계, Vector DB 등
다양한 기능들을 쌓아갈 예정이다.
DevInterview가 실전 면접을 준비하는 사람들에게 톡톡히 제 역할을 수행할 수 있도록
프로젝트 코드를 발전해 나가겠다.
'프로젝트 > 기술 면접 복습 플랫폼' 카테고리의 다른 글
단위 테스트 + API 문서화(MockMvc, RestDocs) (0) | 2025.04.25 |
---|---|
Spring Boot 예외 처리 정리 (2편) (0) | 2025.04.16 |
Spring Boot 예외 처리 정리 (1편) (0) | 2025.04.14 |
Entity 설계 회고 (0) | 2025.04.12 |
Dev Interview 프로젝트 설계 (1) | 2025.04.11 |