Wecode 2차 프로젝트 후기(男의집)

seyong·2022년 3월 17일
0

Project

목록 보기
3/3
post-thumbnail

🚩 References

이 프로젝트는 남의집 사이트를 참고하여 학습목적 으로 만들었습니다.
이 프로젝트에서 사용한 이미지는 모두 unsplashed 에서 가져온 이미지입니다.
저는 백엔드 개발자로 이 프로젝트를 진행하였습니다.

1. 프로젝트 소개 및 목적

📣 소개

男의집은 남의집 사이트를 모티브로 하여 진행한 클론프로젝트로
남의집은 자신의 공간에서 모임을 주최하고 이끌어갈 호스트를 중심으로
취향이 맞는 사람들을 연결하고, 연결된 사람들은 가정집, 작업실, 동네가게 등 모임이 진행되는 공간에 모여 공통된 관심사로 대화하며 취향을 나누는 커뮤니티 사이트입니다.

  • Team Member
 男의집 Team = {
 "Front-end" : ["김상훈", "황성재", "김태영"],
 "Back-end" : ["박세용", "고민혁", "유민혁"]
 }
  • Project Github

  • Development period

    • 2021년 12월 13일 ~ 2021년 12월 24일 (약 11일)
  • Technologies stack(Back-end)

    • Development tools
      • Python 3.8.1
      • Django Web Framework 3.2.9
      • bcrypt 3.2.0
      • PyJWT 2.3.0
      • MySQL
      • ERD : dbdiagram.io
      • AWS EC2, RDS
  • Collaboration tool

    • git, github
    • Trello
    • Notion
    • Slack

    🎞 데모 영상


목적 (Back-end 기준)

호스트를 중심으로 모임을 주최하고 공통된 취향을 서로 나누는 커뮤니티 사이트인 남의집 사이트로 클론프로젝트를 진행함으로써 기획단계에서의 데이터베이스 모델링, KaKao API를 이용한 소셜 로그인(회원가입동시진행), 메인페이지 및 카테고리 중복 필터링, 프로그램 상세페이지, 호스트가 프로그램 등록, 프로그램 신청 예약페이지, 일반유저에서 호스트를 등록하는 페이지 등 각 API 기능들을 구현함으로써 개발역량을 기르는것을 목표로 하였습니다.

2. 구현사항

다음 구현사항중에서는 색깔표시가 된것이 제가 맡은 부분입니다!

  • 메인페이지 API
  • 프로그램 상세페이지 API
  • 소셜로그인(KAKAO) API
  • 호스트를 등록하는 API
  • 호스트가 프로그램을 만드는 API
  • 예약페이지 API

훌룡한 팀원들과 함께 한 것들

  • dbdiagram.io 기반으로 팀원들과함께 데이터 모델링
  • 모델링 한것을 기반으로 app 을 어떤것을 만들지 함께 고민하고 선정
  • 각 app안의 models.py 작성 (모델링한것을 참고하여)
  • db_uploader.py 작성
  • CSV 파일 작성
  • 프론트와 통신할 때 맞출 공동 key 값 정하기
  • Slack | postman | Trello 를 통한 스크럼방식의 협업진행
  • 매일 아침 미팅을 통해 어제 한 일, 오늘 할 일, blocker 세 가지를 공
    유하며 팀원들과 미팅을 진행(Standup Meeting)

진행과정

  • Django project 초기세팅 ➡ DB 모델링 ➡ models.py 작성 ➡ 공동 key 값 작성 ➡ 각자 맡은 views.py작성 ➡ API 기능 정의서 작성 ➡ postman 및 httpie로 자가통신 ➡ 프론트와 통신 후 에러 고치기 ➡ 공동 key값 안맞는 부문 및 models.py 수정 ➡ CSV파일로 실제사용할 data업로드 ➡ 최종 통신 ➡ AWS EC2, RDS, S3 및 gunicorn 이용하여 서버배포

모델링

1차 프로젝트를 진행하면서 다양한 시행착오를 경험하였기 때문에,
2차 프로젝트 모델링은 1차때 보다 한결 더 수월하게 진행할 수 있었던 것 같습니다!
백엔드 3명이서 함께 모여서 의견을 조율하며 모델링을 하였습니다.

클릭시 좀 더 자세히 볼 수 있습니다!

