Skip to content

스마일게이트 개발 캠프 2022 - 윈터 개발 캠프 2기 - SeaGull

Notifications You must be signed in to change notification settings

sgdevcamp2022/seagull

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eGuBa(이거봐)

팀 노션 - Notion

Front-End Repo.
Back-End Repo.
Back-End-Auth Repo.

🚩 프로젝트 개요

친구들과 함께 하는 영상 공유 플랫폼

기획 배경
기존의 회의 플랫폼과는 다르게 친구들과 함께 영화, 드라마 등 영상을 함께보고 채팅도 하면서 여가 시간을 보낼 수 있는 가상 공간을 제공하고자 플랫폼을 만들었습니다. ​

서비스 주요 기능
✔️ 링크가 공유된 유저들 간에 영상을 함께 보는 기능
✔️ 함께 영상을 보면서 채팅하는 기능

🚩 프로젝트 기간

2023년 2월 2일 ~ 2023년 2월 24일 (약 3주)

🚩 팀원 소개

이름 개인 깃허브 담당 역할 및 기능
박성준 tjdwns4537 채팅 시스템, 실시간 웹소켓 구현, 메인서버 관리, Redis Repository 구성,
영상공유 방 비지니스 로직 구현
박정원 jjjjjeongwon 프론트 전체
이효승 hoos007 영상 공유 시스템 전체, 웹소켓 통신 담당
이범수 dldks321 유저 시스템 담당

🚩기술스택 및 개발환경

📚 Teck Stack & Tools

FRONTEND

Recoil

BACKEND

- 채팅시스템, 영상공유시스템

Java MySQL AWS

- 유저시스템

Cowork Tools

📌 Architecture

스크린샷 2023-02-24 오후 2 56 10

📌 DB Architecture

스크린샷 2023-02-25 오전 3 56 41

🚩UI

메인페이지

스크린샷 2023-02-25 오전 3 39 43

회원가입

스크린샷 2023-02-25 오전 3 39 10

로그인

스크린샷 2023-02-25 오전 3 39 31

참여링크 입력

스크린샷 2023-02-25 오전 3 39 56

영상공유방 내 채팅

ezgif.com-gif-maker.mov

영상공유 일시정지, 재생위치 변경

ezgif.com-gif-maker.1.mov

🚩 주요기능 및 작업내역

🛠 주요기능

  • 이메일 인증을 통한 회원가입 기능
  • JWT 토큰 인증을 통한 로그인 기능
  • Stomp, SockJS를 통한 실시간 통신 기능
  • WebSocket을 이용한 유저들 간에 실시간으로 영상을 함께 보는 기능
  • 실시간 채팅 기능

🛠 작업내역

FRONTEND

🙋🏻‍♀️ 박정원

  • 전체적인 UI 구현
  • Stomp, SockJS를 활용한 소켓 연결 실시간 채팅, 영상 공유 구현
  • 로그인, 회원가입 페이지를 구현하고 backend로부터 토큰을 받아 session storage에 저장해 로그인 처리
  • Private Route를 사용해 생성되지 않은 영상공유방으로 접근 시 404 Not Found 페이지로 이동 처리
  • Header의 뷰가 로그인 전/후로 달라지기 때문에 로그인 유무를 Recoil을 통해 전역으로 상태 관리 처리

🙋🏻 이효승

  • 소켓 연결을 통해 서버와 통신하며 서버에서 받은 메시지를 기반으로 리액트 플레이어를 통한 영상 조작 체계 구현
  • 호스트 상태와 호스트가 아닌 상태 정의 및 구현
  • 영상 재생중인 방에 추가로 접속된 클라이언트에 대한 현재 재생중인 영상 상태 전달 과정과 클라이언트 내부처리 설계

BACKEND

🙋🏻 박성준

  • ec2 서버 구축 후 카프카 연동 (링크)
  • ec2에 도커 설치 (링크)
  • 도커에 mysql 설치(링크)
  • 깃 Rebase 컨벤션 작성 (링크)
  • 실시간 웹소켓을 위한 테스트 페이지 구현
  • 방마다 구분된 사용자의 실시간 브로드 캐스팅 구현
  • 실시간으로 주고 받는 데이터들을 위한 Redis 환경 및 Redis Repository 구축
  • 비디오 공유방 생성 및 조회를 위한 API 로직 구현
  • 호스트의 URL 전송, 방 삭제 등을 위한 API 로직 구현
  • 채팅 시스템을 구축해 메세지를 Stomp와 SockJS로 주고받을 수 있는 환경 구축
  • EC2 에 docker-commpose.yml 로 서버를 배포할 수 있게 환경 구성 ​

