생에 '첫' 코딩 프로젝트, The Meat project

Johnywhisky·2021년 4월 25일
0

회고록

목록 보기
1/2

들어가기에 앞서

본 글은 위코드 5-6주 차에 진행된 1차 프로젝트의 후기입니다. 짧은 기간이었지만 첫 프로젝트를 진행해보며 부족한 pr과 함께 힘써준 팀원들과 고생하신 멘토님들(특히 담당 멘토이신 손승현 님, 안도현 님)께 감사의 글을 남깁니다.
더미트팀 취뽀까지 자~ 드가즈아~~!


1. 프로젝트 소개

본 프로젝트는 더반찬 클론 프로젝트이며 짧은 기간 동안 개발에 집중하기 위해 디자인/기획만 제외 나머지를 클론했습니다.

  • 개발 인원 및 기간

    • 개발기간: 2021/04/12 ~ 2021/04/23
    • Front-end: 서민석, 이재영, 홍진아
    • Back-end: 신지원, 유동헌, 윤서준
  • 적용 기술 및 구현 기능

    • Front-End : HTML, CSS, SASS, JavaScript, React
    • Back-End : Python, Django framework,Bcrypt, Jwt, My SQL
  • 구현 기능

    • 회원가입, 로그인, 상품 리스트, 장바구니
  • 담당

    • 장바구니 기능
  • Reference

    • 이 프로젝트는 더반찬 사이트를 참조하여 학습목적으로 만들었습니다.
    • 실무 수준의 프로젝트이지만 학습용으로 만들었기 때문에 이 코드를 활용하여 이득을 취하거나 무단 배포할 경우 법적으로 문제될 수 있습니다.
    • 이 프로젝트에서 사용하고 있는 사진 대부분은 위코드에서 구매한 것이므로 해당 프로젝트 외부인이 사용할 수 없습니다.

2. 프로젝트 돌아보기

  1. 여러 개의 http method

    나에게 필요한 method를 찾고 사용하기

def patch(self, request):
def put(self, request):

이번 프로젝트를 시작하기 전엔 유일하게 써본 http method는 post와 get뿐이었다. 더 많은 method를 써보며 각각 어떤 상황에 쓸 수 있는지, 또 어떤 제한점이 있는지 알 수 있는 시간이었다.
특히, delete method에는 body가 담기지 않는다는 사실을 처음 알게 되었고, 브라우저상에 보이는 특정 데이터를 body가 없는 상황에서 어떻게 지울지 당황했던 기억이 난다. 결국, PUT이란 method를 알게 되었고 이것을 이용해 해결하였다.

  1. 여러 개의 create

    나에게 필요한 장고 기능을 찾고 docs를 통해 사용방법 익히기

.objects.get_or_create
.objects.update_or_create
.objects.bulk_create

장고에서는 여러 개의 method를 지원해주는데, 그중 위 세 method에 대해 많은 공부를 할 수 있었다. 각 메소드를 사용하는 방법, 상황 등에 관해 공부할 수 있는 시간이었다.

if user_order.productorder_set.filter(product_id = data['id']).exists():
	user_cart           = user_order.productorder_set.get(product_id = data['id'])
	user_cart.quantity += int(data['quantity'])
	user_cart.save()

위 코드는 이번 프로젝트를 진행하며 직접 작성했던 코드이다. 장바구니에 원하는 물품을 담을 때 기존 장바구니에 담겨있는 경우, 그 수량만 증가시켜주는 코드인데 이처럼 if 문, filter, instance 생성 등 많은 과정을 거쳐야 했는데 update_or_create를 사용해 다음의 코드처럼 간소화할 수 있었다.

user_order.productorder_set.update_or_create(product_id = data["id"],
					     defaults   = {"quantity": self.quantity + data['quantity']},
)
  1. comprehension

    파이썬을 파이썬답게

results = [{
    'id'         : product.id,
    'name'       : product.name,
    'quantity'   : product.productorder_set.get(order   = user_order,
                                                product = product).quantity,
    'image_url'  : [image.image_url for image in product.productimage_set.all()],
    'real_price' : int(product.get_real_price()['real_price']),
    'total_price': int(product.productorder_set.get(order   = user_order,
                                                    product = product).get_total_price()),
    } for product in products]

컴프리헨션은 확실히 파이썬스러운 코딩이며 파이썬이 제공해주는 축복과 같은 녀석이다. 물론 만능은 아니겠지만(실제로 시간 관리 측면에서 무조건 유리한 건 아니라고 한다.) for loop나 while loop와 비교했을 때 확실하게 쓰임세를 가지고있는 문법이라 생각한다.

  1. Q objects

    Query를 소홀히하지 말자

