-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
토이프로젝트2 6조 #1
base: main
Are you sure you want to change the base?
토이프로젝트2 6조 #1
Conversation
공용 스타일 수정 및 추가, 폰트 추가
로그인 페이지 퍼블리싱 완료
회원가입 페이지 퍼블리싱 완료
Font 에러 해결 및 styled-reset 추가 / ButtonStyle Interface 수정
…oyProject2 into feature/signup/main
Feat : 오픈채팅방 데이터 받아와서 리스트에 뿌려주기 pr
useFireFetch, useFetch, index.css 수정
커스텀 훅 타입 및 환경변수 추가, 예시 페이지 소켓통신 추가
useFetch 에러 리턴 추가, 예시 페이지 서버채팅 추가
토스트 팝업 ui 데이터 연결, 초대 거절 수락 기능 추가
소켓 통신 useSocket 추가, 토스트 알람 UI 일부 수정
초대 팝업 소켓 통신 코드 수정, 메시지 중복 문제 해결, 소켓 연결 모듈화(useSocket 제거)
[FIX] 초대 인원 제한, 게임 초대 수락 시 게임 입장
TALK-22--feat/layout/styles 공통 styles 파일 수정 및 추가
✨Feat: add pocketRequest.ts in api
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다!
반복되는 코멘트는 생략했으니, 본인 코드에 달린 리뷰가 아니더라도 확인 부탁드립니다!
- 일관성 있는 코드 작성하기 (작명, 로직의 구현 등)
- 비동기 호출에서 일어나는 오류 처리하기
- 반복되는 로직은 공통화하기
- 컴포넌트 작게 쪼개기
앞으로 진행하는 프로젝트들에서는, 위 항목들에 대해 조금 더 고민해보시면 좋을 것 같습니다!
짧은 기간동안 고생 많으셨고, 앞으로 프로젝트도 화이팅입니다~
"@types/react-modal": "^3.16.3", | ||
"@types/react-slick": "^0.23.12", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
devDependencies
에 포함되어야할 패키지들같네요~
|
||
export const ThemeContext = createContext<ContextProps>({ | ||
theme: lightTheme, | ||
toggleTheme: () => {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어떤 의미로 여기서 Empty object를 반환하는 건가요?
{}
타입은 'nullish하지 않은 모든 값'을 의미하게 됩니다. 좀 더 정확한 타입을 지정해주면 좋을 것 같습니다!
} | ||
]); | ||
|
||
const App: React.FC = () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
React.FC
타입을 사용하면 defaultProps나 children을 원하는대로 제어하기 힘들고, 작성해야하는 코드 양 자체도 많아지다보니 저는 선호하지 않는 편입니다.
혹시 사용하게되신 이유가 있을까요? 저도 사용하지 않은지 오래돼다보니 새로운 장점이 생긴 게 있는지 궁금하네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이런 건 fantasticon같은 걸 사용해서 아이콘 폰트로 제작해보거나, svg의 fill을 변경해봐도 괜찮았을 것 같네요!
export interface User { | ||
id: string; | ||
name: string; | ||
picture: string; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이런 ChatRoom
과 무관한 타입은 다른 타입을 관리하는 파일에서 선언되었어도 괜찮지 않았을까요?
fetchData(); | ||
} | ||
}, [accessToken, roomId]); | ||
// TODO : 여기에 의존성배열로 chatRoom 을 넣어줘야하는데 그러면 너무 렌더링이 많아져서 또 채팅방 내역을 잘 못 불러옴 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
setChatRoom
을 하는 useEffect
에 chatRoom
을 dependency array에 넣으면 렌더링이 매번 일어나는 게 당연할 것 같은데, 혹시 추가가 필요한 이유가 있을까요?
const minutesDifference = Math.floor(timeDifference / (1000 * 60)); | ||
const hoursDifference = Math.floor(minutesDifference / 60); | ||
const daysDifference = Math.floor(hoursDifference / 24); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
magic number 사용은 가급적 지양해주시면 좋을 것 같습니다!
default: | ||
return "190px"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
개발 환경일 땐 에러를 throw해주면 좀 더 직관적으로 size를 추가해야한다는 걸 알 수 있을 것 같습니다!
font-family: 'PretendardVariable'; | ||
src: url("../assets/fonts/PretendardVariable.woff2") format('woff2-variations'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fallback 폰트를 추가하시고, font-display: swap
을 추가해 폰트를 불러오는 중에 시스템 폰트를 출력할 수 있도록 해보면 좋을 것 같네요.
} else { | ||
const hoursDifference = Math.floor(minutesDifference / 60); | ||
updatedAtString = `${hoursDifference}시간 전`; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
60분 뒤로는 모두 $DIFF시간 전
으로 출력되는데, 기간이 오래되는 것을 감안하면 $DIFF년 전
정도 단위까지 추가하거나, 날짜를 포매팅해서 출력하도록 했으면 좋지 않았을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 리뷰 감사합니다! 구영표 멘토님
setLoading(true); | ||
|
||
setTimeout(() => { | ||
postApi(LOGIN_API_URL, loginData) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 API 요청에선 토큰을 필요로 하지 않아서 따로 작성했지만 좀 더 알아보니 axios에서 interceptor 라는 것을 지원한다는 것을 알게 되었습니다.
다음부터는 해당 기능을 사용해서 코드를 짜보겠습니다.
sessionStorage.setItem("refreshToken", refreshToken); | ||
sessionStorage.setItem("userId", loginData.id); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
로컬 스토리지에 저장하게 되면 브라우저를 종료하더라도 로그인 상태가 유지되어서 제가 생각하는 UX 상으로는 자동 로그인을 체크하지 않으면 로그아웃이 되는게 좀 더 좋은 방향이라고 판단해서 세션에 저장하였습니다.
.catch((error) => { | ||
console.error(error); | ||
setErrorMessage("아이디와 비밀번호를 확인해주세요."); | ||
setLoading(false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵! 공통된 코드는 finally로 옮겨 선언하겠습니다
참교6조 CHWIMIMATE
🧑🏻💻 프로젝트 소개
저희 참교6조는 Toy Project2 프로젝트에서
CHWIMIMATE
라는 사이트를 개발하였으며 본 사이트는 취미가 맞는사람들끼리 채팅을 하여 친목을 쌓는 프로그램입니다.🔐 테스트 계정 id, pw
[필수 구현사항]
✅ useState 또는 useReducer를 활용한 상태 관리 구현
✅ Sass, styled-component, emotion, Chakra UI, tailwind CSS 등을 활용한 스타일 구현
✅ react 상태를 통한 CRUD 구현
✅ 상태에 따라 달라지는 스타일 구현
✅ custom hook을 통한 비동기 처리 구현
✅ 유저인증 시스템(로그인, 회원가입) 구현
✅ jwt등의 유저 인증 시스템 (로그인, 회원가입 기능)
✅ 소켓을 이용한 채팅 구현
[선택 구현사항]
✅ typescript를 활용한 앱 구현
토이2 프로젝트 설명
🍋 소켓 기반 채팅앱
주어진 API와 소켓을 분석해 어떤 프로젝트를 진행/완성할 것인지 팀 단위로 자유롭게 결정하고 만들어보세요.
과제 수행 및 리뷰 기간은 별도 공지를 참고하세요!
과제 수행 및 제출 방법
git branch Y_FE_Toy2_Team13
)main
브랜치에 푸시하지 않도록 꼭 주의하세요,git push origin Y_FE_Toy2_Team13
)main
브랜치를 대상으로 Pull Request 생성하면, 과제 제출이 완료됩니다!(E.g,main
<==Y_FE_Toy2_Team13
)과제 수행 및 제출 과정에서 문제가 발생한 경우, 바로 담당 멘토나 강사에게 얘기하세요!
백엔드 서버에 문제가 생겼을 경우, 바로 슬랙의 GyoHeon Lee에게 연락하세요!
필수 구현 사항
useState
또는useReducer
를 활용한 상태 관리 구현Sass
,styled-component
,emotion
,Chakra UI
,tailwind CSS
등을 활용한 스타일 구현react
상태를 통한 CRUD 구현custom hook
을 통한 비동기 처리 구현jwt
등의 유저 인증 시스템 (로그인, 회원가입 기능)선택 구현 사항
Next.js
를 활용한 서버 사이드 렌더링 구현typescript
를 활용한 앱 구현storybook
을 활용한 디자인 시스템 구현jest
를 활용한 단위 테스트 구현추가 사항
예시 프로젝트
API 사용법
headers
에 아래 정보가 꼭 포함돼야 합니다!기본 데이터 구조
user
chat
message
회원
회원가입
사용자가
id
에 종속되어 회원가입합니다.요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
id 중복 체크
id
중복 체크를 합니다.요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
로그인
accessToken
은 7일 후 만료됩니다.요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
인증 확인
id
중복 체크를 합니다.요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
토큰 재발급
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
사용자 정보 수정
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
채팅
특정 유저 조회
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
모든 유저 조회
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
채팅 생성하기
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
특정 채팅 조회
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
모든 채팅 조회
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
나의 채팅 조회
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
채팅 참여하기
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
채팅 나가기
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
채팅 초대하기
요청 데이터 타입 및 예시:
응답 데이터 타입 및 예시:
Socket
기본 연결
emit Event(client -> server)
example
message-to-server
요청 데이터
fetch-messages
messages-to-client
로 데이터를 받을 수 있습니다.요청 데이터
users
users-to-client
로 데이터를 받을 수 있습니다.요청 데이터
on Event(server -> client)
example
message-to-client
응답 데이터
messages-to-client
응답 데이터
join
응답 데이터
leave
응답 데이터
users-to-client
응답 데이터
server 연결
emit Event(client -> server)
example
users-server
users-server-to-client
로 데이터를 받을 수 있습니다.요청 데이터
on Event(server -> client)
example
users-server-to-client
응답 데이터
invite
응답 데이터
new-chat
응답 데이터
🧑🏻💻 Contributor
🧑🏻💻 기술 스택
Enviroment & Config
UI Tools
Development & FrontEnd
Deploy
Communication
🧑🏻💻 파일 구조
🧑🏻💻 화면 구성
메인페이지+헤더
메인페이지+섹션
취미메이트 만들기&확인하기
채팅
🧑🏻💻 팀 소개
Frontend
Frontend
Frontend
Frontend
Frontend
멘토링
🧑🏻💻 개발 기간 :
2주(13일)
23.11.06 ~ 23.11.16