[이케아 프로젝트] 마무리 회고록

hyuckhoon.ko·2020년 7월 18일
0

What I learned in wecode

목록 보기
92/109
post-thumbnail

1. 결과



2. 회고록

1) 나는 협업하기 좋은 사람인가

샤넬 프로젝트 및 1차 프로젝트 발표가 끝나고, 은우님의 wrap up 시간이 있었다.

은우님은 모든 수강생에게 다음과 같이 말했다.

"다들 협업해보니 어때요~, 잘하는 사람이랑 같이 해서 좋았나요?"

라고 대답하는 사람은 없었다.


"실력보다, 물론 실력도 중요하지만, 계속 같이 일해보고 싶은 사람 있었죠?"

라고 말하는 사람들이 많았다.



1차 프로젝트가 끝나고 2차 프로젝트를 준비하며
새로운 지식을 습득하는 것보다 나에 대한 분석을 정말 많이 했었다.

가장 변하고 싶은 부분은 '협업하고 싶은 사람'이 되자였다.

월요일에 이케아 프로젝트를 하게 된다는 결정이 났고,
새로운 팀원들을 만났다.

나 뿐만 아니라, 다른 팀원 역시 나와 같은 다짐을 한 것 같았다.

어떻게 친해졌는지조차 모르게

우리팀은 쉴새없이 잠답을 했다.

잡담이 경쟁력이다를 틈만 나면 말하는 팀원이 있었다.

반신반의했지만, 이런저런 이야기를 나누다보니

얼굴만 봐도 지금 어떤 문제로 노트북 모니터를 뚫어져라 바라보는지 알 수 있을 정도였다.


이 팀과 3차, 4차 프로젝트를 계속 진행하고 싶다는 생각이 지금도 든다.

예전엔 코딩을 잘하는 사람이 최고라고 생각했지만,

생각이 180도 바꼈다.

내 생에 최고의 팀플이었다.

이크에크 팀원들 모두 사랑한다~!!


2. 기억에 남는 코드

이케아 검색기능을 구현한 것이 가장 기억에 남는다.

장바구니(추가, 삭제, 수량 증가 등) 구현도 했지만, 검색기능을 꼽고 싶다.

그 이유는

  • 1차 프로젝트(샤넬 프로젝트)때 해보지 않았던 것을 해보고 싶었고 그게 검색이었다.
  • 코드의 가독성 및 코드의 줄을 줄이는데 집중했다.
  • 써보지 않았던 Django ORM을 사용했다.

class SearchView(View):
    def get(self, request):
        try:
            user_input = request.GET.get('user_input')
            if not user_input:
                return JsonResponse({'MESSAGE':'NO_INPUT'}, status=405)
            criterion_1 = Q(product_number__contains=user_input)
            criterion_2 = Q(explaination__contains=user_input)
            criterion_3 = Q(introduction__contains=user_input)
            criterion_4 = Q(description__contains=user_input)
            criterion_5 = Q(name__contains=user_input)
            criterion_6 = Q(size__contains=user_input)

            search_result = Product.objects.filter(
                criterion_1 |
                criterion_2 |
                criterion_3 |
                criterion_4 |
                criterion_5 |
                criterion_6
            ).defer('detail').distinct()

            total_info = {}
            total_info['total_number'] = search_result.count()
            search_result = [
                {
                    'images': [each_image.image_url for each_image in
                        search.productimage_set.all()[:2]],
                    'sub_category':search.sub_category.name,
                    'simple_name':search.introduction,
                    'price':search.price,
                    'size':search.size,
                    'product_number':search.product_number,
                }
                for search in search_result
            ]
            total_info['data'] = search_result
            return JsonResponse({'search_result':total_info}, status=200)
        except KeyError:
            return JsonResponse({'MESSAGE':'KEY_ERROR'}, status=407)
        except ValueError:
            return JsonResponse({'MESSAGE':'VALUE_ERROR'}, status=408)

list_comprehension은 기본으로 사용했다.
1차 프로젝트때, 멘토님께 코드리뷰를 주셨던 사항이었기에
"같은 실수를 반복하고 싶지는 않았다"


인상에 남았던 것은 Product 테이블의 detail필드였다.

검색 결과에 detail필드는 필요하지 않았다. 또한,
detail필드엔 각 제품에 대한 html태그들로 가득차 있었다.

불필요한 컬럼이었다.

이러한 생각을 갖고, 장고 공식문서를 찾아보기 시작했다.

분명 내가 필요성을 느낀만큼, 반드시 이러한 기능이 있을 것이다 라고 판단했고, 역으로 추적해봤다.

해당 기능을 가능케하는 장고 공식 문서가 존재했다!!

"You can tell Django not to retrieve them from the database!"



신기한 경험이었다.

구글링 실력이 점점 느는 것 같다.

"혹시 이러한 기능이 이미 있지는 않을까?" 예측을 하고

검색을 하는 것도 좋은 검색 팁이라는 걸 느꼈다.



0개의 댓글