장고 1차 프로젝트 회고 및 다짐 - 그로우캐년편

김민정·2022년 6월 5일
1

장고 프로젝트1

목록 보기
4/4

시작하며

프로젝트도 처음이고, 거기다가 팀 프로젝트는 더 처음이고, 그 프로젝트를 장고로 하는 것도 처음인 김민정의 팀프로젝트 회고 및 다짐

기간
2022.05.23 ~ 2022.06.03

인원
FrontEnd 4명, BackEnd 2명

BackEnd 기술 스택
django - bcrypt, pyjwt, django, mysql, git, aws, python

협업도구 - trello

시연영상
링크타고 가세요

db 모델링

내가 구현한 부분

새롭게 알게된 / 기록해 두고 싶은 개념
장고 프로젝트 회고 1 get_or_created편
장고-프로젝트-회고-2-스케쥴링편
장고-프로젝트-회고-3-트랜잭션
링크 타고 들어가시면 확인할 수 있습니다.

느낀점

  1. 예외처리를 할 수 있는 다양한 방법을 고민하자
    예외처리에 관해서는 팀프로젝트를 시작하기 전부터 중요하다고 생각하고 있었지만 막상 코드 상에서 눈에 보이는 문제가 발생하지 않다고 보니 예외처리를 제대로 하지 못했고 이 부분에 관해서 항상 지적을 받았다.

예외처리를 할 수 있는 방법
1-1) 이번 프로젝트에서 많이 사용한 방법

 try:
             cart = Cart.objects.get(id = cart_id)
             cart.delete()

             return JsonResponse({'message' : "DELETE_SUCCESS"}, status=201)

         except Cart.DoesNotExist:
             return JsonResponse({"message" : "CART_NOT_EXISTED"}, status=400)

try except 구분 안에서 보통 DoesNotExist를 사용해서 예외처리르 수행했다.

1-2) 다음 프로젝트에서 수행하고 싶은 예외처리 방법
get_object_or_404()를 사용해서 예외처리를 하는 방법
-try, except 구문을 사용할 필요가 없다.

cart = get_object_or_404(Cart, id=cart_id)
  1. F 객체를 사용해보자
    급하게 코드 하나하나 쳐내다보니 아쉬운 코드가 눈에 몇개씩 보인다. 코드를 보기 좋게 줄인다 < 코드의 메모리 효율성을 높인다. 둘다 중요하기만 메모리 효율성을 높이는 측면에서는 orm을 적절하게 활용하는 것이 필요하다.
 if Review.objects.filter(id = review_id).exists():
                review.view_count = review.view_count+1
                review.save()
 if Review.objects.filter(id = review_id).exists():
                review.view_count = F('view_count') + 1
                review.save()

실제로 데이터베이스에서 Python 메모리로 가져오지 않고, 모델 필드 값을 참조하고 이를 데이터베이스에서 사용하여 작업할 수 있다는 이점이 있는 F객체를 적절하게 활용해보자
확연한? 속도차이를 느낄 수 있다.

  1. API 명세서를 작성하자
    키값은 금방 맞추면 되는 거 아니냐고 이야기할 수도 있겠지만(실제로 프로젝트 마무리 2일전까지 필자가 가지고 있었던 생각) 그게 아니라는 걸 다른 분들이 api 명세서 작성한 걸 보면서 깨달은 1인

postman에서는 간편하게 api 명세서를 작성할 수 있게 도와준다

백엔드의 경우(이것도 필자의 생각일 수는 있지만) 프로젝트를 해보니 키값을 변경하는게 그렇게 어려운 일은 아니었다. 하지만 프론트 엔드 코드를 보니 키값이 필요한 곳이 백엔드보다 많았고(백엔드는 엔드포인트 단위로 움직여서 다른 엔드포인트와 키값관련해서 영향을 받지 않지만 프론트엔드는 그게 아니었던...)

협업이라는 입장에서 백엔드가 api 명세서를 만들지 않은건 프론트에게 큰 문제가 될 수 있음을 프로젝트를 하면서 깨달았다.

  1. 변수명을 똑바로 작성하자

나름 변수명을 명확히 작성한다고 고민했지만 여전히 변수명에 대한 이해도의 부족이 들어났던 프로젝트를 회고한다.

class CommentView(View):
     @login_decorator
     def post(self, request, review_id):
     	 review       = Review.objects.get(id=review_id)
         
       Comment.objects.create(
                user     = user,
                review   = review.id,

분명히 파라미터로 review_id를 받아왔으면서 review.id를 다시 구하고 있었던 나 ( 이때 왜 그랬니..) review_id = review_id만 하면 됬었는데 review라는 변수명으로 review.id를 받는 (비슷한 짓을 몇번 더 하기도 했음)
->다행히 코드리뷰를 받으면서 문제를 해결했지만 내가 이 문제를 못 찾은건 내 코드에 너무 너그러웠기 때문이 아닐까...

마치며

첫술에 배부를 수는 없지. 하지만 다음 번에는 첫술보다는 더 나아지게 노력할 예정.

1개의 댓글

comment-user-thumbnail
2022년 6월 12일

🙋‍♂️

답글 달기