pre-onboarding 003 | Wantedlab 회고

This Is Empty.·2021년 11월 11일
0

wanted-pre-onboarding

목록 보기
4/8
post-thumbnail

원티드랩(Wantedlab)

gitgub repository

  • 진행 기간 : 2021.11.08 pm 16:00 ~ 2021.11.10 am 10:00

  • 기술 스택 : Django@3.2.9, mysql@8.0.27, python3.8

  • 과제 요구사항

    • 회사명 자동완성
      • 회사명의 일부만 들어가도 검색이 되어야 합니다.
    • 회사 이름으로 회사 검색
    • 새로운 회사 추가
  • 개발 조건

    • 제공되는 test case를 통과할 수 있도록 개발해야 합니다.
    • ORM 사용해야 합니다.
    • 결과는 JSON 형식이어야 합니다.
    • database는 RDB를 사용해야 합니다.
    • database table 갯수는 제한없습니다.
    • 필요한 조건이 있다면 추가하셔도 좋습니다.
    • Docker로 개발하면 가산점이 있습니다.
  • 데이터

  • 회사 정보

    • 회사 이름 (다국어 지원 가능)
  • 회사 정보 예제

    • 회사 이름 (원티드랩 / Wantedlab)
  • 데이터 셋은 원티드에서 제공

  • 데이터셋 예제
    - 원티드랩 회사는 한국어, 영어 회사명을 가지고 있습니다. (모든 회사가 모든 언어의 회사명을 가지고 있지는 않습니다.)

Review

이번 과제에서는 db_uploader.py(CSV 파일 Database dump용)작성과 회사 상세조회 기능을 담당하였습니다.

이번 과제에서 중요한 부분은 기업에서 제공한 test.py에 통과할 수 있도록 api를 개발해야하는 것과 확장성을 고려한 db 설계라고 느꼈습니다.

db 설계시 다음과 같은 어려움을 겪었습니다.

처음에는 company, tag, companytag의 세 테이블만 다음과 같이 설계했었습니다.

하지만 이렇게 설계해서 개발을 시작하면 새로운 언어는 외부 요인에 따라 다양하게 추가될 수 있다의 조건을 충족하기 어려워짐을 느꼈고, 두번째 설계한 데이터베이스의 구조는 다음과 같습니다.

이게 맞는거겠지 하고 신나게 api 개발하던중 또 다른 문제를 맞닥뜨렸습니다.
언어별로 회사 이름을 분리한 것은 좋으나, 어떤 회사가 어떤 언어별로 이름을 갖고있는지는 알 수 없었습니다.

제가 맡은 api의 테스트 코드는 다음과 같습니다.

def test_company_search(self):
    """
    	2. 회사 이름으로 회사 검색
    	header의 x-wanted-language 언어값에 따라 해당 언어로 출력되어야 합니다.
    """
        client = Client()
        headers = {"HTTP_x-wanted-language" : "ko"}
        resp = client.get("/companies/Wantedlab", **headers)

        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.json(), 
            {
                "company_name": "원티드랩",
                "tags": [
                    "태그_4",
                    "태그_20",
                    "태그_16",
                ],
            })

        # 검색된 회사가 없는경우 404를 리턴합니다.
        resp = client.get(
            "/companies/없는회사", headers=[("x-wanted-language", "ko")]
        )

        self.assertEqual(resp.status_code, 404)

url에 담긴 회사 명은 영문이지만, 응답내용은 요청 헤더에 담긴 x-wanted-language에 따라 한국어로 출력되어야 합니다.

그렇다면 어떤 회사가 어떤 언어로 회사 명을 갖고있는지 정보를 갖고 있는 related_companies테이블이 필요하다고 느꼈고, 최종 fix된 테이블 구조는 다음과 같습니다.

테이블 구조를 수정한 후에는 큰 어려움 없이 개발을 마칠 수 있었습니다.

이번 과제를 통해 얻은 점은 다음과 같습니다.

  • 충분한 회의를 통한 개발 환경 구축이 필요하다.

테이블을 총 세번 수정하면서 db_uploader.py(github에는 올라가있지 않습니다.)도 계속 수정해야 했기 때문입니다.

다음 과제에서는 꼭 충분한 회의를 통해 이번 과제에서 겪은 문제점을 보완해야겠습니다.

profile
Convinced myself, I seek not to convince.

0개의 댓글