1차 프로젝트 후기 - 필리 클로닝

Sang Jun Lee·2020년 8월 9일
0

1. 프로젝트 소개

1차 프로젝트 영상

1) 주제

  • 설문을 통한 맞춤 영양제 추천 웹사이트 필리 클로닝 프로젝트
  • 첫번째 프로젝트로 django로 백엔드 API개발과 git을 활용한 협업

2) 구성원

3) 기간

  • 2020.07.20 ~ 2020.07.31 (2주간)

2. 적용 기술

  • Database Modeling
  • Mysql
  • AWS EC2, RDS, S3 활용
  • 크롤링 (selenium, BeautifulSoup)
  • django
  • Git & Github

3. 사이트 주요 기능

사이트 주요기능으로 직접 구현한 기능은 ▣, 팀원이 구현한 기능은 □로 표시

1) 회원가입 / 로그인 페이지

  • □ 회원가입 기능 - 이름에 한글만, email에 @ 꼭 들어가도록 password에 최초 5글자 이상, 대문자 들어가도록 적용
  • □ 로그인 - 로그인 정보 입력 후 가입자에 확인 후 jwt 암호화된 토큰 response

2) 설문조사

  • □ 질문 - 질문에 따른 세부질문등의 질문 로직 구성
  • □ 응답 및 결과 - 질문에 따른 응답에 따라 영양제 추천 로직 구성

3) 제품보기 / 제품 상세 보기

  • ▣ 제품보기 - 판매하는 전체 제품에 대한 내용 GET으로 받아 response. 장바구니에 담긴 제품은 담겨 있는 걸로 표시
  • ▣ 제품 상세보기 - 제품에 대한 상세정보 GET으로 받아 response. 전체보기, 상세보기 어디서든 제품이 담겨지고 담긴 제품은 표시

4) 장바구니

  • ▣ 장바구니 보기 - 회원가입한 사용자의 토큰값 확인 후 담긴 아이템 정보 response
  • ▣ 장바구니 수량변경, 비우기 - 수량 변경 내용 받아 저장 후 변경 내용 response, 비우기 POST 받아 비우고 빈 장바구니 정보 response

5) 결제

  • ▣ 결제 페이지에 사용자의 기본정보 response
  • ▣ 결제 정보(배송지, 카드번호 등)를 받아 저장 후 결제 확인 창에 결제 확인 정보 response, 동시에 장바구니 정보 삭제

6) 리뷰보기

  • ▣ 필리 사이트의 리뷰 자료 크롤링하여 데이터베이스에 저장, 리뷰보기 페이지 엔드포인트 구현, 무한스크롤 페이지로 크롤링시 페이지 다운 활용하여 진행

4. 기록하고 싶은 코드

class PaymentTogo(View):
    @LoginConfirm
    def post(self, request):
        data          = json.loads(request.body)
        personal_info = User.objects.get(id = request.user.id)
        cart_info     = Cart.objects.filter(user_id = request.user.id)
        item          = [data['products'][i]['name'] for i in range(len(cart_info))]
        items         = ','.join(item)
        rgb           = [data['products'][i]['backgroundColor'] for i in range(len(cart_info))]
        rgbs          = '-'.join(rgb)
        img           = [data['products'][i]['imgUrl'] for i in range(len(cart_info))]
        imgs          = ','.join(img)
        count         = [data['products'][i]['ea'] for i in range(len(cart_info))]
        counts        = ','.join(count)
        price         = [data['products'][i]['price'] for i in range(len(cart_info))]
        prices        = '-'.join(price)
        try:
            if data['card_kakao']=='credit':
                Payment(
                    name             = data['name'],
                    contact          = data['contact'],
                    post_number      = data['post_number'],
                    address_street   = data['address_street'],
                    address_detail   = data['address_detail'],
                    customer_request = data['customer_request'],
                    card_number      = data['card_number'],
                    expired_month    = data['expired_month'],
                    expired_year     = data['expired_year'],
                    birth            = data['birth'],
                    card_password    = data['card_password'],
                    user_id          = personal_info.id,
                    purchased_item   = items,
                    price            = prices,
                    count            = counts,
                    total_price      = data['totalPrice'],
                    points           = 0,
                    back_image       = rgbs,
                    pill_image       = imgs,
                    card_kakao       = data['card_kakao']
                ).save()
                
            elif data['card_kakao']=='kakao':
                Payment(
                    name     = data['name'],
                    contact          = data['contact'],
                    post_number      = data['post_number'],
                    address_street   = data['address_street'],
                    address_detail   = data['address_detail'],
                    customer_request = data['customer_request'],
                    card_number      = data['card_number'],
                    expired_month    = data['expired_month'],
                    expired_year     = data['expired_year'],
                    birth            = data['birth'],
                    card_password    = data['card_password'],
                    user_id          = personal_info.id,
                    purchased_item   = items,
                    price            = prices,
                    count            = counts,
                    total_price      = data['totalPrice'],
                    points           = 0,
                    back_image       = rgbs,
                    pill_image       = imgs,
                    card_kakao       = data['card_kakao']
                ).save()

            cart_info.delete()
            return JsonResponse({'message':'Thanks for giving us great opportunity to share pilly life. Be healty!'})
        
        except Exception as e:
            return JsonResponse({"message":f"{e}"})

