SeaGull
박성준 박정원 이효승 이범수
eGuBa(이거봐)
Contents 목차
개인 목표
01
팀 목표
WorkFlow
03
개발 계획
서비스 개요
02
Personal Goal 개인목표
₩
이범수(BE, ai) : Why
₩
박정원(FE, web) : Why
₩
박정원(FE, web) : How
₩
이범수(BE, ai) : How
Personal Goal 개인목표
₩
₩
이효승(BE)
₩
₩
이효승(BE)
₩
이효승(BE)
₩
이효승(BE) : Why
₩
이효승(BE)
₩
이효승(BE)
₩
이효승(BE)
₩
이효승(BE) : How
박성준(BE) : How
실시간 통신을 다루는 소켓 API 구현해보기
박성준(BE) : Why
Personal Role 개인역할
₩
박성준(BE)
₩
이범수(BE, ai)
₩
박정원(FE, web)
추천 알고리즘
유저 데이터와 연동
₩
이효승(BE)
Personal Role 목표 달성
₩
₩
박성준(BE)
이범수(BE, ai)
₩
박정원(FE, web)
₩
이효승(BE)
1. 어떤것이 좋고 나쁜지 판단하는 능력 기르기 - 나의 결정에 대한 근거 기록하기(실패): 프로젝트 회의 진행중에 계속 질문하고 내 생각 말하고 하면서 여러 생각을 듣고 같이 판단하는 기회를 많이 가질 수 있었습니다. 세부목표는 실패했지만 근본적인 목표에 다가갈 수는 있었다고 생각합니다.
2. 서버 구조에 대한 전반적인이해 - 구현단계 이전에 스프링 프레임워크를 이용한 미니 프로젝트 1개 완성하기(성공): 영상공유 로직을 만들기 위해 간단한 웹소켓 서버를 만들었습니다. 이를 통해 스프링 프레임워크의 기본적인 사용법을 익히고 서버 프로그램의 간단한 구조와 웹소켓 통신을 서버에서 가능하게 하는 방법을 알게되었습니다.
3, 협업 경험하고 노하우 알기 - 팀 워크플로우에 따른 단계별 결과 문서 내기(실패): 세부목표를 달성하지는 못했지만 팀플경험이 많은 팀원들이 있어서 깃 사용법이나, api명세서 작성법등 여러 팀플관련 경험을 할 수 있었습니다.
Personal Role 시행 착오
₩
박성준(BE)
-> 테스트용 웹을 구축
-> 스톰프만으로 확실한 기능을 구현
- 레디스 자료구조 동작 구조를 이해 못해 Null값 처리를 못함
-> 직접 RedisTemplate을 사용해 자료구조를 사용함으로써 동작원리를 이해
₩
이범수(BE, ai)
-> 토큰을 DB에 저장하는 방식, 토큰 Fingerprint를 이용하는 방식 둘 다 생각을 해봤지만 이런 경우 stateless 특성의 토큰 인증을 사용할 이유가 없다는 결론이 나옴으로써 디스코드처럼 중복 로그인을 허용하는 방식으로 결정함
-> Redis와 Redis 내부의 setex 기능을 사용하여 성능과 메모리 효율을 둘 다 향상시킴
₩
박정원(FE, web)
-> 필요한 state값을 별개로 관리하고 나머지는 다 고정된 값으로 처리
-> 재생 초기값을 재생으로 두고 제3자 입장시 1초에 한번씩 받는 싱크를 받으면 재생유지, 안받으면 일시정지 상태로 처리
-> backend에서 방 접속시 get요청으로 방 유무를 값을 받고존재하지 않는 방 링크로 접속할 시 PrivateRoute로 이동해 검증과정을 거친 후 404notfound페이지로 이동
₩
이효승(BE)
1. 웹소켓 채팅 서버와 방 구현 로직이 완성되지 않은 상태에서 영상 공유로직을 개발해야하는 문제(웹소켓 서버가 완성되어야 그 서버를 통해서 통신테스트를 할 수 있었음)
-> 직접 세부기능을 제외한 간단한 웹소켓 통신 서버를 구현해 테스트함
2. 영상을 공유하기위해 영상 파일을 직접 전송하는 방법과 영상 명령을 전송하는 방법 선택 문제
->우리가 필요한 영상공유는 영상시청을 위한 것이었기 때문에 재생품질이 중요했음 첫번째 방법은 품질을 보장할 수 없었기 때문에 두번째 방법을 선택했고 영상싱크를 맞추기 위해 따로 로직을 구현 적용함
3. 영상이 재생중인 방에 새로운 클라이언트가 접속하는 경우 url값이 잘못오는 문제발생
-> 서버에서 url에 대해 redis set의 add로 값을넣고 pop으로 꺼내고 있는 상황이었다. pop메서드는 set의 여러 value중 하나를 랜덤으로 빼는 메서드이다. 그래서 가장 최근에 보낸 url을 가져오지 못했다. 그래서 stack처럼 list의 leftpush로 넣고 leftpop으로 빼는식으로 구현해 가장 최근에 넣은값을 가져오도록 수정했다.
코드통합과 버전관리
깃허브 관리
커밋 메시지 컨벤션을 정하고 �이에 따라 코드관리
유지보수를 고려한 협업
작업 내용 문서화
지속적인 소통과 빠른 피드백
스크럼 회의
생산성 고려한 개발
팀 내 코드 컨벤션에 따라� Lint를 활용해 코드 작성
Team Goal 팀 목표
협업
경험
NEEDS
사람들과의 소통을 실현하는 차별성을 가진 영상 공유 플랫폼
Summary
Service 서비스 개요
Service 서비스 개요
What is
??
친구들과 함께 하는 영상 공유 플랫폼
원격 동영상 스트리밍
채팅 서비스
Daily Scrum Meeting
Sprint Review
Git Management
WorkFlow 워크플로우
Ground Rules 그라운드룰
📌 회의시간
대면 회의)
비대면 회의
📌 코어타임
📌 티타임
📌 의사결정 방식
📌 불만을 이야기하는 채널
📌 지양해야 할 것
🙋🏻 기타 사항
✔️ 대면미팅 시 취미 공유시간 갖기
시간을 갖기로 함
Development Plan 개발계획
| 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
문서 | | | | | | | | |
주요 기능 | | | | | | | | |
테스트 | | | | | | | | |
자료조사
성능 테스트
회원 관리 기능, 영상 공유, 채팅 기능 구현
JAN
PMP작성
FEB
화면 구성 뷰 구현
FE, BE 완성
기능 순 연동
아키텍처 설계
API 명세서 작성
erd 설계
와이어프레임 제작
Development Plan 개발계획
Front-End
Development Plan 개발계획
Back-End
Development Plan Git Flow
Git Flow
master
develop
feature
Development Plan Git Convention
Git Convention
# Git Message Structure
- 기본적으로 두 줄을 기본으로 한다.
# Commit Type
- Feat : 새로운 기능 추가
- Fix : 버그 수정
- Docs: 문서 수정
- refactor : 코드 리펙토링
- test : 테스트 코드
- style : 코드 변경이 없는 경우
( ex. 세미콜론 추가 정도 )
[ 브랜치 종류 ] - origin
1) master : 제품으로 출시될 브랜치
2) develop
- 개발이 완료된 최신 브랜치,
- 신규 개발된 내역이 처음 합쳐지는 브랜치
3) feature : 각자의 개인 작업 브랜치
[ 브랜치 종류 ] - local
1) main
2) PR 용도 브랜치
3) 작업 브랜치
# Subject
- 50자를 넘기지 않는다.
- 대문자로 작성한다.
- 마침표를 붙치지 않는다.
[깃 메뉴얼 문서 작성 ]
클라이언트
Web
데이터베이스
Redis
MySQL
서버
[멤버십]
유저 관리
[실시간 서비스]
화면 공유 기능
eGuBa’s Architecture
Sock.js
실시간 통신
Stomp
Spring boot
Thymeleaf
HTTP
Elastic Search
Kafka
Redis
Frontend
페이지 목록 | 라이브러리, 오픈소스 | 주요 기능 |
로그인�/회원가입�/회원정보 수정 | - |
|
원격 영상 공유 �페이지 | SockJS |
|
동영상 플레이어 | react-player |
|
영상 공유 관련 모달창 | SockJS |
|
페이지 뷰에 대한 와이어 프레임 Figma를 사용해서 거의 완료
Backend - Server
서버 | 프레임워크 및 라이브러리 | 상세 설명 | 기능 |
영상 공유 | Stomp Redis | 영상 싱크 동작 | 웹 소켓 영상 스트리밍 Redis: 공유 url 저장 |
채팅 | Stomp Redis | 실시간 메시지 전송 | 채팅 중계 기능 Redis: 방정보, 접속유저 정보 저장 |
멤버십 | FastAPI MySQL Redis | 유저 서비스 | 유저, 관리자 데이터 수집 및 관리 저장 데이터에 대한 CRUD기능 |
Backend - Server (DB 아키텍처)
RDBMS : MySql
In-Memory : Redis
저장 데이터 | 저장 형태 |
방 링크, 호스트 이름 | Set 자료구조 < String, String > |
방 링크, 사용자 정보 | Set 자료구조 < String, String > |
방 링크, 영상 Url | Set 자료구조 < String, String > |
이메일 인증정보 | Set 자료구조 < String, String > |