-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into 3-upload
- Loading branch information
Showing
9 changed files
with
480 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,265 @@ | ||
# Weatherfit_frontend_refactoring | ||
## 옷늘날씨 리팩토링 | ||
|
||
- 목차 | ||
1. 옷늘날씨 리팩토링의 목적 | ||
2. 팀원 소개 | ||
3. 개발 일정 | ||
4. 리팩토링을 하며 바뀐 협업 방식과 기술 스택 | ||
5. 변경된 페이지 디자인 | ||
|
||
## 1. 👔 옷늘날씨 리팩토링의 목적 | ||
|
||
- 한눈에 정보가 들어오지 않는 기존 디자인의 문제점 보완 | ||
- 기능 구현 위주로 프로젝트를 진행하며 발생한 문제점 보완 | ||
- 코드의 재사용성과 생산성이 떨어짐 >> 아토믹 디자인 패턴을 도입하며 앞의 문제를 해결 | ||
- 성능에 초점을 맞추지 못해 사용자 경험이 떨어짐 >> LIGHTHOUSE 등을 이용해 성능을 검사하며 프로젝트 진행 | ||
- 모든 피드 게시물을 불러와 보여주는 기존 페드 페이지의 데이터 로딩 방식이 SNS에 맞지 않을 뿐더러 사용자 경험을 떨어뜨림 >> React Query와 useInfiniteQuery로 무한 스크롤을 구현하여 해결 | ||
- Next.js에서 axios를 사용하면 데이터 캐싱 기능을 지원해주지 않기 때문에 성능이 떨어짐 >> Next.js에서 자체적으로 데이터 캐싱 기능을 지원해주는 fetch를 사용하셔 성능 개선 | ||
- Scss를 사용하면 클래스명이 겹처 스타일이 깨지는 경우가 발생 | ||
- Tailwind CSS를 사용하여 사전에 문제 발생 가능성 삭제 | ||
|
||
## 2. 👥 팀원 소개 및 담당 역할 | ||
|
||
<table align="center"> | ||
<tbody> | ||
<tr> | ||
<td align="center"><a href="https://github.com/nebulaBdj"><img src="https://github.com/nebulaBdj.png" width="100px;" alt=""/><br /><b>황동준</b></a><br /></td> | ||
<td align="center"><a href="https://github.com/kr-nius"><img src="https://github.com/kr-nius.png" width="100px;" alt=""/><br /><b>전주현</b></a><br /></td> | ||
<td align="center"><a href="https://github.com/hyeiis"><img src="https://github.com/hyeiis.png" width="100px;" alt=""/><br /><b>박혜원</b></a><br /></td> | ||
</tr> | ||
<tr> | ||
<td align="center">Frontend<br/>팀장<br/></td> | ||
<td align="center">Frontend</td> | ||
<td align="center">Frontend</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
|
||
> ### 황동준 | ||
🎨 **디자인** | ||
|
||
- 아토믹 디자인 패턴 총괄 | ||
- 전체 아톰 설계 및 디자인 패턴 프로세스 담당 | ||
|
||
📜 **페이지** | ||
|
||
- 피드 페이지 | ||
- 일반 회원가입 페이지 | ||
- 구글 회원가입 페이지 | ||
|
||
🦾 **기능** | ||
|
||
- 위치에 맞는 날씨 정보 가져와 화면에 띄우기 | ||
- 로그인 토큰 전역 관리 | ||
- 해시태그로 게시물 검색하기 | ||
- 카테고리 선택 시 선택에 맞는 게시물 보여주기 | ||
- 온도 설정 시 온도에 맞는 게시물 보여주기 | ||
- 검색 자동 완성 | ||
- 피드 게시물 무한 스크롤 구현 | ||
- 일반 회원가입 구현 | ||
- 구글 소셜 회원가입 구현 | ||
|
||
> ### 박혜원 | ||
📜 **페이지** | ||
|
||
- 업로드 페이지 | ||
- 상세 페이지 & 게시글 수정 페이지 | ||
- 메인 페이지 베스트 코디 확인 파트 | ||
|
||
🦾 **기능** | ||
|
||
- 날씨 정보를 포함하여 게시물 정보 전달하는 업로드 기능 구현 | ||
- 게시물 상세 정보 불러오기 | ||
- 로그인 토큰에서 사용자 닉네임을 가져와 사용자가 업로드한 게시물 구분하여 수정 기능 구현 | ||
- 가장 좋아요가 많이 눌린 게시물 3개 메인 페이지에 불러오기 | ||
|
||
> ### 전주현 | ||
🎨 **디자인** | ||
|
||
- 디자인 총괄 | ||
|
||
📜 **페이지** | ||
|
||
- 마이 페이지 | ||
- 로그인 페이지 | ||
- 메인 페이지 날씨 확인 파트 | ||
|
||
🦾 **기능** | ||
|
||
- 사용자가 좋아요 누른 게시물 불러오기 | ||
- 사용자가 올린 게시물 불러오기 | ||
- 로그인 기능 구현 | ||
- 게시물 상게 페이지에 댓글 기능 구현 | ||
- 현재 날씨 정보 불러와 메인 페이지에 띄우기 | ||
|
||
## 3. 🛠️ 개발 일정 | ||
|
||
- 리팩토링 디자인 | 1/2~10 (완) | ||
- 디자인 분해(Atom, Molecule, Organisms, Page) | 1/10 ~ 11 (완) | ||
- 기본 개발 환경 설정 | 1/11 ~ 15 (완) | ||
- 역할 분배 후 개발(+ 백엔드 연결) | 1/15 ~ 2/10 (진행 중) | ||
- 페이지 성능 테스트 및 개선 | 2/11 ~ 13 | ||
- 완료 | ||
|
||
## 4. 🙏 기술 스택 및 협업 방식 | ||
|
||
### 개발 환경 | ||
|
||
- 하나의 Organisms 완성 후 테스트 및 코드리뷰를 진행하여 기능의 완성도 및 성능을 높이고 있습니다. | ||
- esLint, Prettier를 통해 코드 컨벤션을 통일하였고, 깃 컨벤션 규칙을 정해서 깃 PR을 깔끔하게 관리하고 있습니다. | ||
- 깃허브에서 제공하는 칸반 형식의 Project를 이용하며 서로의 작업 진행 속도를 파악하고 있습니다. | ||
|
||
### 기술 스택 | ||
|
||
<table> | ||
<tr> | ||
<td align="center">Front-End</td> | ||
<td> | ||
<span><img src="https://img.shields.io/badge/next.js-000?style=flat-square&logo=next.js&logoColor=white"></span>  | ||
<span><img src="https://img.shields.io/badge/tailwindcss-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white"></span>  | ||
<span><img src="https://img.shields.io/badge/reactquery-FF4154?style=flat-square&logo=reactquery&logoColor=black"></span>  | ||
<span><img src="https://img.shields.io/badge/recoil-FF4655?style=flat-square&logo=recoil&logoColor=white"></span>  | ||
</td> | ||
</tr> | ||
<tr> | ||
<td align="center">Collaboration</td> | ||
<td> | ||
<span><img src="https://img.shields.io/badge/Git-F05032?style=flat-square&logo=Git&logoColor=white"/></span>  | ||
<span><img src="https://img.shields.io/badge/GitHub-181717?style=flat-square&logo=GitHub&logoColor=white"/></span>  | ||
<span><img src="https://img.shields.io/badge/Discord-4263f5?style=flat-square&logo=Discord&logoColor=white"/></span>  | ||
</td> | ||
</tr> | ||
<tr> | ||
<td align="center">Design</td> | ||
<td> | ||
<span><img src="https://img.shields.io/badge/Figma-F24E1E?style=flat-square&logo=Figma&logoColor=white"/></span>  | ||
</td> | ||
</tr> | ||
<tr> | ||
<td align="center">IDE</td> | ||
<td> | ||
<span><img src="https://img.shields.io/badge/VSCode-007ACC?style=flat-square&logo=Visual%20Studio%20Code&logoColor=white"/></span>  | ||
</tr> | ||
<tr> | ||
<td align="center">Convention</td> | ||
<td> | ||
<span><img src="https://img.shields.io/badge/Prettier-F7B93E?style=flat-square&logo=Prettier&logoColor=white"/></span>  | ||
<span><img src="https://img.shields.io/badge/ESLint-4B32C3?style=flat-square&logo=Prettier&logoColor=white"/></span>  | ||
</td> | ||
</tr> | ||
<tr> | ||
<td align="center">Deployment</td> | ||
<td> | ||
<span><img src="https://img.shields.io/badge/Vercel-000000?style=flat-square&logo=Netlify&logoColor=white"/></span>  | ||
</td> | ||
</tr> | ||
</table> | ||
|
||
|
||
<br /> | ||
|
||
## 5. 🎨 변경된 페이지 디자인 | ||
|
||
### 메인 페이지 | ||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">메인 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/f1f88e81-1356-43eb-8837-759f6758c811" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 현재 날씨를 보여주고, 기온에 적합한 베스트 코디 Top 3 표시합니다.<br/> | ||
|
||
|
||
### 로그인/회원가입 페이지 | ||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">로그인 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/c7688a67-8091-4a9d-a881-ef608613db13" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 일반 로그인과 구글 소셜 로그인이 가능입니다.<br/> | ||
|
||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">회원가입 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/7dcd0f08-d95e-4e9f-8aed-fc78f8d61551" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 일반 회원가입 페이지입니다.<br/> | ||
|
||
### 피드 페이지 | ||
|
||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">피드 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/53a6fa96-c4a5-4fc5-866f-7a6d08c88482" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 온도 조절을 통해 원하는 온도의 게시물을 확인할 수 있고, 태그 검색과 카테고리 검색이 가능합니다.<br/> | ||
|
||
|
||
### 게시물 상세 페이지 | ||
|
||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">게시물 상세 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/f6c6b8e6-ba41-4013-b384-49cae9f47d28" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 코디를 올린 시점의 온도와 날씨가 표시되고, 해시태그가 포함된 게시글과 카테고리를 확인할 수 있습니다.<br/> | ||
- 좋아요 및 댓글 기능을 통해 소통이 가능합니다.<br/> | ||
|
||
|
||
### 업로드 페이지&게시물 수정 페이지 | ||
|
||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">업로드 페이지 & 게시물 수정 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/5f271f16-a660-42cb-9a98-63bf6405826b" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 업로드 페이지와 게시물 수정 페이지는 디자인이 동일합니다.<br/> | ||
- 차이점은 게시물 수정 시에 수정할려는 게시물의 데이터가 들어있다는 점입니다.<br/> | ||
- 해시태그를 글과 함께 입력 가능하며 카테고리를 선택하여 게시물을 업로드합니다.<br/> | ||
<br/> | ||
|
||
### 마이 페이지 | ||
|
||
<table> | ||
<tbody> | ||
<tr> | ||
<td align="center">마이 페이지</td> | ||
</tr> | ||
<tr> | ||
<td align="center"><img src="https://github.com/kdt-8-4/Weatherfit_frontend_refactoring/assets/114459629/3bb2c1a5-5b5a-482f-a33a-85b8ab21c9ab" width=300/></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
- 자신의 회원 정보를 수정할 수 있고, 업로드한 코디와 좋아요한 코디를 확인할 수 있습니다.<br/> |
40 changes: 40 additions & 0 deletions
40
weatherfit_refactoring/src/Components/Molecules/FeedCategory.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
"use client" | ||
import ButtonStore, { ButtonStyle } from "../Atoms/Button/ButtonStore" | ||
import { CategoryData } from "@/Store/CategoryData" | ||
import IconStore, { IconStyle } from "../Atoms/Icon/IconStore"; | ||
import { useState } from "react"; | ||
import FeedCategorySelect from "./FeedCategorySelect"; | ||
|
||
|
||
export default function FeedCategory() { | ||
|
||
const {categoryData} = CategoryData(); | ||
const [tabControl, setControl] = useState<boolean>(false); | ||
|
||
const tabBooleanControl = () => { | ||
if(tabControl == false) { | ||
setControl(true); | ||
} else { | ||
setControl(false); | ||
} | ||
} | ||
|
||
|
||
return ( | ||
<div> | ||
<div onClick={tabBooleanControl} className=" font-NanumSquareRound flex flex-nowrap overflow-y-scroll my-1"> | ||
{ | ||
categoryData.map((val) => { | ||
return<ButtonStore buttonStyle={ButtonStyle.CATEGORY_BTN} key={val.id} style="h-[30px] p-1 m-1 flex whitespace-nowrap"> | ||
{val.title} | ||
<IconStore iconStyle={IconStyle.TOGGLE2} size={20} /> | ||
</ButtonStore> | ||
}) | ||
} | ||
</div> | ||
{tabControl && <FeedCategorySelect />} | ||
</div> | ||
|
||
|
||
) | ||
} |
52 changes: 52 additions & 0 deletions
52
weatherfit_refactoring/src/Components/Molecules/FeedCategorySelect.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { CategoryData } from "@/Store/CategoryData" | ||
import { CategorySelectData } from "@/Store/CategorySelectData"; | ||
import { useState } from "react"; | ||
|
||
export default function FeedCategorySelect () { | ||
|
||
const {categoryData} = CategoryData(); | ||
const {selectData, setSelectData} = CategorySelectData(); | ||
const [categoryTitleStyle, setCategoryTitleStyle] = useState<string>(""); | ||
|
||
|
||
const selectCategory = (selectedCategory: string) => { | ||
console.log("선택한 카테고리 타이틀", selectedCategory) | ||
} | ||
|
||
const selectCancle = (selectCancle : string) => { | ||
console.log("삭제할 카테고리 목록", selectCancle); | ||
} | ||
|
||
return ( | ||
<div className=""> | ||
<div className=" text-center font-neurimboGothic"> | ||
<span>X</span> | ||
카테고리 | ||
</div> | ||
<div className=" flex whitespace-nowrap"> | ||
{categoryData.map((val)=>{ | ||
return( | ||
<p key={val.id} onChange={()=>selectCategory(val.val)} className={categoryTitleStyle}>{val.title}</p> | ||
) | ||
})} | ||
</div> | ||
<div> | ||
{} | ||
</div> | ||
<div className="flex"> | ||
{selectData.map((val, index)=>{ | ||
return( | ||
<p key={index}> | ||
{val} | ||
<button onClick={()=>selectCancle(val)}> x</button> | ||
</p> | ||
) | ||
})} | ||
</div> | ||
<div className=" font-gmarketsans flex"> | ||
<button >초기화</button> | ||
<button >선택 카테고리 검색하기</button> | ||
</div> | ||
</div> | ||
) | ||
} |
Oops, something went wrong.