1. Intro
2. 팀 & 프로젝트 & 내 역할 소개
1) 팀
- 팀명 : Handwash
- 클론 웹사이트 : H&M
- 팀원 : BE 2명 + FE 4명
2) 프로젝트
- 클론 웹사이트 : H&M
- 기간 : 2021.10.6.화 ~ 2021.10.15.금
- 서비스 : 합리적인 가격, 패션 & 퀄리티 의류 - H&M
- 제품에 스타일과 기타 추천제품을 소개
- 장바구니, 즐겨찾기 기능을 제공
- 제품 필터링 기능을 제공
- 필수 구현 사항
- 회원가입, 로그인
- 메인 페이지
- 카테고리 목록
- 상품 목록 (filtering, sorting)
- 상품 상세페이지
- 장바구니 (백엔드의 경우 주문 API까지 추가 구현)
- 즐겨찾기
- 내가 구현한 기능 ✅
- bcrypt를 사용한 회원가입 기능
- JWT를 사용한 로그인 기능
- decorator를 통한 로그인 유효성 검사 기능
- 로그인한 유저의 즐겨찾기 상품 추가, 제거, 조회 기능
3) 내 역할
- 너무 한 게 없어서 '이런거까지 적어야하나 싶나...' 하는 것들은 패스...!
- 이번 프로젝트에 한 게 없었다는 건 다음 프로젝트에 할 게 많다는 것...!ㅎㅎ
- 트렐로 관리
- Daily Standup Meeting 주도
- 팀원 진행상황 체크 및 독려
- 적극적인 팀 단합
3. 사용한 기술 및 툴
1) 언어
2) 프레임워크
3) 툴
NOTION
: 일정 관리
SLACK
: 메신저
TRELLO
: 일정 및 회의록 관리
DBDIAGRAM
: ERD 모델링
MYSQL
: 데이터베이스
GIT & GITHUB
: 소스 및 버전 관리
POSTMAN
: Endpoint 확인
4. Modeling 및 데이터 구축 ✅
1) 모델링
- AQueryTool 이 유료화됨에 따라
DBdiagram
을 사용했다. 이 툴의 특징은 테이블 자체에 컬럼을 입력하는 것이 아니라 코드로 쳐가면서 입력하는 방식이었고 깔끔한 디자인과 어렵지 않은 사용법에 만족했지만 아쉬웠던 점은 테이블 자체에 속성값이 바로 드러나지 않는 것이었다. 때문에 null=True
같은 속성을 놓치거나 일일이 다시 확인하면서 모델링 작업을 수정해야 하는 번거로움이 있었다. 다음 프로젝트에는 Erdcloud
사용해보고 싶다
- 첫번째 팀과제, 위스타그램 이후 3번째 모델링 작업이었는데 절대 할 수 없을 것 같던 모델링 작업이 생각보다 흥미롭게 느껴졌다. 예전에는 단순히 테이블을 작성해서 테이블들의 관계만을 표현한다는 느낌이었는데 이번 프로젝트를 통해 테이블을 통해 웹 페이지의 모든 데이터들과 그것들의 관계를 표현할 수 있구나를 느꼈고 이런 부분이 흥미롭게 다가왔다. 물론 여전히 어려웠고 복잡했지만 첫번째 ERD 모델링 작업에 비해 보이는 것들이 많았고 이 자체로 더 공부하고 싶은 마음이 들었다
- 데이터를 테이블 안의 컬럼으로 관리할 것인지 테이블로 빼서 다룰 것인지도 처음에는 그냥 멘붕이었지만 이제는 조금 보이는 것 같다
- 동료이지만 사수 같았던 갓다빈님의 기억나는 조언 : 아무 홈페이지에 들어가서 그 페이지에서 백엔드가 다룰 수 있는 데이터는 무엇인지 생각해보고 더 나아가서 테이블로는 어떻게 표현할 수 있는지 생각해보면 많이 도움이 된다고 해주셨다. 이제 나는 개발자니까 사용자로서 페이지를 받아들이기 보단, 개발자로서 특히 백엔드 개발자로서 홈페이지를 바라보자!
2) 데이터 구축
numbers
앱으로 백엔드 팀원분과 전체 테이블 모델링 작업을 해놓았었고 product를 담당한 팀원분께 csv파일을 받았다. csv 폴더에는 상품 관련 데이터가 테이블별로 저장되어 있었고 같은 위치에 db_uploader.py
파일에서 각각의 파일을 insert하는 함수를 만들고 실행하여 데이터베이스에 저장했다
data
폴더는 .gitignore
파일에 저장하여 깃허브에 push되지 않도록 했다
5. 내가 구현한 기능 ✅
1) User
- 회원가입 : bcrypt를 이용한 비밀번호 암호화 구현
- 로그인 : JWT를 이용하여 토큰 발행
- 로그인 유효성 검사 : 로그인이 전제되어 있어야 하는 기능을 위해
2) Like
- 즐겨찾기 추가 & 삭제: 로그인된 유저를 확인하고 요청에서 상품의 id값을 받아 존재 여부를 확인한 후에 DB에 없는 데이터라면 즐겨찾기에 추가, 있는 데이터라면 즐겨찾기에서 삭제하는 로직 구현
- 즐겨찾기 전체 목록 조회 : get함수를 활용하여 해당 유저의 즐겨찾기 전체 목록 반환 로직
6. Trello
- 익숙하지 않은 툴이나 새로운 것에 빠르게 적응하여 활용하는 것도 능력이라는 것을 배웠다. 새로운 것을 받아들이는 것이 느린 나에게 있어서 이런 점은 꽤나 도전적이었다. 가장 좋은 방법은 부딪히며 배우는 것이었다. 두려움에 머뭇거리기보다 이것저것 가지고 놀아보면서 익숙해지도록 만드는 것이 빨리 적응하는데 좋은 방법인 것 같다
- 초반에 Trello 활용이 수월하지 못했다. 항상 팀원들이 물리적으로 가까이 있었고 급한 내용은 슬랙으로 주고 받으며 해결했기에 Trello를 적극적으로 활용하지 못한 것 같다. 하지만 daily standup meeting의 내용이나 프로젝트 전반에 대한 관리는 Trello를 통해 기록하는 것의 장점을 점차 익히게 되었다. 다음 프로젝트에는 트렐로를 좀 더 적극적으로 활용할 수 있을 것 같다
- 내가 뭘 잘했고(성공했고), 뭘 실패했고, 뭘 모르는지 구분하여 기록 추가
- Backlog, this week, in progress, done(머지 대기중, 머지 완료), meeting note, API 자료 등
6. 기록하고 싶은 코드 ✅
1) 즐겨찾기 추가 & 삭제
내가 기존에 작성한 코드
리뷰받고 수정한 코드
기존에 작성한 코드 :
request 에서 ‘product_id’를 받는데,
해당 키값이 안들어오면 키에러
해당 키값은 있지만 그 data에 해당하는 id값이 Product 객체에 없어도 에러
있다면 product라는 변수에 그 객체를 생성해서 담고,
Like 테이블에서 조건에 해당하는 객체가 있으면(=이미 즐겨찾기가 되어 있는 경우) 삭제
코드 리뷰 받고 수정한 코드 :
get_or_create( ) 메소드를 통해 10줄 가량 되는 긴 코드가 단 3줄로 줄여지는 것을 보고 다양한 메소드를 익히고 적절하게 활용하는 것이 얼마나 중요한지 배울 수 있었다
2) 즐겨찾기 전체 목록 조회
내가 기존에 작성한 코드
리뷰받고 수정한 코드
처음엔 like 테이블에서 user 테이블의 id값을 받아오려고 했었는데 이렇게 하기보단 product 테이블을 통해 key값들을 바로 불러와도 된다는 리뷰를 받고 수정했다. 코드에 대한 가독성도 좋아지고 성능 개선에도 도움이 된다는 것을 알 수 있었다
7. 후기
1) 협업
- 내가 할 수 있는 일과 능력 밖의 일을 빠르게 판단하고 할 수 있는 일에는 머뭇거리지 말자.
- 프론트와 백 서로가 이해하기 쉽게 소통하려는 노력을 하자
- 가장 힘들었던 건 팀에 도움이 되지 못하는 내 실력을 바라보는 일이었으니... 다음 프로젝트에서는 조금 더 도움이 되는 팀원이 되도록 노력하자!!
2) 좋았던 점
- 가장 좋았던 점은 두 명의 롤모델이 생겼다는 것이다.
첫번째 롤 모델은 기술적으로 정말 잘한다고 생각했던 팀원이었는데 2주동안 매일 붙어있으면서 그 사람이 어떻게 문제를 해결하고 로직을 구현하고 개발자로서 어떤 시야를 갖고 있는지 등을 배울 수 있었다는 것이다. 동료이지만 사수같은 느낌이었고 일적으로 정말 멋있다라는 생각을 들게 했다. 내가 기술적으로 성장하고 싶게 만드는 자극을 주는 동료였다.
두번째 롤 모델은 위코드의 슬로건 중에 하나인 '함께 일하고 싶은 개발자'를 실제로 몸소 보여준 팀원이다. 이제는 이 추상적이었던 문구가 그 사람으로 오버랩 되어버렸다. 여러 요소중에서도 극한의 상황에서 보여지는 인성이 가장 인상깊었고 어쩌면 내가 되고 싶은 개발자로서의 나의 모습이 아닐까 하는 생각이 든다
3) 배운 점
- 프로젝트의 전반적인 과정을 알게 되었음
- python shell에 ORM 최대한 많이 찍어보면서 로직짜기
- API 명세 작성법
- 데이터 구축 과정과 방법
- Trello 사용법
- Github 익숙해지기 (60~70%)
다음 프로젝트에는 더 많은 시간을 투자하고 더 많은 기능을 구현해보자!