q = Q()

if category:
    q &= Q(sub_category__category__name=category)

if sub_category:
    q &= Q(sub_category__name=sub_category)

products = Product.objects.filter(q)

다시 장고로 돌아와 Q객체에 대해서도 공부할 수 있었다. 쿼리문의 where와 같은 동작을 하므로 장고에서 우리가 원하는 데이터 필터링을 할 때 위와 같이 사용해 데이터를 가져올 수 있었다. 물론 아직 ORM에 대한 전반적 이해도가 부족하기에 위 방식이 얼마나 효율적인지, 또 더 효율적인 방법이 없는지 공부할 필요성이 있다.

  1. 그밖에

    jwt, bcrypt, validation, etc 많은 기능들을 알기만해선 안되!

인증 & 인가 기능을 구현하기 위해 jwt, bcrypt를 사용했었다. 암호화, 부호화 그리고 복호화에 대한 개념을 잡을 수 있었고, 부족하나마 모듈을 사용하여 실제 로그인, 회원가입 기능을 구현해 볼 수 있었다. 그리고 이 두 모듈은 실제로 쓰이고 있는 기능이기에 조금 더 깊은 공부가 필요하다. 그뿐만 아니라 정규표현 식을 사용해 validator를 만들어봤다. 정규표현식도 단순히 '이렇게 쓰면 된다.'는 수준을 넘어 원하는 방식대로 쓰기에는 내 학습 수준은 여전히 낮은 상태이다. 원하는 결과를 위해 구글링과 복붙으로 가볍게 쓰고 넘어가서는 안 되기에 앞으로 꾸준한 학습이 필요한 부분들이다.


3. 후기 및 소감

Scrum 그리고 협업

  • 프로젝트를 시작하기에 앞서 멘토님이 이번 프로젝트를 통해 얻어가야 한다며 강조하신 것은 scrum이다. 무슨 나무 예시(제목이 기억나지 않음...)를 들며 설명하셨는데, 처음이니만큼 scrum 방식을 적용하여 프로젝트를 진행하기엔 어려움이 많았고, 프로젝트를 돌아보니 제대로 위 방식을 적용하지 못했단 생각이 들고, 프로젝트가 끝난 지금에서야 조금이나마 알 것 같다. (물론 내가 이해한 게 100% 맞는다는 확신은 아직 없지만...) 그래도 trello라는 좋은 플랫폼을 알게 되었고 다음 2차 프로젝트에서는 조금 더 scrum 방식에 맞게 진행할 수 있게 노력해야겠다.

  • 이번 프로젝트를 통해 글로만 배운 협업을 실제 경험을 통해 배울 수 있었다. (코딩 잘한다고 협업이 잘되진 않는다! 물론 코딩을 잘한다는건 아니지만...) 프로젝트 후반으로 갈수록 지쳐가는 몸을 가누기 힘들었고 또 뚜렷한 팀의 목표를 세워가지 못해 팀원들에게 미안함이 크다. 그리고 백엔드 팀원들의 진행 상황을 파악하며 완성도 높은 프로젝트 결과물을 위해 방향성에 대한 고민을 꾸준히 해야 했을 필요도 있었다는 생각이 든다. 하지만 긍정적이었던 점은 프론트 엔드의 blocker와 workflow에 대해 알 수 있었고, 원활한 소통을 위해 백 엔드인 나에게 필요한 점들을 배울 수 있었다.

마치며

나는 어떤 개발자가 되고싶은지 깊은 고민과 함께 삶의 방향성을 설계해가야겠다.

꽤 철학적인 질문이지만 많은 선배 개발자들의 블로그, 이력서를 보면 자신을 표현하는 한마디에 빠지지 않는 문장이 있다.

나는 어떤 개발자입니다

사실 개발자 일을 공부하고, 배우게 된 계기는 특별하진 않다. 구직활동을 시작해야 하는 시기에 때마침 현직에서 일하고 있는 두 친한 친구의 추천이 있었다. 믿을 수 있는 친구들의 추천에 가벼운 마음으로 시작한 공부였기에 나만의 가치, 철학을 직업에 녹여낼 생각은 해보질 못했다. 하지만 이번 프로젝트 종료와 함께 가볍지만은 않은 생각의 시간을 가질 필요성을 느끼게 됐다.

나는 어떤 개발자가 되고 싶은가?

profile
안녕하세요 :) 1년 차 Pythonist 백엔드 개발자 윤서준입니다.

2개의 댓글

comment-user-thumbnail
2021년 5월 4일

서준님 2차때는 더 깊은 성장 이루셨기를 바래요!
남은 기간도 응원합니다 🏅🏅🏅

1개의 답글