[Pre-Onboarding] - 원티드랩 기술과제 회고

김주현·2021년 12월 12일
0

원티드랩 과제 정보

  • 원티드x위코드 백엔드 프리온보딩 과제3
  • 기업명 : 원티드
  • 깃허브 링크

내가 맡은 기능

  • db 모델링과 회사 자동완성 기능, 유닛테스트

이번과제에서 db 모델링을 하면서 기업 요구사항에 맞춰 확장성을 고려한 db설계를 해야 했었습니다.

그래서 처음에는 다음과 같이 회사와 태그테이블과 중간테이블로 나누어 설계했습니다.

하지만 api설계를 진행하면서 언어별로 회사이름을 분리해야하는 문제와 회사마다 어떤 언어별로 이름을 가져야하는 지에 대한 문제가 있어 테이블을 확장해야할 필요성을 느꼈고 최종으로 나온 db모델링은 다음과 같습니다.
*related_companies테이블을 생성함으로써 회사명이 영어인지 한국어인지 알려주었습니다.

언어별로 회사이름을 분리해야하는 문제에 대해서는 검색한 회사명이 원티드랩이라면 요청헤더에 담긴 x-wanted-language 값에 따라 해당 언어를 가진 회사명이 출력이 되야합니다. (ko : 원티드랩, en : WantedLab)
*파라미터에 담긴 회사명이 영문이어도 요청헤더에 담긴 x-wanted-language 값에 따라 한국어로 출력되어야 합니다.

class CompanySearchView(View):
    def get(self, request, company_name):
        try:
            language = Language.objects.get(name=request.headers.get('x-wanted-language'))
            company  = Company.objects.get(name=company_name)

            if CompanyLanguage.objects.get(company_id=company.id).language_id != language.id:
                company_info = Company.objects.get(related_company__company_id=company.id, companylanguage__language_id=language.id)
            else:
                company_info = Company.objects.get(name=company_name)

            tags = Tag.objects.filter(taglanguage__language_id=language.id, companytag__company_id=company_info)
            
            result = {
                'company_name' : company_info.name,
                'tags'         : [tag.name for tag in tags]
            }
            return JsonResponse(result, status=200)

        except Language.DoesNotExist:
            return JsonResponse({'message' : 'DOES_NOT_EXIST'}, status=404)
        
        except Company.DoesNotExist:
            return JsonResponse({'message' : 'DOES_NOT_EXIST'}, status=404)

소감

이번 과제를 통해 확장성을 고려한 db설계가 무슨 말을 하는 것인지 이해하지 못했었습니다.
그래서 처음 db설계를 하고 기능구현하는 와중에 참조해야하는 키값을 제대로 가져오지 못하는 오류가 여러번 발생하다보니 db설계를 다시 수정하는 일이 생겼습니다. 유닛테스트를 여러번 고치느라 다들 지치고 힘들었지만 결국엔 기능구현과 배포까지 해내서 기한 내에 과제제출을 할 수 있었습니다.
하지만 db설계에 대한 아쉬움이 커서 다음번엔 기업의도를 잘 파악하고 더 철저하게 설계를 해야겠다는 생각을 했습니다.

0개의 댓글