Wesop은 스킨, 헤어, 바디 케어 제품을 판매하는 사이트인 이솝(Aesop)을 클론 코딩한 사이트이다.
Wesop: GitHub Repository
이 중 내가 구현한 사항은 1, 2, 3번이다.
메인 페이지, 로그인/회원가입 기능을 구현했다.
setTimeout()
함수를 이용해 3초간 띄우도록 구현했다.js 파일과 scss 파일(필요에 따라 data.js 파일 추가)을 컴포넌트 이름의 디렉토리별로 따로 관리했다.
GitHub
기능별로 브랜치를 생성하여 각자의 브랜치에서 작업했다. variables.scss
등 공용 파일의 수정 사항은 공용 브랜치를 하나 생성하여 git conflict가 발생하지 않도록 했다.
Trello
Backlog
, This Week(To Do)
, In Progress - Not Merged
, In Pull Request
, Done - Merged
섹션으로 카드를 분류하여 프론트엔드/백엔드 및 개인별 진행 상황을 공유했다.
Notion
Google Spreadsheets
커머스 사이트의 플로우를 이해할 수 있게 되었다.
조건부 렌더링에 익숙해졌다.
props
혹은 state
로 조건을 관리하고, 조건부로 특정 컴포넌트 혹은 특정 요소를 렌더링할 수 있게 되었다.className
을 조건부로 부여하여 스타일을 지정하거나, 같은 컴포넌트의 className
을 props
로 각각 다르게 부여하여 스타일을 각각 다르게 줄 수 있게 되었다.동적 라우팅에 대해 이해하게 되었다.
state
를 이용해 변수화한 query parameter
로 API를 호출함으로써 필터링을 구현할 수 있다는 것을 알게 되었다.path parameter
로 구현했다. 각각의 상품에 부여된 product_id를 이용해 상품을 클릭하면 해당 상품의 URI(/product/12
)로 이동하도록 구현했다.query parameter
로 구현했다. 서브 카테고리를 클릭하면 해당 카테고리의 URI(?categoryId=2
)로 이동하며, 해당 카테고리의 상품 목록 페이지에서는 useLocation
으로 현재 페이지의 query string
을 불러와 API 주소를 호출하여 데이터를 받아 오는 방식으로 구현했다.프로젝트 중 나는 다른 팀원들의 질문을 많이 받았는데, 그때마다 대충 대답해 주는 것이 아니라 같이 코드를 살펴보거나 흐름을 이해하며 함께 블로커를 해결하려 노력했다. 팀원들이 먼저 질문해주지 않았다면 다른 팀원들이 다른 기능을 어떻게 구현하고 있는지 자세히 알지 못했을텐데, 팀원들의 질문을 함께 해결하는 과정에서 내가 작성한 코드뿐만 아니라 다른 팀원이 작성한 코드와 사용한 로직을 살펴볼 수 있었고 전체적인 흐름을 이해할 수 있었다. 또한 질문에 대답해주는 과정에서 내가 알고 있는 지식을 설명하며 더 공고히 할 수 있었고, 나도 답하기 어려운 질문은 함께 검색하고 찾아보며 내 지식을 더욱 확장하는 기회를 가질 수 있었다.
나는 혼자 작업할 때 계획을 잘 세우지 않고 하는 편인데, 팀으로 작업할 때는 계획을 세우고 이를 수시로 공유하는 것이 매우 중요함을 깨닫게 되었다. 내가 계획을 구체적으로 공유하지 않고 작업을 진행해서 다른 팀원과 같은 컴포넌트를 같은 방식으로 수정하는 일이 발생했었기 때문이다. 이런 일을 방지하기 위해서는 daily stand-up meeting을 통한 소통 뿐만 아니라 trello 등의 툴을 적극 사용해 나의 작업 계획 및 진행 상황을 팀원들과 공유해야겠다는 생각이 들었다. 다음 프로젝트에서는 trello의 체크리스트, 마감 기한 설정 등의 다양한 기능을 더욱 적극적으로 활용해 보아야겠다.