위코드 부트캠프 11기 2차 프로젝트 MagicConch팀의 kinfolk클론 입니다.
슬로우 라이프 스타일 잡지 킨포크를 클론함으로써 데이터 모델링, 회원가입, 소셜 로그인, 장바구니 등의 기능을 구현하고 개발 역량을 기르고자 한다.
괜찮다
할 수 있다
며 팀원간에 응원과 격려가 있어서 이런 상황속에서도 2차 프로젝트를 재밌게 할 수 있었습니다.1차 프로젝트 때와 마찬가지로 프론트엔드와의 소통
프로젝트가 온라인으로 진행되다 보니 팀원간의 소통을 더욱 절실해서 구글밋, 줌으로 계속 팀원간에 대화를 했었습니다. 다만 팀원간에 대화는 늘었지만 다들 경험 부족으로 필요했던 대화는 많이 하지 못했습니다. 특히 저같은 경우에는 상품 정보를 어떻게 프론트에게 넘겨줄 것인지
, 예를 들어 상품하나가 여러 이미지를 가지고 있을때 이미지 URL들을 어떤 자료형으로 넘길것인지에 대해서 충분한 대화가 이루어지지 못해 마지막가서 프론트엔드, 백엔드 전부 고생한 경험이 있었습니다.
미처 구현 못한 기능들
이번 킨포크를 클론 프로젝트를 하면서 팀원 프론트엔드던 백엔드던 다사다난한 일들이 많았습니다.
위에서 언급했던 사이트 내부의 변화 말고도 팀원 두 분의 노트북이 프로젝트 도중에 고장나서 한분은 새로 구매 했어야 했고, 한분은 수리로 인해 하루 가까이 프로젝트 진행을 하지 못했습니다.
(그래도 서로 당황하지 말고 멘탈 잡으라며 격려와 응원이 있어서 흔들리지 않고 프로젝트를 계속 진행했던거 같습니다.)
프론트엔드, 백엔드의 상황이 이렇다 보니 프로젝트 초기에 구상했던 기능들을 모두 구현하지 못한채 시연을 하게 되어 아쉬웠습니다.
구현하지 못한 기능들로 아쉬움이 남을지언정 우리 팀원 모두 최선을 다했기에 후회는 없습니다.
시간 부족으로 미처 구현 못한 기능들은 기업 협업 이후 다시 모여서 구현 및 리펙토링 하기로 했습니다.
저는 이번 프로젝트를 통해서 백엔드가 프론트엔드에게 어떤 데이터를 어떻게 넘겨줄것인지
,
프론트엔드에서 상품 정보 조회시 쿼리스트링은 상품 ID로 할것인지 상품명으로 할것인지 등...
백엔드와 프론트엔드간에 맞추어야 할 것들이 무엇인지, 상호간에 진짜 필요한 소통이 무엇인지 알게 되었습니다.
제가 구현한 기능중에서 검색 기능이 있습니다. 처음 구현할때에는 DB의 각 테이블 컬럼별로
접근해서 검색어와 일치하는 데이터를 확인하고 일일이 가져왔었는데, 이런식의 접근으로는 검색어 하나당 데이터베이스에 6번이나 접근을 했었고, 성능저하를 일으켰습니다. 그러다가 Q객체를 알게되었고 이것을 이용해서 검색어를 찾다보니 테이블 하나당 한번만 접근 하면 되어서 최종적으로는 DB Hit를 6번에서 2번으로 줄였습니다.
class SearchView(View):
def get(self, request, item):
results = []
search_shop = list(ShopProduct.objects.filter(
Q(outer_tag__icontains = item) |
Q(inner_description__icontains = item) |
Q(inner_details__icontains = item)
).values()
)
search_category = list(CategoryProduct.objects.filter(
Q(title__icontains = item) |
Q(description__icontains = item) |
Q(tag__icontains = item)
).values()
)
results.append(search_shop)
results.append(search_category)
if results[0] == []:
return JsonResponse({'Massage': 'No results found'}, status = 400)
return JsonResponse({'search_results': results}, status = 200)