Trello Link https://trello.com/b/37IIkVmJ/team-brokurly
Github Link https://github.com/wecode-bootcamp-korea/13-brokurly-frontend
Youtube Link https://www.youtube.com/watch?v=PfhrUruCmWU
한국의 신선 식품 전문 온라인 쇼핑몰인 Market Kurly를 클론 하는 프로젝트를 진행했습니다.
마켓 컬리는 수도권 한정으로 당일 주문 시 다음 날 새벽 배송되는 샛별배송 배달 서비스를 하고 있습니다.
신선한 식재료를 직접 장보러 가지 않아도 바로 받아서 먹을 수 있다는 장점을 가지고 있고 코로나 사태로 인해 이용자들이 많이 늘어난 사이트이기도 합니다.
brokurly
라는 이름으로 팀명을 정했습니다.2020.10. 19 ~ 2020. 10. 30 약 2주간 진행
Trello를 이용해서 각자 처음 구현할 기능들을 Backlog에
필요한 이미지들은 Design에
이번주 까지 할 일은 To Do (This Week)
현재 하고 있는 작업들은 Doing
그리고 Front와 Back간의 테스트 중인 부분은 Testing
위의 작업들이 완료되면 Done에 티켓을 작성해서 분류하였습니다.
기존에 state의 비동기적 특성때문에 일괄적으로 모아서 처리할수 있도록 setstate를 필요에 따라 콜백 방식으로 강제로 순서를 주어서 처리했었다. await setstate({})
!!! 라는 괴랄하기 짝이없는 코드를 많이 썼었다..
하지만 모든 것을 state로 관리하는 것이 아닌 필요한 경우는 내부 함수로 해결하는 방식으로 이를 처리하는게 훨씬 효율적이라는 것을 안뒤로 좀더 state도 명료해지고 간단해졌다.
동적 라우터를 이용하면서 페이지를 이동 시켜주기 위해서 history
를 push
해주거나 Link
기능을 써서 구현 했으나 주소만 바뀔뿐 제대로 데이터가 교환되지 않았다. 결과적으로 componentDidUpdate
를 통해 주소변화와 함께 render()
해주는 방식으로 구현! 조금더 componentDidUpdate
에 대해 이해할수 있었다
이번 Brokurly를 구현하면서 query string
을 정말 많이 썼는데 그중에서 기억에 남는 부분은 pagination
처리 부분이었다. 기억에 남는 부분은 백앤드에 query
를 자주 날리는 것이 한번에 데이터를 받아오는 것보다 훨씬 효율적인 방법이라는 것이었다. 이부분은 백앤드와 대화를 많이 했던 부분이었는데 처음에는 프론트에서 데이터를 전부 받아와서 그려주려고 했었던 저에게는 좀더 백앤드와 능동적으로 같이 할 수 있었던 부분중에 하나였다.
유독 이번 프로젝트에서는 유독 공통으로 겹치는 기능 등이 많았는데 이를 프론트인원들끼리 utils.js
라는 파일에 공통으로 관리했었다. 특히 기억에 남는 것은 setState
자체를 따로 관리하는 방법이었다. 당연히 state
가 없기 때문에 안될것이라 생각했지만 this
자체를 넘겨 주는 방식으로 setState
마저 따로 관리하면서 작업의 효율성을 확보할 수 있었다!
이번 프로젝트는 백앤드와 처음으로 합쳐서 같이 프로젝트를 진행하기때문에 조금더 특별한 프로젝트였다.
초반에는 Mockdata
를 전달해서 백앤드와 의사소통을 진행했었고 모델링이 정리된후에는 Backend쪽이 데이터 구조가 먼저 나왔기 때문에 모델링 정리 방식이나 들어오는 데이터의 형태 List
, Array
및 key
값 등 여러 부분들을 맞춰나가면서 진행하게 되었다.
이런 부분들은 커뮤니케이션이 전부였기 때문에 나중에 key
나 data구조를 맞추는 시간을 줄이기 위해 페이지 구현에 앞서서 항상 백앤드와 어떤식으로 갈지 의논한뒤 진행했었다.
이번 프로젝트에서는 이상하리만치 페이지를 완성하고도 merge 작업이 늦어지는 경우가 잦았다. 기본적으로 멘토님들의 리뷰 이후 승인이 나야 할수 있는 것이라 pull request
를 진행한 뒤에는 멍하니 기다릴 수 밖에 없었다.
하지만 팀원들끼리는 공통적으로 향후 merge
한 뒤 생길 conflict
에 대한 두려움이 있었고, 이부분에 대해 수동적으로 기다리기 보단 test repo
를 생성해서 적극적으로 대처하는 방향으로 의견을 모아서 진행했다.
이렇게 진행하면서 실제 main repo
에merge
일어나기전 페이지의 여러 충돌을 미리 알수 있어 미리 코드 수정 및 refactoring
을 진행할 수 있었고 추가적으로 test repo
에 여러 삽질을 하다보니 git
실력도 같이 일취월장할 수 있었다! 🙌 🙌 🙌
아래 사진은 치열한 삽질의 결과다.
테스트에서는 막 merge도 하다보니 터뜨리기도 하였기 때문에 생긴일...(feat. finally final test)
이번에는 특히나 커뮤니케이션이 중요했던 프로젝트였다. 앞으로도 그렇겠지만 가면 갈 수록 느끼는 것은 솔직하고 담백한 그리고 서로에게 자유롭게 demanding 하고 accept할 수있는 커뮤니케이션의 중요함이었다.
이부분은 앞으로도 더 서술할 일이 많을 것이라고 생각한다. 간단한 스타일 코드로 이번 프로젝트의 협업에 대한설명을 대신할까 한다. 하기의 코드는 협의를 거쳐 공통적으로 같이 썼던 flex style set
이다.
운이 좋았는지 아니면 나빴는지 모르겠지만(?) 여성분들이 많은 우리 기수에서 남자로만 구성된 희귀한 조합의 팀에 속하게 되었다. 그뿐만 아니라 우연히 다들 기수안에서 실력이 좋은(초보자들 중에서는...🤣) 사람들로 구성되게 된점은 분명 강점이었다.
하지만 그뿐이면 얼마나 좋았을까! 반대로 얘기하자면 열정이 넘치고 열심히 하는 만큼 본인이 하고싶은것, 개인의 성향을 내세울 수밖에 없는 리스크를 가진 조합이라고 생각도 되었다. 실제로 redux
를 적용하는 부분에 있어서는 분명 이른감도 있었고 위험도 있었다고 생각한다. 팀원 중 한사람이 적극적으로 redux
도입을 제안했었지만 굉장히 고민이 많이 되었던 이슈였다. 실제로 mentor분들도 이제 막 react는 2주도 안된 저희들에게 redux
는 이르다고 따로 언질도 있었을 정도였다.
하지만, 이번 프로젝트에서 만약 내 자신에게 칭찬해 주고 싶은점 한가지가 있다면 이러한 상황에 대한 접근이라고 하고 싶다. 초중학교 시절 정식으로, 그 이후에는 취미로써 꾸준히 Team sports를 해오면서 personal talent와 team chemistry의 충돌을 수없이 봐오고 경험해온덕에 이 부분에 대해 확실히 방향성을 가지고 있었던 터라 당황하지 않고 진행할 수 있었다.
건방질 수 있지만, 내가 가진 teamwork에 대한 가치관을 한마디로 정의하자면 이렇다.
팀을 위한 개인의 희생은 쉽다. 이에 반해 개인의 동기를 유지하며 팀 케미스트리를 만드는 것은 전혀 다른 차원의 문제다. 진정한 팀워크란 전자보단 후자쪽이다.
이부분에 대해선 정말로 할 말이 많지만 딴 길로 새는 것같아 자세한 히스토리는 기회가 되면 글로 남겨볼까 한다.
결과적으로 성공적으로 redux를 적용할 수 있었고 유종의 미를 거둘 수 있었다.
이제 또 하나의 프로젝트가 남아있다.
어떤 이야기가 그려질지 또 기대가 된다.
프론트에서 보여주는 마켓컬리정보들은 어디서 가져오시는거에요?