🚩 References
이 프로젝트는 남의집 사이트를 참고하여 학습목적 으로 만들었습니다.
이 프로젝트에서 사용한 이미지는 모두 unsplashed 에서 가져온 이미지입니다.
저는 백엔드 개발자로 이 프로젝트를 진행하였습니다.
男의집은 남의집 사이트를 모티브로 하여 진행한 클론프로젝트로
남의집은 자신의 공간에서 모임을 주최하고 이끌어갈 호스트를 중심으로
취향이 맞는 사람들을 연결하고, 연결된 사람들은 가정집, 작업실, 동네가게 등 모임이 진행되는 공간에 모여 공통된 관심사로 대화하며 취향을 나누는 커뮤니티 사이트입니다.
男의집 Team = {
"Front-end" : ["김상훈", "황성재", "김태영"],
"Back-end" : ["박세용", "고민혁", "유민혁"]
}
Project Github
Development period
Technologies stack(Back-end)
Collaboration tool
호스트를 중심으로 모임을 주최하고 공통된 취향을 서로 나누는 커뮤니티 사이트인 남의집 사이트로 클론프로젝트를 진행함으로써 기획단계에서의 데이터베이스 모델링, KaKao API를 이용한 소셜 로그인(회원가입동시진행), 메인페이지 및 카테고리 중복 필터링, 프로그램 상세페이지, 호스트가 프로그램 등록, 프로그램 신청 예약페이지, 일반유저에서 호스트를 등록하는 페이지 등 각 API 기능들을 구현함으로써 개발역량을 기르는것을 목표로 하였습니다.
다음 구현사항중에서는 색깔표시가 된것이 제가 맡은 부분입니다!
- 메인페이지 API
- 프로그램 상세페이지 API
- 소셜로그인(KAKAO) API
- 호스트를 등록하는 API
- 호스트가 프로그램을 만드는 API
- 예약페이지 API
진행과정
- 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명이서 함께 모여서 의견을 조율하며 모델링을 하였습니다.
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객체를 공부하면서 시간을 많이 쓰게되어 못하게 된 것 같다.
나중에 개인프로젝트를 하게 되면 꼭 해보고 싶은 기능이고 그것을 구현함으로써 스스로 더 많이 배우겠다고 이글을 쓰면서도 다짐할 것이다!
1차 프로젝트를 하면서 열심히 삽질을 하고 다양한 에러와 고민을 거친 덕분에
2차 프로젝트를 진행하면서는 기능구현과 프론트와의 통신에서 좀 더 수월하게 할 수 있었던 것 같다.
다만, 이로 인해서 1차때보다는 노션페이지나, 트렐로의 활용이 조금 미흡해졌다.
경험을 통해 배운것들은 정말 많은 도움이 되었고, 나 스스로도 조금씩 더 성장해나감을 느끼는것은 매우 좋았다.
하지만 그로인해서 다른것들에 조금 미흡해질수 있다는 것을 깨닫게 되었고 이런부분을 보완하면
조금씩 성장해나가면서도 놓칠수있는 사소한 것들을 같이 가져갈 수 있음을 조금이나마(?) 깨닫게 된 것 같다.
2차프로젝트를 끝으로 더이상의 동료와 함께하는 오프라인에서의 협업프로젝트는 없다는게 매우 아쉽고 슬프다..
또 함께하는것에 대해 많이 생각하게 된 것 같다.
함께하면 스스로 하지못했던것들을 할 수 있게되고,
나 역시 동료들 에게 그런 도움을 줄 수 있는 사람이 될 수 있다고 느꼇다.
혼자하는것보다는 함께하는게 더 나은 결과물을 만들어 낼 수 있고,
나의 문제점을 좀 더 객관적인 시선에서 동료에게 도움 받을 수 있고,
그로 인해 나는 더 성장하게 된다.
이렇게 함께 하는 과정에서 만들어 낸 결과물은 100% 만족하지 못하더라도
"그래도 함께 해냈다" 라는 보람을 느끼게 해주고 또 뿌듯해진다.
약 2주 동안의 기간에 함께 한 남의집 프로젝트 동료분들 정말 고생하셨고 감사했습니다!!