-
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 1조 FastMind #13
base: main
Are you sure you want to change the base?
Conversation
방 체크 폴링에서 소켓으로 리팩토링, 채팅방 내 유저 확인
리버트 및 채팅기능 구현
Fix : 머지 리버트
방 나가기 로직 구현, 0명 방이 되면 방 삭제, 폴링 기능으로 롤백
로그인, 회원가입 페이지 UI 개선
1:1대화 리스트 오류 해결
Docs: 리드미 업데이트
Docs: 리드미 업데이트
Docs: 리드미 업데이트
Docs: 리드미 프로젝트 아키텍처 디자인 수정
Update README.md
Update README.md
Update README.md
Update README.md
Docs: 리드미 업데이트
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.
1조 분들 구현 하시느라 고생하셨습니다!
새로운 개념들을 짧은 기간 안에 구현 하시고
협업도 익숙하지 않은 상태에서 task를 잘 나누어 작업해 주신 것 같습니다.
코드의 스타일이나 로직에 있어서 일관성이 없거나
간단한 처리임에도 복잡하게 구현이 되어 있는 부분이 있는 것 같습니다.
(코드에서 발견되는 중복되는 부분은 코멘트 한 번 남기고 생략하였습니다.)
일반적으로 없는 개념이 아닌 채팅, 채팅방 내에서의 정보 전달 구현임으로
일반적인 사용자 플로우를 고려하여 동작하게 하는 것이 개발 요구 사항을
정의하는 것에 있어서 좋은 방향성이 될 것 같습니다.
그 외에도 jsx 부분에 이벤트 핸들러 콜백 함수가 작성되어 있거나
스타일 값들이 변수화 되지 않고 하드코딩 되어있는 부분
모든 처리를 useEffect로 하신 점 등이 아쉬운 것 같습니다.
useMemo 등 computed 된 값을 이용하는 방법도 고려되면 좋을 것 같습니다.
지금 프로젝트 리펙토링 혹은 다음 프로젝트 등 에서
더욱 클린한 코드와 최대한 간단하게 로직을 가져갈 수 있는 구현은
간단하게 구현하는 것을 고려하면 좋을 것 같습니다.
"@fortawesome/fontawesome-free": "^6.4.2", | ||
"@fortawesome/free-solid-svg-icons": "^6.4.2", | ||
"@fortawesome/react-fontawesome": "^0.2.0", | ||
"@types/styled-components": "^5.1.30", |
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.
type은 개발 시에 필요한 패키지일 것 같습니다.
"socket.io-client": "^4.7.2", | ||
"styled-components": "^6.1.1", | ||
"sweetalert": "^2.1.2", | ||
"sweetalert2": "^11.10.0" |
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.
framer-motion, sweetalert2 등 사용하는 라이브러리인지 확인이 필요할 것 같습니다.
|
||
<head> | ||
<meta charset="UTF-8" /> | ||
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> |
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.
favicon 표시가 되고있지 않습니다.
declare module '*.png' { | ||
const value: string; | ||
export default value; | ||
} |
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.
tsconfig.json에 typeRoots 를 설정하여
특정 폴더(ex types)에서 추가 정의된 타입들을 관리하면 좋을 것 같습니다.
padding: 0; | ||
border: 0; | ||
font-size: 100%; | ||
font: inherit; |
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 [, setIsQuizMasterAlertShown] = useState(false); //출제자 확인알람 추가 | ||
const [, setAnswer] = useState<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.
state 를 선언하지 않고 사용하고 있지 않은데
setState 해줄 필요가 없을 것 같습니다.
try { | ||
if (id) { | ||
const allRoomsData = await getAllGameRooms(); | ||
const createAtData: Chat[] = await sortCreatedAt(allRoomsData); |
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.
위 코멘트와 동일하게 await 필요 없을 것 같습니다.
|
||
gameSocket.on('quiz_master_set', (quizMasterId: string) => { | ||
setIsQuizMaster(myId === quizMasterId); | ||
if (true) { |
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.
if 문 불필요할 것 같습니다.
import { JoinData } from '../interfaces/interface'; | ||
import { getCookie, setAccessToken } from '../util/util'; | ||
import swal from 'sweetalert'; | ||
|
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도 파일로 나누어 관련 있는 것을 묶으면 보기 편할 것 같습니다.
또한 요청 후 응답 data에 대한 type 처리가 되어있지 않아
어떤 응답이 오는지 예측할 수 없을 것 같습니다.
swal( | ||
'리프레시 토큰 에러', | ||
'리프레시 토큰이 없어 토큰 재발급이 불가능합니다.', | ||
'error', | ||
); | ||
swal({ | ||
title: '리프레시 토큰 에러', | ||
text: '리프레시 토큰이 없어 토큰 재발급이 불가능합니다.', | ||
icon: 'error', | ||
}); |
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.
한 가지만 사용하는 것이 맞을 것 같습니다.
패스트캠퍼스 토이프로젝트2 한조팀의 FastMind 게임 💻 프론트엔드
📝 프로젝트 소개
FastMind
는 창의적이고 상호작용이 풍부한 웹 애플리케이션입니다. 이 프로젝트는 그림판과 채팅 기능을 통합하여 아래 두 가지 주요 방식으로 사용됩니다.게임 서버는 이곳을 클릭해 주세요.
채팅 서버는 이곳을 클릭해 주세요.
피그마는 이곳을 클릭해 주세요.
TEST용 ID: ivegaeul
TEST용 PASSWORD: ivegaeul
✔️ 요구 사항
필수 구현 사항
useState
또는useReducer
를 활용한 상태 관리 구현Sass
,styled-component
,emotion
,Chakra UI
,tailwind CSS
등을 활용한 스타일 구현react
상태를 통한 CRUD 구현custom hook
을 통한 비동기 처리 구현jwt
등의 유저 인증 시스템 (로그인, 회원가입 기능)선택 구현 사항
typescript
를 활용한 앱 구현🛠️ 기술 스택
FrontEnd
Language
Development
CI/CD
Design
Chatting BackEnd
Language
Framework
DB
Infra
CI/CD
Game BackEnd
Language
Framework
Infra
CI/CD
📚 주요 기능
📓주요 기능 설명
로그인/ 회원가입
보안 및 사용자 인증
본 프로젝트의 로그인 및 회원가입 기능은 엑세스 토큰과 리프레시 토큰을 쿠키를 통해 관리하여 사용자 인증의 안전성을 강화했습니다.
회원가입 기능
회원가입 과정에서는 다음과 같은 검증 로직을 적용하여 사용자 경험의 질을 향상시켰습니다:
회원가입 과정 중 발생할 수 있는 다양한 에러(예: 네트워크 에러, 이미지 파일명 및 용량 관련 에러)는 사용자에게 명확한 피드백을 제공합니다.
로그아웃 기능
사용자가 로그아웃할 때, 보안을 위해 관련 쿠키를 삭제하는 로직을 구현하여, 사용자의 세션 정보를 안전하게 관리합니다.
로비
방 만들기
/room/:방 고유 id
경로로 이동하여 해당 방에 접근할 수 있습니다.게임방 목록
map
함수를 활용하여 각 방의 정보가 목록으로 표시됩니다.온라인 유저 리스트
프로필
채팅
게임 방
그림판
주요 기능
그림판에서의 사용자 작업은 다음과 같은 형식으로 서버로 전송됩니다.
originalMousePosition
: 현재 마우스 위치 (x, y 좌표)newMousePosition
: 새로운 마우스 위치 (x, y 좌표)option
: 작업 옵션 (선택된 색상, 선의 굵기, 방 ID)게임 로직
🖌️ 프로젝트 아키텍처
📂 폴더 구조
🧑🏻💻 팀 소개 및 역할
팀장
팀원
팀원
팀원
멘토님
✍️ 회고
장호진
프로젝트 초기에 2주만에 게임을 만들 수 있을까라는 생각이 들었지만, 유나님은 그림판 구현경험이있고, 재혁님은 게임 구현경험, 하연님은 웹소켓 경험이 있어서 믿고 열심히 할 수 있었습니다!!
재혁님 유나님과 함께한 게임로직, 백엔드 소켓 로직, 백엔드 배포를 수행하면서 기존 프론트엔드에서 경험하지 못했던것들을 경험 할 수 있어서 좋았습니다.
하연님의 전문적인 퍼블리싱으로 초기 UI를 엄청나게 업그레이드 시켜주셔서 구현하며서 이런게 현업의 감각이구나 라는걸 느꼈습니다.
4명임에도 불구하고 완성도높은 결과물을 위해 다들 새벽까지 개발 하시느라 고생하셨습니다!🏹
양재혁
이전에 SockJS와 Stomp를 이용하여 웹 게임 구현 경험이 있어 수월할 줄 알았으나 게임 로직을 구현하면서 백엔드 팀원이 없어 게임 개발에 난항을 겪었습니다.
결국 백엔드 공부도 따로 하며 직접 백엔드를 구현하고 배포하게 되었습니다.
이번 프로젝트에서 저희 팀원들 모두가 열심히 해주셔서 감사합니다.
2주 안에 채팅과 게임 솔직히 못 할 줄 알았는데 우리 팀원들 대단하신 것 같습니다!
다음 프로젝트도 이번 팀처럼 열정적이고 능력 있는 분들이랑 하고 싶습니다 ^~^
소유나
캐치마인드에 진심이었지만 서비스가 종료되어서 저희가 직접 만들기로 했다 ^!^ 🏹
이번 과제 특성 상 역할 분배가 어려워서 조금 아쉬웠지만 이번 기회로 리액트를 확실하게 배운 것 같고 소켓과 백엔드까지 관심을 갖게 되었다. 🎇
컨셉충인 나는 내가 좋아하는 것을 만드는게 조금 더 욕심과 열정을 갖고 만들 수 있다는 것을 다시 깨달았다. 😉
이번 프로젝트에서 가장 많이 얻어 가는 것은 공부 의지와 욕심이다❗
모두 잠도 안 자고 매일 새벽까지 밤 새서 기능 구현에 힘썼는데, 그런 열정을 다음 프로젝트에 계속 이어나갈 수 있을 것 같다. 💪
주어진 과제 이상으로 게임 로직과 백엔드 구현까지 경험해서 정말 뜻깊은 2주였다. 🐤
신하연
지나고 보니 정신없이 달려온 2주였던 것 같습니다.
처음에 역할 분배를 했지만, 역할 분배가 어려워 난항을 겪었고, 정해진 역할 분배와 다르게 기능을 구현한 감이 있어서 그 부분은 아쉽습니다.
초기 디자인 UI를 피그마로 제작했으나, 뜻하지 않게 디자인과 다르게 구현된 부분도 있어 디자이너로의 욕심을 내려놓는 법을 조금이나마 배운 것 같습니다.
다들 새벽, 주말 가리지 않고 열심히 작업했으며, 서로 화이팅하려는 분위기를 만들려고 조원들 모두가 힘썼습니다.
배포 직전 채팅 소켓 오류 디버깅으로 꽤나 골치를 썩었고, 그런 디버깅을 하면서 소켓 연결과 리액트에 이해가 높아진 것 같아 많이 배웠다는 생각이 듭니다.
모두 고생하셨습니다.
📆 기간
2023.11.06 ~ 2023.11.17