🙋🏻 이효승

  • 영상공유 전체 로직 구현 (링크)
  • 영상 공유 로직에 따라 서버 Redis 저장 값 정의
  • 영상 공유 로직에 따라 클라이언트와 서버 사이의 통신 규칙 정의 및 구현
  • 호스트 클라이언트가 전송한 url 서버 저장구조 정의
  • 중간에 방에 접속한 클라이언트에게 url 전송하는 로직 설계 및 구현
  • 클라이언트와 서버간 웹소켓 통신 pub/sub구조 설계
  • 웹소켓 통신에서 pub/sub주소를 통해 방 구분을 하는 로직 설계
  • 방 링크 생성시 호스트 id를 base62로 인고딩한 값을 추가해 방 링크 생성 로직 설계 및 구현
  • 주소와 포트를 통해 클라이언트와 서버가 통신하도록 구현

BACKEND AUTH

🙋🏻 이범수

  • FastAPI를 이용한 Jwt 토큰기반 인증 시스템 구현
  • 유저 추가, 정보변경, 삭제 등의 유저 관리 체계 구현
  • MySQL을 이용한 유저 데이터베이스 설계 및 구현
  • Redis를 이용한 이메일 인증과정
  • 카카오 API를 이용한 카카오 로그인 구현
  • EC2환경에서 Nginx, Uvicorn을 이용한 백엔드 서비스 배포

🚩 Trouble Shooting

FRONTEND

🙋🏻‍♀️ 박정원

  • React Player 사용중, state내의 하나의 state를 변경해도 다른 값들이 초기화되는 문제
    • state를 하나로 묶어 관리하는 경우 그 안의 하나의 state가 변경되는 순간 다른 state값이 초기화되기 때문에 필요한 state값을 별개로 관리하고 나머지는 다 고정된 값으로 처리함
  • 공유방에서 영상이 공유되고 있는 상태에서 제 3자가 들어올 때 영상이 정상 작동하지 않는 문제
    • 재생 초기값을 재생으로 두고 제3자 입장시 1초의 타이머를 작동해 1초에 한번씩 받는 싱크를 받으면 재생유지, 받지 않으면 일시정지 상태로 처리
  • 존재하지 않는 방 링크 접속되는 문제
    • backend에서 방 접속시 get요청으로 방 유무를 값을 받고 존재하지 않는 방 링크로 접속할 시 PrivateRoute로 이동해 검증과정을 거친 후 404notfound페이지로 이동

BACKEND

🙋🏻 박성준

  • EC2 접속 에러(링크)
  • 배포 서버와 클라이언트 간 CORS 에러(링크)
  • 방마다 브로드 캐스팅을 다르게 하는 방법
    • Client에서 들어오는 publish주소에 roomLink를 붙쳐 해당 룸에 대한 접속 유저를 서로 다른 브로드캐스팅을 하게끔 구성하여 로직 해결
  • Redis Null 에러
    • findById에서 Redis에 저장된 데이터가 Null이라 생기는 문제임을 확인
    • RedisTemplate로 레디스를 Set형태로 관리하므로써, 레디스 조회/저장/삭제 기능에서 생기는 에러들을 해결
  • Redis 저장 키값이 중복되는 에러
    • 해당되는 키값이 중복되어 저장됨으로써 데이터가 합쳐지는 에러 발생함을 확인
    • <RoomLink, HostId>, <RoomLink, VideoUrl>, <RoomLink, Users> 에 대한 각각의 RoomLink에 식별될 수 있는 문자를 넣어 구분해서 해결
  • 웹소켓 테스트 환경에 대한 어려움
    • PostMan, Chrome Extension을 활용한 웹소켓 테스트가 어려워 직접 프론트를 구성해 웹소켓 브로드 캐스팅 테스트 진행할 수 있게 해결
  • 방 참여자를 순서대로 오지 않는 문제
    • 순서를 유지 하기 위해 Redis Set자료형을 List로 파싱하여 데이터 전송하여 문제 해결
  • 호스트가 방 나갈 때 레디스에 데이터가 삭제되지 않는 문제
    • 방 생성시 HostId에 대한 레디스 레포지토리 로직을 구현해 문제 해결

🙋🏻 이효승

  • 문제: 영상이 재생중인 방에 새로운 클라이언트가 접속하는 경우 url값이 잘못오는 문제발생
    • 원인: 서버에서 url에 대해 redis set의 add로 값을 넣고 pop메서드로 값을 꺼내서 보내도록 구현되어있었다. pop은 value에 값이 여러개인경우 랜덤한 값을 꺼내기 때문에 발생한 문제이다.
    • 해결: 스택처럼 list의 leftpush로 넣고 leftpop으로값을 꺼내도록 변경했다. 가장 마지막으로 들어간 최신 값을 꺼내오도록 동작한다.
    • 추가로 url값을 계속 저장하도록 한 것은 추후에 추가될 재생목록 기능을 염두하고 한 것이다.

🚩 기타문서

- PMP 문서

PMP 문서

- 최종발표 자료

최종발표 자료

- 와이어 프레임

와이어 프레임

About

스마일게이트 개발 캠프 2022 - 윈터 개발 캠프 2기 - SeaGull

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published