1차프로젝트
이후 2차프로젝트
와 기업협업
을 모두 진행했었다.
그동안 너무나 바빴다. 아쉬웠던 점도 많았고 내가 성장할 수 있는 점도 많았다.
tools
frontend
Planning meeting
팀원이 모여 개발의 전반적인 기획 컨셉을 정하고 충분한 소통을 거쳐 해당 내용을 노션에 기록
Daily Standup meeting
오전 10시부터 10시 30분까지 진행된 스탠드업 미팅에선 어제한것 / 오늘할것 / 블로커들을 공유하고 각자의 프로젝트로 들어갔다.
Retrospective Meeting
프로젝트가 끝이나고 각자 아쉬웠던 부분들을 다시 금 생각해보게 되는 계기들을 정리해 노션 회의록에 정리해두었다.
(상세페이지 및 리스트페이지)
1. 리스트페이지 및 상세페이지 레이아웃
2. 쿼리스트링 활용을 통한 리스트페이지 다중필터링 기능 구현
3. 쿼리스트링 활용을 통한 리스트페이지 정렬기능 구현
4. 리스트페이지 필터 드롭다운
5. 상세페이지 캐러셀
6. 상세페이지 관심상품, 시세모달 모달창 내외부 데이터 연동
7. 상세페이지 구매정보 드롭다운 구현
8. 상세페이지 연관상품 구현
1차 프로젝트때 제대로 해보지 못했었던 쿼리스트링으로 다중 필터를 구현해볼 수 있었다. 구글링 구글링 무한 구글링을 하면서 이것저것 찾아보았었는데
const FILTER_LISTS = [
{
filterType: ['author', '작가'],
idNameList: [
{ 1: 'Kathryn Rice' },
{ 2: 'Antonio Oneal' },
{ 3: 'Dalton Cuevas' },
{ 4: 'LindSay Martin' },
{ 5: 'Emily Clark' },
],
},
{
filterType: ['theme', '테마'],
idNameList: [
{ 1: '추상화' },
{ 2: '구상화' },
{ 3: '팝아트' },
{ 4: '입체주의' },
{ 5: '동양화' },
],
},
{
filterType: ['year', '연도'],
idNameList: [
{ '1970-01-01~1979-12-31': '1970년대' },
{ '1980-01-01~1989-12-31': '1980년대' },
{ '1990-01-01~1999-12-31': '1990년대' },
{ '2000-01-01~2030-12-31': '2000년대' },
],
},
{
filterType: ['price', '가격'],
idNameList: [
{ '0-100000': '10만원 이하' },
{ '100000-300000': '10만원 - 30만원 이하' },
{ '100000-500000': '30만원 - 50만원 이하' },
{ '500000-900000000000': '50만원 이상' },
],
},
{
filterType: ['size', '사이즈'],
idNameList: [{ 1: 'Small' }, { 2: 'Medium' }, { 3: 'Large' }],
},
];
useEffect(() => {
const filterQuery = makeFilterQuery(productFilters);
navigate(`/list${filterQuery}`);
}, [navigate, productFilters]); //완성된 쿼리스트링을 navigate훅을 사용해 페이지 전환
const handleProductFilter = (e, filterTypeQuery) => {
const isAlreadyFilter = productFilters[filterTypeQuery].includes(
e.target.name
); //이미 productFilters에 카테고리에 안에 내부데이터가 있는지 확인해줌
const newQuery = isAlreadyFilter
? productFilters[filterTypeQuery].filter(el => el !== e.target.name)
: [...productFilters[filterTypeQuery], e.target.name];
//isAlreadyFilter를 가지고 productFilters에 카테고리에 안에
//내부데이터가 있는지 확인해주고 걸러냄
setproductFilters(prev => ({ ...prev, [filterTypeQuery]: newQuery }));
//만약에 새로운 카테고리 영역에 데이터가 들어온다면 배열에 추가
};
const makeFilterQuery = productFilters => {
let query = '';
for (let filterType in productFilters) {
const filterIds = productFilters[filterType];
//백엔드에 보내줄 id값
if (filterIds.length > 0) {
query += `&${filterType}=${filterIds.join(`&${filterType}=`)}`;
} //쿼리생성
}
return query.replace('&', '?'); //쿼리가 &...로 시작하므로 첫번째 &를 ?로 바꿔줌
};
여러가지 로직을 짜 볼 수 있었던 점 : 크림 사이트를 분석하면서 웹이 굉장히 트렌디 하다고 느꼈었다 특히 여러개의 버튼을 어떤식으로 처리해야하는지 이러한 로직들에 고민해 볼 수 있는 기회가 너무나 좋았다. 또한 다중 필터기능을 구현해보면서 정말 좋은 로직을 짜야 원할히 데이터를 잘 받아 올 수 있을 것 같다고 생각이 들었다.
원활한 통신경험 : 프로젝트를 진행하면서 백엔드 강일님과 도운님 두분과 함께 통신을 했어야 했다. 1차 프로젝트의 경우 백엔드가 희택님 밖에 없어서 원할히 통신이 이루어 지지 않았다. 하지만 이번 프로젝트에선 강일님 도운님과 지속적인 소통을 하면서 서로 원하는 데이터 방식들에 의견을 맞춰가면서 로직도 짜보고 받아온 데이터를 가공해서 써보기도 하면서 진행하니 훨씬 수월했다.
라이브러리에 대한 생각 : 캐러셀 라이브러리를 사용해보면서 느꼈던 점은 생각보다 라이브러리를 잘쓰기 위해서는 JS에 대한 깊은 지식이 있어야한다. 라이브러리가 편한 것은 맞지만 모든 세팅값이 우리가 그려내고자 하는 UI와 다를때 과연 어떻게 접근해서 어떤식으로 고쳐서 써야하는지 많이 찾아보았다. 기본적으로 라이브러리 공식문서를 잘 읽어야하는것은 기본이고 구현과정에서 기본적인 JS로직도 잘 짜야 내가 원하는 UI대로 나온다고 느끼게 되었고 이러한 경험들은 다른 라이브러리를 쓰는과정에서 많은 경험이 될 것 같다.