사실 리팩토링도 많이 해야 하고 부족한 코드임에는 분명하다. 다만 상품을 결재하면서 여러 아이템을 구입하였을 때 하나의 리스트로 모아서 담아 하나의 로우에 하나의 결재 정보를 담아보았다. 결제 확인 창에서 볼 때는 다시 합쳐진 것을 나눠 보여주도록 하였다.

class MyPillyView(View):
    @LoginConfirm
    def get(self, request):
        payment_info = Payment.objects.filter(user_id = request.user.id).select_related('user')
        data_set = []
        pilly_set = []
        for i in range(len(payment_info)):
            result = Payment.objects.get(id=payment_info[i].id)

            items          = result.purchased_item.split(',')
            counts         = result.count.split(',')
            prices         = result.price.split('-')
            back_img       = result.back_image.split('-')
            img            = result.pill_image.split(',')
            total_price    = result.total_price
            user_name      = result.name
            address_street = result.address_street
            address_detail = result.address_detail
            card_number    = result.card_number
            method_payment = result.card_kakao

            if request.method == 'GET':
                for i in range(len(items)):
                    mypilly = ({'name' : items[i],
                    'price'            : prices[i],
                    'count'            : counts[i],
                    'back_image'       : back_img[0],
                    'pill_image'       : img[i],
                                })
                    data_set.append(mypilly)

                pilly= ({f'order_info' : data_set,
                'user_name'            : user_name,
                'total_price'          : total_price,
                'address_street'       : address_street,
                'address_detail'       : address_detail,
                'card_number'          : card_number,
                'method_payment'       : method_payment})
                data_set=[]
                pilly_set.append(pilly)

        return JsonResponse({'item_info':pilly_set,
                             'user_name':request.user.name,
                             'email'    :request.user.email,
                             'contact'  :request.user.contact})

5. 느낀점

1) 잘한 점
사실 프로젝트 시작하기 전까지도 많은 부분에서 개념을 못 잡고 있었다. 프로젝트를 하면서 모델링이나 POST, GET Method 등의 기본 개념을 확실히 이해할 수 있었다. 현재 서비스되고 있는 웹페이지의 상품보기, 상세보기, 장바구니, 결제, 리뷰보기등 전반적인 서비스에 대한 API를 작성하면서 자신감도 더욱 재미를 느끼게 되었다. 팀원들과 많은 소통을 하며 팀 협업이 무엇인지 나의 역할이 무엇인지도 다시금 생각하고 정리할 수 있었다. 백엔드 개발자가 무엇을 해야하고 어떻게 움직여야 하는지 빙산의 일각이겠지만 조금이나마 맛을 봤다고 해야할까...

또한 Git 과 Github을 좀 더 많이 활용해보고 부딛쳐서 많은 상황을 접했으면 좋았을텐데 스스로 정리하고 완벽한 상태로 하고자 한 부분이 좀 늦게 푸쉬하고 많은 피드백을 받지 못해 아쉬웠다.

3) 총평
2주라는 길다면 길고 짦다면 짦은 시간동안 해보지 않았던 프로젝트를 해보면서 개발자의 길이 어떤 것인지 아주 조금 맛을 보았다라고 생각한다. 실무에서는 어떤 코드로 어떻게 작성하고 또 일을 할지는 부딪쳐봐야 겠지만 분명한 것은 방법이 있고 그걸 찾을 것이고 해낼 수 있다는 것이다. 재미있게 하자 그것뿐이다!!

profile
Live now and Dream better tomorrow

0개의 댓글