wecode 2차프로젝트(Stay Memory) 회고록

이찬영·2022년 3월 5일
1

1. 🙇🏻프로젝트 소개

좋은 잠자리 문화를 선도하고 있는 STAY를 큐레이팅하는 여행 플렛폼 STAYFOLIO 클론 프로젝트 입니다.
짧은 프로젝트 기간 동안 개발에 집중할 수 있도록 STAYFOLIO 만의 감성적인 UI와 기획을 일부 참고하여 숙박 플랫폼 서비스를 구현하였습니다.
숙박업 서비스를 제공하는 사이트 특성상 다양한

2. 팀원 구성 및 프로젝트 기간

Front-end : 옥채현 ,이가윤, 이석호
Back-end : 김재엽, 이찬영
🗓 : 2022.01.10. ~ 2022.01.21.

3. 구현페이지

  1. 메인페이지
  2. 상세페이지
  3. 로그인페이지
  4. 어드민페이지

4. 기술스택

  • Python
  • Django
  • MySQL
  • AWS(EC2,RDS, S3)

5.구현기능

  1. user
  • 로그인, 회원가입: 카카오 로그인 API를 활용하여 로그인 기능 구현, 회원 정보가 없을 시 회원가입 진행
  • 회원 정보를 조회하는 기능
  1. stays
  • 주어진 조건에 맞는 스테이 목록을 조회하는 기능(ME)
  • 상세페이지에 필요한 정보를 조회하는 기능(ME)
  • 숙박 예약 정보를 확인하고 가능 날짜를 조회하는 기능(ME)
  • 주어진 날짜에 맞는 숙박료를 계산하는 기능
  1. reservations
  • 예약 정보를 조회하는 기능(ME)
  • 예약 요청 시 정보를 DB에 기입하는 기능
  1. admins
  • 어드민이 소유한 숙박 정보를 조회하는 기능
  • 어드민이 소유한 숙박 정보를 수정하는 기능(이미지의 경우에는 S3에 업로드)
  • 어드민이 소유한 숙박 정보를 삭제하는 기능

6. 좋았던 점 😏

팀원과 소통하며 부족한점을 채우는 방법을 배울 수 있었다.

  • 1차프로젝트에는 여러가지의 난관을 마주하면서 어려움이 많았다.(코로나로 인한 팀원의 부재 및 소통의 어려움)
  • 이번에 새롭게 만난 팀에서 트렐로를 통한 적절한 소통 방식을 배울 수 있었다.
  • q객체를 이용한 다중 필터링에 대해서 공부 할 수 있었다.
class StayListView(View):
    def get(self, request):
        try:
            city_name      = request.GET.get('city', None)
            check_in       = request.GET.get('checkin', None)
            check_out      = request.GET.get('checkout', None)
            room_min_price = request.GET.get('minprice', 10000)
            room_max_price = request.GET.get('maxprice', None)
            category       = request.GET.get('category', None)
            max_num_people = request.GET.get('adult', None)            
            sorts          = request.GET.get('sort','id')

            q=Q()
            
            if city_name:
                q &= Q(state=city_name)

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

            if max_num_people:
                q &= Q(max_people__gte=max_num_people)
                
            if room_max_price:
                q &= Q(price__lte=int(room_max_price))
                
            if room_min_price:
                q &= Q(price__gte=int(room_min_price))

            stays = Stay.objects.all()
            
            stays = stays.annotate(price=Min('room__roomprice__cost__price'))

            if check_in and check_out:
                if not include_weekday_boolean(check_in, check_out):
                    stays = stays.annotate(price=Max('room__roomprice__cost__price'))
            
            stays = stays.annotate(max_people=Max('room__max_num_people'), base_people=Max('room__base_num_people'),\
                                   min_price=Min('room__roomprice__cost__price'), max_price=Max('room__roomprice__cost__price'))\
                                   .filter(q).order_by(sorts)
            
            if check_in and check_out:
                stays = stays.exclude(room__reservation__check_in_date__gt=check_out, room__reservation__check_out_date__lt=check_in)

            result = [{
                'id'           : stay.id,
                'hotelNameKor' : stay.name,
                'price'        : f"{convert_price(stay.min_price)} ~ {convert_price(stay.max_price)}",
                'baseNum'      : stay.base_people,
                'maxNum'       : stay.max_people,
                'stayType'     : stay.category.name,
                'img'          : stay.thumbnail_url,
            }for stay in stays]

            return JsonResponse({'data' : result}, status=200)

        except KeyError:
            return JsonResponse({'message' : 'KEYERROR'}, status=401)

        except JSONDecodeError:
            return JsonResponse({'message' : 'JSON_DECODE_ERROR'}, status=400)
        
        except FieldError:
            return JsonResponse({'message' : 'Bad_Request'}, status=404)
  • 이번에는 새롭게 RDS와 S3를 사용하며 aws배포에 관한 경험을 해볼 수 있었다.

  • 철저한 model작성을 통해서 단 한번의 수정이 없이 진행 할 수 있었다.

  • 1차때 학습했던 위기에 맞딱드려 이겨내는 법을 성장할 수 있었다.
    어려움을 만났을때, 차분하게 구글링하면서 문제를 해결할 수 있는 능력을 기를 수 있었다.

  • 잘하는 사람과 협업을 하며, 모르는 개념을 탐구하고 학습하는 방법을 배우고 성장하였다.

7. 아쉬웠던 점 😥

  • q 객체를 이용한 필터링을 위한 코드작성을 하느라고, 좀더 새로운 기능을 구현하지 못한점이 아쉬웠다.
  • 서버 부하 테스트를 진행을 해보지 못한점이 아쉬웠다.
  • 테스트 코드를 작성할시에 integration test code 까지 작성해보지 못해서 아쉬웠다.
  • api 문서화를 작성하였으나, 코드 작성 속도 기한을 계속해서 맞추지 못해서 전날에 와서 완성한것이 아쉬웠다.

8. 느낀점

처음으로 나 혼자가 아닌 협업을 하면서 requirements.txt에 중요성도 느끼면서 소통이 무엇인가를 배울 수 있었다. csv 파일과 db관리에 대한 자신감을 갖고 진행하였으나, git rebase, query같은 기본적인 지식의 부족에 의해서 어려움이 있었다. 기본기가 가장 중요하다는것을 무엇보다도 깨닫는 프로젝트였다.

그리고 같이한 동료와 팀원들에게도 감사하다는 인사를 전하고 싶다. 부족한 부분을 알려주고 도와주면서 포기하지 않게 끝까지 함께하면 된다는 정신을 알려준 팀원들에게 너무 감사하고 사랑한다는 말을 전하고 싶다.

나는 개발자로써 가장 중요한것은 "같이 일하고 싶은 사람이 되는것" 이라고 생각한다. 그러기 위해서 꾸준히 기본기를 쌓으면서 실력을 꾸준히 성장 시켜야 한다는것을 느꼈다.

마지막으로 내 인생에서 새로운 전환점이 될 프로젝트를 같이한 팀원들에게 다시한번 감사의 인사를 전하고 싶다.

9. git hub 주소

Stay Memory back-end주소

profile
개발을 탐구하자

0개의 댓글