내가 담당한 기능구현

  • 메인페이지 API / programs.app 안에서 작성

    • 메인페이지에서 호스트가 만든 전체 프로그램들의 목록을 전달하는 API구현

    • Q객체를 사용한 카테고리 중복선택 및 조건에맞는 필터링 로직 구현

    • 카테고리가 선택되어있는 상태에서도 필터초기화를 클릭하면 전체 프로그램들을 다시 보여주는 로직 구현

    • 쿼리스트링을 이용한 카테고리 필터링 및 엔드포인트 구현

  • 호스트가 만든 프로그램 상세페이지 API 구현 / programs.app 안에서 작성

    • 리스트 컴프리헨션을 이용하여 상세페이지에 필요한 Data들을 전달하는 로직 구현

    • 카카오 API를 이용한 소셜로그인 후 상세페이지에 필요한 유저 Data를 전달 하는 로직 구현

가장 기억나는 코드


class ProgramListView(View):
   def get(self, request):
       category_id  = request.GET.getlist('category_id', None)
       is_open      = request.GET.get('is_open', None)
       sort         = request.GET.get('sort', '-created_at')
       limit        = int(request.GET.get('limit', 100))
       offset       = int(request.GET.get('offset', 0))
       
       q = Q()

       if category_id:
           q &= Q(categories__in=category_id)         
       if is_open == 'True':
           q &= Q(start_date__gte=datetime.datetime.now())
       if is_open == 'False':
           q &= Q(start_date__lt=datetime.datetime.now())

       programs = Program.objects.filter(q).order_by(sort)[offset:limit+offset]
       
       results = [{
           'id'                 : program.id,
           'name'               : program.name,
           'description'        : program.description,
           'price'              : program.price,
           'address'            : program.address,
           'start_date'         : program.start_date,
           'thumbnail_image_url': program.thumbnail_image_url,
       } for program in programs]
       
       return JsonResponse({'result' : results}, status = 200)

내가 담당한 기능을 구현하면서 가장 기억하는 코드는 바로 Q객체를 이용한 카테고리 필터링 및 필터초기화 기능 이다.

그 이유는 가장 오래고민하였고, 해결하기까지 시간도 많이 소모했고, 이전에는 써보지못한 Q객체를 사용해보았기 때문이다.

당시 고민은

  • 어떻게하면 다양한 조건의 필터링을 구현할 수 있을까?
  • 서로 조건이 겹쳐친다면?
  • 어떻게 하면 최대한 깔끔하게 코드를 작성할 수 있을까?
  • 만약 나중에 더 많은 조건이 생긴다면 어떻게 간편하게 추가할 수 있을까?
  • 유지보수성을 최대한 고려하자.

이러한 고민끝에 Django 공식문서 및 구글링을 통하여 Q객체 라는 나의 고민을 해결해줄수 있는 방법을 찾게되었다.

터미널에서 shell로 들어가 직접 Q객체를 이용한 쿼리문을 연습해보면서
조건을 만족하는 코드를 작성하였고,

결국에는 프론트와 최종통신까지 성공하면서 만족하는 결과를 얻게되었다!



🎉 잘한 점

1. DB 모델링을 1차 프로젝트 때 보다 수월하게 한 것!

1차프로젝트 때는 모델링에 아직 익숙치 않고 공부를 많이 못하였기에 여러 시행착오를 많이 겪었는데, 2차 프로젝트 때는 좀 더 쉽고 정확하게 모델링을 하였다!
실력이 더 늘었다는것을 체감할 수 있어 더 좋았던것 같다! :D

2. 장고 쉘에서 좀 더 많이 쿼리를 날려볼수 있었던 것!

메인페이지와 상세페이지를 구현하면서 DB에 있는 Data들을 1차 프로젝트 때 보다 더 많이 만져보고 고민하며 Q객체를 공부했고, 그것을 실제로 코드로 구현해내어 성공한것!
이 때 스스로 정말 많이 칭찬한것 같다 ㅎㅎ

3. 프론트 쪽과 통신을 할 때 오류 발생시 프론트 입장에서 생각하여 함께 고민하여 오류를 해결한 것!

