면접 준비 플랫폼 만들어보기. - DB 설계

Jang990·2024년 2월 29일
0

지터뷰 프로젝트

목록 보기
1/3
post-thumbnail

Gpterview는 나와 같은 구직자들이 면접을 준비할 수 있는 플랫폼을 만들어 보는 프로젝트이다.
해당 서비스를 통해서 해당 분야에 어떤 면접 질문들이 있는지 확인하고
나의 지원 정보를 입력해서 ChatGPT와 모의면접을 진행할 수 있는 기능을 만드는 것을 생각했다.

이 글에서는 모의면접과 관련된 테이블을 설계하면서 생각한 내용을 적는다.

기본 아이디어

기본적으로 2가지 핵심 기능을 생각했다.

  1. ChatGPT가 면접관이 되어 면접을 진행하는 AI 면접 기능
  2. 사용자가 면접에 나올만한 질문들을 정리하고 공유하는 질문 저장 및 공유 기능

개발 초기에는 AI 면접 기능이 이 프로젝트의 핵심 기능이고,
질문 저장 및 공유 기능은 부가적인 기능이라고 생각했다.

그래서 AI 면접 기능을 만드는데 집중했고, 질문 저장 기능은 뒤로 미뤘다.

DB 설계

AI 면접 기능의 내용은 다음과 같은 DB에 저장된다.

이 구조를 단순하게 만들면 다음과 같다.
(질문 저장 및 공유 기능과 관련된 DB는 현재 사진에 존재하지 않는다.)

면접 만료시간이 왜있지?

OpenAI API를 사용하는 것은 모두 비용이 나가는 기능이기 때문에 부담스럽다.
그래서 면접 테이블에 면접 만료시간을 두어서 사용자별로 하루 또는 일주일에 한 번씩만 제한된 시간에 면접 기능을 사용하도록 만들고 싶었다.

사용자가 생성한 면접이 Active한지를 판단하는 것은 만료시간과 현재 서버시간을 비교해주면 된다.

ChatGpt는 면접을 진행해.

AI 면접 기능은 ChatGPT에 면접 세팅을 해놓은 버전이라고 생각하면 쉽다.
다음과 같이 채팅처럼 진행된다.

ChatGPT가 지원정보에 관한 질문을 하고, 사용자는 그에 대한 답변을 한다.
그리고 이 대화정보는 면접 대화 내역 테이블에 모두 저장된다.

정말 채팅기능과 유사하게 만들었다.


현재 DB 구조의 문제점

나는 현재 DB 구조가 2가지 문제점을 가지고 있다고 생각했다.

  1. 면접, 질문, 대답의 서로 다른 생명주기
  2. 질문 데이터 재사용성

서로 다른 생명주기

만약 사용자가 이전에 진행한 면접을 제거한다면, 면접에 있는 대화 기록이 모두 제거될 것이다.
하지만 면접을 진행하면서 ChatGpt가 사용자에게 한 질문들 중에 마음에 드는 질문까지 제거할 필요는 없다.
또한 면접 질문에 대한 대답은 질문에 의존적하지만, 면접 질문은 대답에 의존하지 않는다.

그래서 면접, 질문, 대답은 서로 다른 생명주기를 갖고 있다고 생각했다.

하지만 지금 질문과 대답은 면접 대화 내역 테이블에 들어가있고 해당 테이블은 면접에 의존하고 있다.
면접 테이블의 데이터가 제거되면 관련된 데이터 전체가 함께 제거될 것이다.

질문 데이터 재사용성

사용자가 직접 면접에 나올만한 질문들을 정리해서 공유할 뿐만아니라
모의면접 과정에서 ChatGpt가 사용자에게 한 질문을 다른 사용자들과 공유하고 싶을 수 있다.

둘은 같은 데이터이지만 각자 다른 테이블에서 관리된다.
(질문 저장 및 공유 기능 테이블은 DB 사진에 없다)



DB 수정

그래서 생각을 살짝 전환했다.
ChatGpt는 이제 면접을 진행하지 않는다.

ChatGpt는 질문을 생성해.

ChatGPT는 면접을 진행하는게 아니라 질문을 생성하는 기능이라고 생각을 바꿨다.
ChatGPT에게 요청한 질문은 면접 대화 내역 테이블로 들어가는게 아니라
질문을 생성하고 질문 테이블로 들어갈 것이다.

DB 설계

복잡한 부분까지 다보지말고 다시 간단하게 만들어보자.

많이 바뀐것 같지만 사실상 많이 바뀐 것은 없다.
면접 대화 내역이 질문과 응답으로 분리됐다는 것에만 주목하면 된다.

해결된 부분

이제 질문과 대화는 따로 관리되고 중간테이블인 면접 대화쌍이 생겼다.
면접이 제거된다고 모든 질문들과 응답이 제거되지 않는다.

그리고 면접 질문 테이블의 질문 내용을 unique로 설정하여 사용한다면 중복된 질문이 저장되는 것을 막고 기존 질문을 재사용할 수 있다.

지금의 문제점

이렇게 만든다면 모의면접 과정에서 생성된 많은 데이터가 면접 질문 테이블로 들어갈 것이다.
이 중에서 데이터를 적절하게 사용자에게 보여줘야 한다는 것이 문제로 남는다.

희망 기능) 질문 추천 기능

아무리 제한을 둔다고 해도 일반적인 사용자들이 내 서비스를 통해 OpenAI API 요청은 공짜가 아니기 때문에 지속적으로 사용하게 된다면 꽤 부담스러운 비용이 나올 것이다.
그래서 면접 진행 과정에서 OpenAI API 요청 횟수를 줄이는 방식을 고민했다.

사진은 ChatGPT의 기능이다.

사진처럼 면접 질문 테이블에 현재 관련 분야와, 관련 기술와 관련성이 있는
여러 질문들 중 추천할 만한 것을 추려서 사용자에게 보내주고,
만약 사용자가 이 내용이 마음에 들지 않는다면 OpenAI에 요청하도록 만든다.

이런 방식으로 구현해서 DB에 기존 질문들 재사용한다면 OpenAI API 요청 횟수를 줄일 수 있을 것이다.

하지만 질문 추천 기능은 쉬운 기능이 아니기 때문에 지금은 희망 사항일 뿐이다.


프로젝트 Repository 주소: https://github.com/Jang990/Gpterview

profile
공부한 내용을 적지 말고 이해한 내용을 설명하자

0개의 댓글