-
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 7조 영화는 조조] 집사를 위한 채팅 웹 서비스 'Cat Talk😸' 제출 #3
base: main
Are you sure you want to change the base?
Conversation
…nto Feature#17
Feat : 오픈 채팅방 목록 검색 세부 기능 추가
Feat : 로그인 & 회원가입 구현
Feat : 유저 친구 페이지 완성 및 모달 작업 pr
Feat : 오픈채팅방 데이터 받아와서 리스트에 뿌려주기 pr
Feat : 환경변수 사용 X, 쿠키로 대체 pr
Feat : 유저/채팅방 검색 기능 추가 pr
styled component, layout, 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.
짧은 기간동안 멋진 결과물을 만드셨네요!! 고생 많으셨습니다.
좋았던 점
- 낯설 수 있는 신기술들을 도입해보면서 모던한 스택으로 개발을 시도한 점 멋졌습니다.
- 폴더구조를 잘 분리해서 유지보수성을 높이고자 노력한 점이 좋았습니다.
- 제네릭 등을 활용해 typed하게 작업하려고 시도한 점들이 인상 깊었습니다.
- vercel 자동배포, preview 등을 활용한 점
아쉬웠던 점
- 반복되어 사용되는 fetch 함수의 옵션들을 매번 작성한 점
- 전반적으로 지켜지지 않아보이는 컨벤션 (변수명 케이스, 파일관리 등)
- 사용되지 않는 파일 또는 주석들을 삭제하지 않아, 깔끔하지 못했던 마무리
리뷰 남긴 내용들을 기반으로 리팩토링해보는 시간도 꼭 가져보면 좋을 것 같습니다!
고생 많으셨습니다!!
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.
나중에는 yml 파일 형식으로 남겨보셔도 좋을 것 같아요!! 짱 편합니다.
https://docs.github.com/ko/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms
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.
preview까지 적용... 멋집니다!!!
const handleBackChat = () => { | ||
router.back(); | ||
}; |
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.
함수를 한 번 더 감싸준 이유가 있으신가요?! 🤔
}; | ||
|
||
const handleLeaveChat = async () => { | ||
await fetch('https://fastcampus-chat.net/chat/leave', { |
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.
URL은 고정이니까, 상수로 관리했어도 좋았을 것 같습니다. (오타의 위험성) 아니면 nextjs의 rewrite를 활용해서 유사 프록시 전략을 사용하는 것도 방법입니다.
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.
페이지 라우팅에서만 사용할 수 있는 줄 알았었는데 next js의 rewrite를 API URL에 적용할 수 있는 지 몰랐습니다!! 감사합니다.
headers: { | ||
'content-type': 'application/json', | ||
serverId: process.env.NEXT_PUBLIC_SERVER_ID as string, | ||
Authorization: `Bearer ${accessToken}`, | ||
}, |
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.
매번 똑같이 header를 호출하는 코드가 반복될텐데, header를 뱉어주는 함수를 만들어서 호출했으면 어땠을까? 하는 의견 남겨봅니다.
} | ||
}; | ||
|
||
const invalidImageType = ['svg', 'png', 'jpg', 'jpeg']; |
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.
이 리뷰를 마지막으로 생애주기와 관련이 없는 상수들을 컴포넌트 외부로 선언하도록 변경해보세요!
onClick={() => { | ||
if (isShowMore) { | ||
setIsShowMore(false); | ||
} else { | ||
router.back(); | ||
} | ||
}} |
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.
인라인으로 선언하는 익명함수와 함수를 선언해서 콜백으로 전달하는 방식이 혼재되어있는 것 같습니다. 따로 기준이 있으신가요?
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를 모아두는 파일이름은 utils 보다는 apis.ts 가 더 좋았을 것 같아요!! 그리고, 어떤 곳에서는 인라인으로 직접 호출하고 어떤 곳에서는 파일로 관리하는 것은 컨벤션이 잘 안 지켜진 게 아닐까 의견 드리고 싶었습니다.
import { User } from '@/types'; | ||
|
||
export type UserHasOnline = User & { | ||
isOnline: boolean; |
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.
online이 혹시 로그인 여부를 표시하는 변수명인가요? 온라인은 네트워크 연결이 되어있는지의 여부를 나타내는 용어 같습니다
const { data, isLoading, isError } = useQuery({ | ||
queryKey: ['fetchAllUsers'], | ||
queryFn: () => fetchAllUsers(token), | ||
staleTime: 1000 * 60 * 5, |
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.
staleTime은 조심해서 써야합니다. 새로고침하기 전까지는 5분동안 데이터가 항상 똑같은 데이터를 받기 때문입니다.
Cat Talk
🧑🏻💻 프로젝트 소개
Cat Talk
는 반려묘를 기르고 있는 집사들을 위한 채팅 웹 서비스 입니다.[필수 구현 사항]
✅
useState
를 활용한 상태 관리 구현✅
tailwind CSS
를 활용한 스타일 구현✅
react
상태를 통한 CRUD 구현 (Next.js 'use client')✅ 상태에 따라 달라지는 스타일 구현
✅
custom hook
을 통한 비동기 처리 구현✅ 유저인증 시스템(로그인, 회원가입) 구현
✅
jwt
등의 유저 인증 시스템 (로그인, 회원가입 기능)✅ 소켓을 이용한 채팅 구현
[선택 구현 사항]
✅
Next.js
를 활용한 서버 사이드 렌더링 구현✅
typescript
를 활용한 앱 구현❎
storybook
을 활용한 디자인 시스템 구현❎
jest
를 활용한 단위 테스트 구현야놀자 테크 캠프 토이 프로젝트 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
🧑🏻💻 Stack
🧑🏻💻 디자인
Userflow
디자인 프로토타입
🧑🏻💻 주요 기능 구현
로그인, 회원가입
유저 목록 조회, 검색, 채팅
채팅방 검색 및 채팅
드래그 & 드롭
🧑🏻💻 Script
Development Mode
🧑🏻💻 팀 소개
Frontend
Frontend
Frontend
Frontend
Frontend
🧑🏻💻 개발 기간 :
11일
23.11.06 월 ~ 23.11.16 목