1차프로젝트 때 보다 프론트와 통신을 할 때 오류발생시 좀 더 수월하게 오류를 해결하였다! 각자 1차프로젝트로 인한 내공(?)이 쌓여서 인지는 몰라도
통신오류를 짧은 시간내로 해결하였고, 나 역시 백엔드의 입장에서만 생각하기 보다는 프론트쪽에서 어떻게 데이터를 요청할까 등, 프론트의 입장에서 좀 더 적극적으로 고민해보니 금방 해결을 할 수 있었던 것 같다!

4. git rebase를 통한 깔끔한 커밋이력 남기기

git rebase 세션을 통해 학습한 것을 실제로 프로젝트에 잘 적용시켰고,
커밋이력을 지저분하게 남기지않고 깔끔하게 작성한 것!




😥 아쉬운 점

1. Notion 과 Trello 를 좀 더 적극적으로 활용하지 못한 것

이번 프로젝트에서는 아무래도 1차프로젝트를 경험하고 난 후 진행되었기에 각자 맡은 기능구현에 좀 더 집중적으로 시간을 쏟았던 것 같다.
1차 프로젝트 때는 완전 처음 해보는 프로젝트라 처음부터 끝까지 함께 많이 소통하며 했던 반면,
2차 때는 1차때의 경험을 바탕으로 각자 어떤것을 해야할 지 스스로 잘 알게되었기 때문인 것 같다.
노션과 트렐로를 사용하였지만, 1차 프로젝트 때 보다는 좀 더 문서화 하지못한것과 적극적으로 이용하지 못한것이 개인적으로 아쉬웠다.

2. 추가 구현 사항을 하지 못한 것

내가 맡은 필수기능 외에 더 추가로 하고싶은 기능이 있었는데 (호스트가 만든 방에 좋아요를 누를 수 있는 것, 그리고 그것을 기반으로 하여 가장 많은 좋아요 수 를 받은 프로그램을 인기순으로 보여주고 그것을 필터링하여 카테고리로 만드는 것)
하지 못한 것이 개인적으로 아쉬웠다.
Q객체를 공부하면서 시간을 많이 쓰게되어 못하게 된 것 같다.
나중에 개인프로젝트를 하게 되면 꼭 해보고 싶은 기능이고 그것을 구현함으로써 스스로 더 많이 배우겠다고 이글을 쓰면서도 다짐할 것이다!




2차 프로젝트를 하면서 느낀 점

1차 프로젝트를 하면서 열심히 삽질을 하고 다양한 에러와 고민을 거친 덕분에
2차 프로젝트를 진행하면서는 기능구현과 프론트와의 통신에서 좀 더 수월하게 할 수 있었던 것 같다.
다만, 이로 인해서 1차때보다는 노션페이지나, 트렐로의 활용이 조금 미흡해졌다.

경험을 통해 배운것들은 정말 많은 도움이 되었고, 나 스스로도 조금씩 더 성장해나감을 느끼는것은 매우 좋았다.

하지만 그로인해서 다른것들에 조금 미흡해질수 있다는 것을 깨닫게 되었고 이런부분을 보완하면
조금씩 성장해나가면서도 놓칠수있는 사소한 것들을 같이 가져갈 수 있음을 조금이나마(?) 깨닫게 된 것 같다.

2차프로젝트를 끝으로 더이상의 동료와 함께하는 오프라인에서의 협업프로젝트는 없다는게 매우 아쉽고 슬프다..

또 함께하는것에 대해 많이 생각하게 된 것 같다.
함께하면 스스로 하지못했던것들을 할 수 있게되고,
나 역시 동료들 에게 그런 도움을 줄 수 있는 사람이 될 수 있다고 느꼇다.
혼자하는것보다는 함께하는게 더 나은 결과물을 만들어 낼 수 있고,
나의 문제점을 좀 더 객관적인 시선에서 동료에게 도움 받을 수 있고,
그로 인해 나는 더 성장하게 된다.
이렇게 함께 하는 과정에서 만들어 낸 결과물은 100% 만족하지 못하더라도
"그래도 함께 해냈다" 라는 보람을 느끼게 해주고 또 뿌듯해진다.



약 2주 동안의 기간에 함께 한 남의집 프로젝트 동료분들 정말 고생하셨고 감사했습니다!!

profile
# 불편함을 편리함으로 바꾸고싶은 주니어 Back-end 개발자

0개의 댓글