본문 바로가기
코드

django 과제

by ehei 2020. 2. 22.

전환 배치 기간 동안 이것저것 공부를 해보았다. 한가지만 팔 것 그랬나 생각도 들지만... 암튼 그 중에 웹 백엔드 프로그래밍을 시도해봤다. 장고는 파이썬 기반이기에 무척 익숙하다. 물론 백엔드는 낯설지만. 그런데 너무 늦게 이걸 보았고, 지원한 다른 곳에서도 nodejs 기반의 코드 과제를 주었다. 게다가 아이는 입원... 다행히 부인님이 도와줘서 밤 늦게 집에 온 뒤 새벽까지 짰다. 다음 날 오전 중에 수정해서 제출했다.

 

역시 이런 쪽의 학습 없이 도전해서 그런지 탈락했다. 면접 제의는 없었으니까. 점수가 무척 낮은데 상위라서 조금 놀랐다. 아마 지원하고 완성하지 않은 이가 많았으리라 짐작한다. 조금 더 열심히 해봤으면 어땠을까. 뭐 이미 지난 일이고... 일단 너무 늦게 과제를 보았다. 무엇보다 내 코드를 평가해줘서 고마웠다. 다음에도 적당한 기회가 오면 도전할 예정이다. 꼭 이직을 하지 않더라도 이런 걸 하는 건 뭔가 자극을 준다. 이걸 하루 만에 해결하고 나니 자신감이 붙었고 나의 우울함이 싹 사라졌으니까.

 

과제

https://programmers.co.kr/competitions/130/2020-hwahae-blind-recruitment

코드

https://github.com/ehei0001/hwahae

 

 

 

 

버드뷰(화해) 서버 과제

63.125점(264만점), 상위 3%(19/631)

2개의 평가

좋은 부분

  • 테스트 코드를 작성했습니다.
  • 중복되는 부분을 함수로 만든 점이 좋습니다.

아쉬운 부분

  • Item 모델의 imageId나 monthlySales처럼 파이썬 스타일 가이드인 PEP8을 지키지 못한 부분이 있습니다.
  • 에러 status 설정이 아쉽습니다. 예를들어 /products로 호출했을 때 skin_type 파라미터가 없어서 발생한 오류는 400 Bad Request여야 하지만 500 Server Internal Error가 응답됩니다.
  • 에러가 발생할 때 HTML로 응답합니다. JSON으로 통신하는 API 서버기 때문에 JSON으로 응답하는 것이 좋아보입니다.
  • View는 class-based view mixin을 사용했다면 더 좋았을 것 같습니다.
  • 모델 관계가 없는 것이 아쉽습니다.
  • 모델을 활용하여 View의 책임을 덜어주는 것이 좋아보입니다.
  • index를 너무 과하게 사용했습니다.

총평

  • 전체적으로 아쉬운 부분이 있습니다. 또한, 모델을 확장성이나 정규화를 위해 Product와 Ingredient를 다대다 모델로 설정하고 카테고리를 테이블로 구성했으면 더 좋았을 것 같습니다.

좋은 부분

  • 반정규화를 이용해서 성능향상을 꾀한 점은 좋았습니다.
  • 인덱스를 추가해서 쿼리 성능을 고려한 부분은 좋았습니다.
  • price 필드를 PositiveIntegerField로 사용한 것처럼 데이터에 대한 적절한 필드를 선택하는 것은 좋았습니다.
  • 테스트를 작성하였습니다.

아쉬운 부분

  • 불필요한 곳에도 DB index를 추가해서 사용하고 있습니다.
  • price 필드의 기본값에 대한 고려가 부족합니다.
  • 모델 간의 관계를 제대로 정의 못하는 것을 볼 때, 모델링이 조금 아쉽습니다.
  • 네이밍시 파이썬 PEP-8을 지키지 않는 부분들이 많이 보입니다.
  • Views는 django 혹은 DRF에서 제공해주는 기본 CBV mixin을 재활용했으면 어땠을까 하는 아쉬움이 있습니다.
  • 모델 프로퍼티 사용을 적절하게 활용했으면 굳이 불필요하게 복잡한 방식으로 처리를 할 필요가 없었을텐데 하는 아쉬움이 있습니다. 프로퍼티를 사용해서 가독성과 유지보수성, 재사용성을 높일 수 있지 않았을까 싶네요.
  • home 앱의 views.py에 item 앱 관련 로직이 들어가 있습니다. 각각의 앱이 독립적으로 응집성있게 구성되어야 하는데 그 부분이 고려되지 못한거 같습니다.
  • 응답 상태 값이 클라이언트 오류인 4XX 이어야 하는데, 서버 오류인 5XX대로 응답을 하도록 되어 있습니다.
  • Content-type이 json으로 일관되지 않고, 에러 발생시에는 html로 반환하고 있습니다.

총평

  • 프레임워크와 사용하는 언어에 대한 이해를 더 높일 필요가 있어 보입니다.
  • Item 모델의 정규화가 적절하게 이루어지지 않은 부분이 아쉽습니다.

'코드' 카테고리의 다른 글

C++ 명언  (0) 2020.12.15
테트리스  (0) 2020.04.13
Valid Parentheses  (0) 2020.02.12
Min Stack  (0) 2020.02.12
Target Sum  (0) 2019.12.04