루나의 TIL 기술 블로그

원티드 x 위코드 프리온보딩 과제3 Wantedlab(다국어회사이름검색)

|

과제 설명 요약

  • 구현 기간 : 21.11.08(17시) ~ 21.11.10 (10시)
  • 자세한 내용은 Github 참조

아래와 같은 형태로 저장되어있는 데이터에서 헤더에서 받은 언어 설정값을 통해 회사를 검색하는 부분을 담당했다.

company_name : {
    'ko': '라인',
    'en': 'Line',
    'ja': 'ライン'
}

모델링

다른 언어도 추가될 수 있도록 만들라는 전제가 있어서 확장성을 고려해서 JSONField를 사용하기로 했다. JSON

사용한 기술 설명

팀에서 세 분은 DRF를 사용할 줄 알았고 나와 지원님은 몰랐어서 이번 과제를 통해서 DRF를 공부하고 적용해보기로 했다. DRF를 바로 공부하고 바로 적용하는 것이 어려웠지만 태우님께서 공부할 수 있게 단계별로 DRF를 적용하는 코드를 보여주시고 지원님도 도와주셔서 세팅을 할 수 있었다.

내가 작성한 코드 / 기억에 남는 코드

헤더에서 언어를 받는 부분에서 처음에는

if request.headers['X-Wanted-Language'] is False:
            language = 'ko'
        else :
            language = request.headers['X-Wanted-Language']

이렇게 작성했는데 쿼리스트링(검색값)이 아예 없는경우에는 if문 작동까지가지도 못하고 500에러가 발생해서 팀장분께서 아래와 같이 리팩토링해주셨다.

class CompanySearchAPIView(views.APIView):

    def get(self, request):
        search  = request.GET.get('query', None)
        results = []

        if search is None:
            return response.Response(results, status=status.HTTP_200_OK)

        language = request.headers.get('x-wanted-language', 'ko')

        #JSON구조에 따라 depth 안 쪽으로 들어가서 company_name : { ko : 여기를 검색 } 하도록 함    
        c = {f'company_name__{language}__icontains': search}

        companies = Company.objects.filter(**c)
        company_serializer = CompanySerializer(companies, many=True)

        results = [{
             "company_name" : company['company_name'][language]
        } for company in company_serializer.data]

        return response.Response(results, status=status.HTTP_200_OK)

프로젝트 후기

팀원분들에 비해서 내가 정말 많이 부족하다는걸 느꼈다..! 배우는 속도가 느려서 내가 개발자가 될 수 있을까 의구심이 들었지만 내가 공부를 더 하면 될 일이고, 일단 백엔드를 3년간 열심히 해봐야겠다고 생각한다. 함께 프로젝트를 하는 팀원 분들이 정말 잘하고 열심히 하셔서 배울 점이 많다.