[프리온보딩 백엔드] 원티드 기업 과제 회고👏

Sewon·2021년 12월 5일
0

[Pre Onboarding] BE

목록 보기
2/4
post-thumbnail

✔️모델링 방식 고민

해당 프로젝트에서 구현해야 하는 기능은 다음과 같다.

  • 회사명 자동완성(회사명의 일부만 들어가도 검색 되어야 함)
  • 회사 이름으로 회사 검색(header에 따라 반환값은 해당 언어로)
  • 새로운 회사 추가

제공되는 데이터에서 1개의 회사는 여러 언어의 회사명을 가질 수 있다.
따라서 언어별 회사명을 Company 테이블의 속성으로 넣을지 vs. 언어별 회사명을 따로 테이블로 뺄지에 대한 고민을 하였다.

#️⃣방안1 - 언어별 회사명을 Company 테이블의 속성으로 넣기

내용 : Company 테이블과 Tag 테이블만 존재하고, Company 테이블 속성에 JSONField로 {"ko":"원티드랩", "en":"WantedLab"} 형태로 저장함

장점

  • 회사명으로 검색 시 Company와 CompanyName 테이블 조인 필요하지 않음

단점

  • 주로 제공하는 기능이 회사명을 사용한 검색인데, JSONField로 저장시 Company 테이블의 JSONField의 속성의 모든 value 값에 접근하여 요청값에 해당하는 회사를 찾아야 함

#️⃣방안2 - 언어별 회사명을 따로 테이블로 빼기(확장성 및 검색을 고려한 테이블) 채택!

장점

  • CompanyName 테이블로 회사명을 따로 관리하여 회사명 검색 시 해당 테이블에서 바로 찾기 가능함
  • 언어별 회사들 조회가 가능함(기능 확장성)

단점

  • 회사명으로 검색 시 Company와 CompanyName 테이블 조인이 필요함

➕ Language 관리

  • 회사명과 Tag는 모두 언어별로 각각 제공 되고, 새로운 언어 추가 가능성이 존재하기 때문에 따로 테이블을 생성함

채택 이유)
회사명으로 검색 시와 새로운 언어에 대한 회사명 추가 시 해당 모델링 방식이 더 적합하고, 제공할 기능에 대한 확장성이 더 크기 때문에 선택했다.

profile
for develop ☁️

0개의 댓글