TIL 20. 1차 project 회고록

Drageon Lee·2021년 11월 14일
0

Wecode

목록 보기
1/1

Today's topic

👉 1차 project 회고

이번 post에서는 지난 2주간 진행했었던 Redibooks clone project인 redibooks에 대해 회고해 보려 한다. 나는 back end part를 맡아서 진행하였으며, main과 category를 나타내는 ProductListView 쪽을 맡아서 진행하였다.

👉 주제

e-book contents를 다루는 site인 redibooks를 clone coding을 진행하였다.

👉 기간

2021/11/01 ~ 2021/11/12

👉 팀구성

Front end : 4명
Back end : 2명

👉 기능 구현(Backend 기준)

  • Main page : 추천도서 기능 / 신간 도서 별 추천 기능 / Review 점수 반영한 도서 추천 기능
  • 각 categroy별 책 저장
  • Review page
  • Cart page
  • db_upload with csv file로 자료 업데이트

👉 What I did?

  • 내가 맡은 부분은 ProductListView를 담당하여 main page 내에 추천도서 기능 / 신간 도서 별 추천 기능 / Review 점수 반영한 도서 추천 기능 구현
  • 각 category 별 선택 시 category에 맡는 책 선택 될 수 있도록 구현
import json
from django.http import JsonResponse
from django.views import View
from django.db.models import Avg
from .models import Product
from django.db.models import Q, Avg, Count
class ProductListView(View): 
    def get(self, request):
        new_books = request.GET.get('new_books', None)
        sub_category = request.GET.get('sub_category', None)
        category = request.GET.get('category', None)
        rating = request.GET.get('rating', None)
        requests = request.GET.get('requests')
        q = Q()
        offset = 0
        limit = 20
        if sub_category:
            q &= Q(subcategory_id=sub_category)
        if category:    
            q &= Q(subcategory__category_id=category)    
        products = Product.objects.filter(q)\
                                  .annotate(reviews_count=Count('review'))\
                                  .annotate(average_rating=Avg('review__rating'))\
                                  .values("id", "name", "author", "thumbnail_image_url", "date_published", "average_rating", "head_description", "detail_description1", "detail_description2")\
                                  .distinct()
        if rating:
            products=products.order_by(rating)[offset:limit+offset]
        if new_books:
            products=products.order_by('-date_published')[offset:limit+offset]
        if requests:
            products=products[0:10]
        result = [{
            "id"                  : product['id'],      
            "name"                : product['name'],
            "author"              : product['author'],
            "image"               : product['thumbnail_image_url'],
            "date_published"      : product['date_published'],
            "head_description"    : product['head_description'],
            "detail_description1" : product['detail_description1'],
            "detail_description2" : product['detail_description2'],
            "rating"              : round(float(product['average_rating']), 1) if product['average_rating'] else 0
        } for product in products]
        return JsonResponse({"products" : result}, status = 200)

👉 잘했던 점?

  • 최대한 스스로 맡은 부분에 내가 아는 지식 들 및 검색하여 얻은 지식들을 적용하려고 노력하였다. 기존에 작성했던 code 및 배웠던 지식을 참고하여 작성하였고 구글링 및 멘토님들의 review를 작성했던 code에 최대한 반영하려고 노력하였다. 최대한 face를 잃지 않으려는 노력도 잘한점으로 보고 싶다.

👉 부족했던 점?

  • 최대한 face를 잃지 않으려 했다는 점을 잘한점으로 보고 싶다고 했지만 team으로 봤을 때는 상대적으로 느린 속도로 인해 원했던 기능을 다 구현 못했던 것 같다.
  • 마지막으로 이 project를 진행하는 마지막 주의 다음 날이 body profile을 찍는 날이었다. 두개 모두 집중하려고 노력하였으나, 상대적으로 한군데에는 완전히 몰입하지 못했던 것 같다. 팀에서 봤을 때는 좀 부족했을 수도 있겠다는 생각을 했다. 이 부분이 좀 부족했던 부분이었던 것 같다.

👉 전반적인 솔직한 회고

팀 전체적으로는 자기가 알고 있는 기능을 잘 적용시킬 수 있는 project를 해보자. 기능 보다는 최대한 알고 지식을 적용시켜보자고 했다. 하지만 project를 시작하고는 뭔가 사람이다보니 개인별로 기능에 욕심이 조금 생기지 않았나 하는 느낌적인 느낌을 받기도 했다. 개인적인 느낌이다.
내가 담당했던 Backend 팀원은 두명이었는데 상대적으로 성향이 좀 달랐던 것 같다. 다른 분은 상대적으로 속도가 빠른 분이었는데, 내가 ProductListView를 할동안 ProductDetailView, Review 기능, Cart 기능을 구현하셨다. 상대적으로 차이가 나는 속도가 내가 느껴질 정도 였고, 그로 인해 뭔가 상대 backend 분이 뭔가 불편해 할 수도 있겠다고 느꼈다. 뭔가 내가 상대적으로 느리니 많은 것을 담당하게 하는 것 같아 미안함도 느껴졌다. 그런데, 뭐가 맞는 건지는 아직도 잘 모르겠다. 물론 project를 진행할 때는 딱 정해진 기간을 맞추어야 하기 때문에 팀 전체의 face에 맞추기 위해 수단과 방법을 가리지 않고 따라가야 한다. 하지만 그러기에는 지금 하나씩 익혀가야 하는 상황에서 무조건 그 face를 따라가야 하는지에 대해 의문도 조금 들었다. 팀 전체적으로도 자신이 아는 지식을 바탕으로 자기 face에 맞춰 가자고 했고, 멘토님들의 의견도 기능 구현에 욕심을 내지 말고 face를 잘 유지하라고 했다. 이 두가지의 갈림길에서 어떤 쪽이 맞는 지는 아직도 잘 모르겠다.
이 점은 내가 앞으로 계속 개발을 해가면서 적립해 가야하는 숙제 인 것 같다. 앞으로 2차 프로젝트도 남아있는데 1차 프로젝트에서 배운 경험을 바탕으로 잘 해 나갈 수 있도록 노력해야 겠다!! :)

profile
운동하는 개발자

0개의 댓글

관련 채용 정보