Wecode 2차 프로젝트 후기(男의집)
🚩 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
- Development tools
-
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구현
- 호스트가 만든 프로그램 상세페이지 API 구현 / programs.app 안에서 작성
- 리스트 컴프리헨션을 이용하여 상세페이지에 필요한 Data들을 전달하는 로직 구현
- 카카오 API를 이용한 소셜로그인 후 상세페이지에 필요한 유저 Data를 전달 하는 로직 구현
- 리스트 컴프리헨션을 이용하여 상세페이지에 필요한 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주 동안의 기간에 함께 한 남의집 프로젝트 동료분들 정말 고생하셨고 감사했습니다!!
Author And Source
이 문제에 관하여(Wecode 2차 프로젝트 후기(男의집)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sae0428/Wecode-2차-프로젝트-후기男의집저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)