Python&Django 코드 리뷰 #1

dev-swd·2020년 11월 15일
0

코드리뷰

목록 보기
1/2

#코드 리뷰 수정1

  • 가장 많이 지적 받았던 부분인데, 파이썬에서는 객체가 유효하다면 그 자체로 Truthy, Falsy를 판단수 있기 때문에 else 는 반드시 처리해야 하는 상황이 아니라면 지양한다.
    또한 return 할 때도 그 자체로 boolean 이라면 바로 사용하는 것이 보다 파이썬 다운 방법이다.
# 회원 가입 부분
users = User.objects.filter(
         Q(email=email) |
         Q(phone=phone) |
         Q(user_name=user_name)
        )
            
# if len(users) > 0:
#    raise AlreadyExistException
# 위의 코드를 아래와 같이 수정

if users:
   raise AlreadyExistException

#코드 리뷰 수정2

  • Validation 부품 (공백 체크)
    이 역시 if else 로 구분하여 공백을 판단하기 보다는, 내장 함수를 사용하여 한 줄의 식으로 값이 Truethy, Falsy 한지 판단할 수 있다.
def is_blank(*args):
    for value in args:
        if value == "" or value is None:
            return True
        else:
            return False

# 위 코드를 아래와 같이 수정. all 메서드를 활용하여 boolean 으로 리턴되게 하였다.
def is_blank(*args):
    return not all([value for value in args])

#코드 리뷰 수정3

에러 핸들링의 의미는, 해당 에러를 고치는 것이 목표이기 때문에 명확한 솔루션을 제공해야 한다.
대상이 명확하지 않는 에러 핸들링은 오히려 아무 솔루션을 제공하지 않기 때문에 오히려 디버깅이 어려워질 수 있다. Exception 을 선언할 때는, 로직에서 발생할 수 있는 모든 에러를 처리한 후, 혹시 발생할지 모르는 에러를 처리할 때 사용한다.

except KeyError:
    return JsonResponse({"message": "KEY_ERROR"}, status=400)

except BlankFieldException as e:
    return JsonResponse({"message": e.__str__()}, status=400)

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

except Exception as e:
    return JsonResponse({"message": "UNKNOWN_ERROR"}, status=400)
    
# except Exception 문 삭제 후, AttributeError 에러가 발견되어 AttributeError 추가.

#코드 리뷰 수정4

view 는 View 돌림으로.

class PostListAll(View):
    ~~~

# 아래와 같이 수정
class PostListAllView(VIew):
    ~~~

#코드 리뷰 수정5

Pull Request 를 할 때는 나의 코드가 아무 문제 없이 돌아가고, 팀원들에게 배포되어도 좋다는 뜻이다. 즉, Production 코드가 완성되었다는 의미이다.
따라서 주석, 불필요한 코드, 불필요한 임포트 등은 전부 깔끔하게 정리가 된 상태이어야 한다.
만약 리뷰를 거친 후에 PR을 해야하는 상황이 있다면, Draft PR 을 할 수 있다.
Draft PR 에는 주석 등을 넣어도 무방하다.


#코드 리뷰 수정6

리뷰하는 문화를 위해서, 짧게 짧게 커밋하는 것이 좋다.
또한 팀원들과의 코드 공유를 위해서 코드 컨벤션을 잘 지키는 것이 도움이 된다.
리뷰어의 눈에 코드가 빨리 들어와야 빨리 진행이 되기 때문이다.


#코드 리뷰 수정7

에러 메세지는 프론트 앤드 개발자가 보기 때문에, 한글로 하지 않아도 된다.
공통의 메세지를 만드는 것이 도움이 된다.


#코드 리뷰 수정7

name = dict.get(“name”, None)

위와 같은 코드는 KeyError 를 절대로 발생시키지 않는다.
활용하기에 따라서 좋은 코드가 될 수 있다.


### # 코드 리뷰 수정8 커밋한 메세지는 사라지지 않기 때문에 깔끔하고 명확하게 작성하는 것이 좋다. 또한 branch 각 삭제되면 merge 가 된 branch 의 커밋만 남기 때문에 branch 삭제는 신중하게 결정하는 것이좋다.

# 코드 리뷰 수정9

python 은 말하듯이 짜여진 프로그램 언어이다.
따라서 자신이 짠 코드를 잘 설명할 줄 알아야 한다.
자신이 짠 코드를 잘 설명할 수 있도록 연습하도록 하자.


# 코드 리뷰 수정10

디버그가 필요한 경우 import pdb 를 활용해보세요..!


느낀점

좀 더 파이써닉한 코드를 어떻게 짤 것인가를 고려하게 되었다는 것이 첫번 째이고, 두번째는 무의식적으로 넣었던 예외 처리 코드는, 반드시 명확한 솔루션을 제공해야 한다는 점을 얻을 수 있었다.

profile
개발을 취미로 할 수 있는 그 때 까지

0개의 댓글