Skip to content

JiHongkyu/LangChat

 
 

Repository files navigation

LANGCHAT: 언어 학습을 위한 채팅 앱

패스트캠퍼스 X 야놀자 프론트엔드 부트캠프 토이프로젝트2 12조

프로젝트 소개

제작기간 : 2023.11.06 ~ 2023.11.16 제작인원 : 4명

배포 주소

🌐 배포링크 : https://langchat-464b7.web.app/

🔒 테스트 계정 - ID: test0000 PW: 123123

팀원 소개

팀장 - 백상원 팀원 - 김성겸 팀원 - 지홍규 팀원 - 한은지
@Yamyam-code @skyeome @JiHongkyu @lilviolie
  • 유저 랭킹 리스팅
  • 영어 끝말잇기 구현
  • 레이아웃
  • 회원인증
    로그인/회원가입
  • 오픈채팅기능
  • 초기셋팅
  • 웹소켓 연결/실시간
    채팅 로직 구현
  • 1대1채팅 기능
  • 홈 화면 개발
  • 프로필 수정기능

기술 스택 및 라이브러리

사용 기술

React TypeScript React Router Socket.io Recoil Styled Components FIREBASE Framer MUI Prettier Eslint

협업툴

Notion Figma Slack Zoom Jira

🎯 주요 구현 사항

  • useState 또는 useReducer를 활용한 상태 관리 구현
  • Sass, styled-component, emotion, Chakra UI, tailwind CSS 등을 활용한 스타일 구현
  • react 상태를 통한 CRUD 구현
  • 상태에 따라 달라지는 스타일 구현
  • custom hook을 통한 비동기 처리 구현
  • 유저인증 시스템(로그인, 회원가입) 구현
  • jwt등의 유저 인증 시스템 (로그인, 회원가입 기능)
  • 소켓을 이용한 채팅 구현

선택 구현 사항

  • Next.js를 활용한 서버 사이드 렌더링 구현
  • typescript를 활용한 앱 구현
  • storybook을 활용한 디자인 시스템 구현
  • jest를 활용한 단위 테스트 구현

😀 팀원별 상세 구현 사항

한은지 : 첫 화면, 프로필 페이지

주요 구현사항 설명

홈페이지

홈페이지

  • 상단의 select box에서 선택한 언어에 해당하는 유저 리스트 표시
  • 소켓 연결을 통해 유저 접속 여부 표시
  • 유저 선택 시 나타나는 프로필 모달 구현

프로필

  • 유저가 본인의 정보를 수정할 수 있는 프로필 페이지 구현
지홍규 : 메시지 페이지

주요 구현사항 설명

메시지 보내기 보달

  • 모든 유저 리스트 표시
  • 자음, 모음으로 유저 이름 검색
  • 유저 선택 시 보내기 버튼 활성화
  • 메시지 보내면 기존 채팅방 유무 확인 후 채팅방 생성 or 채팅방 이동

모달창

채팅리스트

  • 로그인 유저가 포함된 채팅 리스트 표시
  • 상대방의 프로필 사진과 이름 표시
  • 해당 채팅방의 마지막 메시지와 경과 시간 표시
  • 로딩 시 채팅 리스트 Skeleton UI 적용

채팅리스트

모든 채팅 가져오기

  • 채팅방 클릭 시 해당 채팅방의 대화 내용 모두 가져오기

모든 채팅가져오기

1대1채팅

  • 로그인한 유저와 대화상대방의 메시지 레이아웃 구분
  • 같은 시간에 보낸 메시지는 마지막 메시지에 한 번만 표시
  • 웹 소켓 연결 및 실시간 통신 로직 구현

채팅방

로그아웃

  • 로그아웃 시 localStorage 값과 accessTokenState 값 초기화 후 로그인 페이지로 이동

로그아웃

김성겸 : 인증관련, 오픈채팅 페이지

유저 인증 / 회원가입

회원가입

  • 아이디 - 중복 아이디 체크 기능
  • 비밀번호 - 5글자 이하인지 유효성 검사
  • 프로필 사진을 정사작형으로 잘라주는 에디터 추가
  • 관심사 선택
  • 언어, 수준 선택

회원가입 페이지

로그인

  • 로그인시 오류 발생하면 에러 메시지를 toast로 보여주는 기능
  • 이미 로그인 되어있으면 로그인 페이지로 갈수 없습니다.

로그인 페이지

오픈 채팅

  • 오픈채팅방 생성 기능
  • 로딩시 skeleton UI 적용
  • 추천친구/대화방 보여주는 기능
  • 채팅방 참여, 나가기, 초대 기능

오픈채팅방 생성
오픈채팅 생성

오픈채팅방 초대
오픈채팅 초대

실시간 오픈채팅
실시간 오픈채팅

오픈채팅 나가기
실시간 오픈채팅

백상원 : 게임 페이지

주요 구현사항 설명

랭킹

ranking

  • 각 유저의 최고 점수를 기반으로 랭킹을 나열
  • 기본적으로 유저의 등수를 보여주며 호버 시 그 유저의 점수를 표기
  • 게임 플레이 중 최고 점수 갱신를 갱신하면 게임 종료 시 랭킹 리렌더링

끝말잇기 게임

submit

  • 네이버 지식백과 API 및 정규식을 활용하여 단어 유효성 검사
  • 배포서버 API CROS 이슈 AWS API GATEWAY 사용하여 해결(해당 방법이 api 딜레이가 가장 적고 https 프로토콜을 사용)
  • useState와 FRAMER 활용 남은 시간 게이지바로 표시
  • 정답 시 현재 점수를 +1 하며 현재 점수가 최고 점수를 넘어갈 경우 최고 점수 = 현재 점수
  • 효과음 사용

➡️ 유저 흐름(flow) 이미지

LangChat UserFlow

📂 폴더 구조

📦 LangChat
├─ node_modules/
├─ public/
│  ├─ index.html
│  ├─ favicon.ico
│  └─ manifest.json
├─ src/
│  ├─ components
│  │  ├─ common/
│  │  ├─ todo.../
│  │  └─ …/
│  ├─ assets/
│  ├─ common/
│  ├─ pages/
│  ├─ utils/
│  ├─ hooks/
│  ├─ styles/
│  ├─ types/
│  ├─ reducer/
│  ├─ App.js (라우팅까지)
│  └─ index.js
├─ package.json
├─ package-lock.json
└─ README.md

About

관심사를 토대로 언어를 교환할 수 있는 채팅앱입니다👫

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 97.7%
  • CSS 1.3%
  • HTML 1.0%