프로젝트 - stove-smooth/sgs-smooth GitHub Wiki

- 대용량 서비스 설계 및 구현을 경험하기 위해 다수의 사용자, 다양한 서비스들의 연관 관계 속에서 안정적으로 서비스되고 있는 애플리케이션들을 고려했다.
- 대용량 서비스 설계 과정에서 벤치마킹 대상으로 삼을 수 있다.
- 디스코드의 서버처럼 커뮤니티 단위로 사용자가 자유롭게 의사소통하는 환경의 개발을 경험하고 싶다.
- 특히 서버의 채널처럼 사용자가 자유롭게 커스터마이징하여 만들어가는 공간을 개발하며 사용자 친화적인 웹사이트 개발 경험을 갖고 싶다.
- 디스코드는
커뮤니티
-카테고리
-채널
-스레드
와 같은 계층적 구조를 바탕으로 커뮤니티 내 권한, 알림, 멤버 등을 자유롭게 설정할 수 있고 또한 각 채널마다 구성을 달리 할 수 있다.
- 단순히 텍스트 메세지를 전달하는 메신저가 아닌 다양한 수단을 통해 의사소통을 진행하는 서비스를 설계하고 개발하면서 제공 서비스에 따른 다양한 서버 아키텍처 설계에 대한 경험과 다양한 의사소통 방법을 매끄럽게 화면에 표현하는 경험을 갖고 싶다.
- 애플리케이션의 생명주기에 따른 소켓 통신의 이벤트 처리를 경험할 수 있다.
- 백그라운드 : 실시간 미팅(화면공유, 음성 등) 시
- 포그라운드 : 여러 서버(디스코드의 server, 확장된 Room 개념)에서의 실시간 메시징 이벤트 처리
- 네트워크 환경 : reconnection에 따른 socket 상태 처리
따라서 이번 프로젝트에서 팀의 목표와 각 개개인의 목표를 성취하기 위해 Discord를 선택하게 되었다.
박병찬(Backend): MSA 구조를 이해하고 설계하기!
msa 구조의 데이터 동기화 문제를 kafka message queue를 이용하여 해결
- server routing
- token validation filter 처리
- websocket를 통해 통신을 처리하며 kafka를 이용하여 비동기 작업을 통해 메세지를 처리한다
- 카프카의 구조를 파악하고 여러 클러스터를 관리하며 성능 개선을 이룬다.
- jwt token 방식 인증 구현
- access token 인증, refresh token + redis 캐시 저장
- 채팅 아키텍처의 흐름에 맞는 알림 서버 구현
- kafka message queue를 이용한 비동기 처리.
- fcm 연동
김희동(Backend): 서버 아키텍처에 대한 이해와 함께 성능 개선을 경험하자!
- 시그널링 서버와 미디어 서버 개발을 통해 미디어 스트림 전송과 관련한 아키텍처 설계 및 개발 경험을 한다.
- 사용자의 수에 따른 연결 관리와 미디어 스트림의 분배 방법을 달리하면서 동일한 기능에 대한 성능 개선을 한다.
- 커뮤니티 단위의 메신저 구조와 사용자의 커스터마이징에 대응할 수 있는 효과적인 도메인 설계를 한다.
- 타 마이크로 서비스(유저 서비스, 상태관리 서버, etc.) 간의 연동을 통해 MSA에 대한 이해와 개발을 한다.
김민지(Frontend): 클린 코드를 작성하는 개발자가 되기!
UI/UX 설계, Websocket 연동, WebRTC 연동
- 상당한 양의 클라이언트 코드 속에서 css 선택자명, 변수명, 파일명, 함수명 일관되고 쉽게 이해할 수 있게 작성한다.
- 파일의 목적에 맞게끔 적절히 기능을 나누고, 중복되는 코드는 쉽게 재사용할 수 있게끔 분리하여 작성한다.
-
Figma 이용해서 기존 디스코드 웹 UI를 아카이빙한다.
- Websocket을 통해 실시간 채팅을 연결한다.
- websocket과 함께 연결하여 음성/영상 통화 기능의 개발한다.
- 사용자가 서버를 생성하고 채널을 취향에 맞게 커스터마이징하는 디스코드를 구현하며 사용자 친화적인 웹을 개발한다.
김두리(iOS): 유지 보수하기 쉬운 코드를 작성하기!
-
Figma 이용해서 기존 디스코드 앱 UI 아카이빙
- 자주 사용하는 색상 및 아이콘 등 asset 정의
- 기존 UIKit을 extension 하여 custom
-
StompClient 로 채팅 메시징 처리
- 통신 환경에 대한 적절한 UseCase를 선별하여 ViewModel 설계
- WebRTC client side 구현
-
Starscream 라이브러리 사용 (단순 websocket 통신 연결)
- URLSession의 경우 iOS 13이후에서부터 웹소켓 통신 지원 + 안정성의 문제
- WebRTC 화면 publishing
- Appdelegate 단에서 메시지 수신
- 수신된 메시지별 server/channel 알림
⚠️ **GitHub.com Fallback** ⚠️