Skip to content

Commit

Permalink
docs: ReadMe 업데이트
Browse files Browse the repository at this point in the history
  • Loading branch information
student079 committed Nov 28, 2024
1 parent def2350 commit c256077
Showing 1 changed file with 125 additions and 165 deletions.
290 changes: 125 additions & 165 deletions ReadMe.md
Original file line number Diff line number Diff line change
@@ -1,214 +1,174 @@
<div align="center">
<h1>안녕! 클로바파트라</h1>
# 안녕! 클로바파트라 🗣️

![cool_doge](https://github.com/user-attachments/assets/6fdeaaf2-b1a2-48a7-b182-0fb90c997326)
![image](https://github.com/user-attachments/assets/8001fa14-a691-4693-bd02-9aebd811f548)

<a href="https://clovapatra.com">서비스 바로가기(https://clovapatra.com)</a>

</div>

<br/>
[![Hits Badge](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fboostcampwm-2024%2Fweb19-boostproject&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com)

<p align=center>
<a href="https://github.com/orgs/boostcampwm-2024/projects/115/views/1">백로그 </a>
&nbsp; | &nbsp;
<a href="https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/Convention">컨벤션</a>
&nbsp; | &nbsp;
<a href="https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/Git-Branch-%EC%A0%84%EB%9E%B5">Git Branch 전략</a>
&nbsp; | &nbsp;
<a href="#">Figma(준비중)</a>
&nbsp; | &nbsp;
<a href="https://github.com/boostcampwm-2024/web19-boostproject/wiki/%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%A3%B0">그라운드 룰</a>
</p>
<a href="https://clovapatra.com">서비스 바로가기(https://clovapatra.com)</a>

<br>
**안녕! 클로바파트라**는 음성 기반 실시간 웹 게임 프로젝트입니다. 이 서비스는 참가자들이 다양한 음성 도전을 통해 실시간으로 소통하며 재미를 느낄 수 있도록 설계되었습니다.

<div align=center>
<a href="https://hits.seeyoufarm.com"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fboostcampwm-2024%2Fweb19-boostproject&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false" width="150px"/></a>
</div>
---

## 📄 목차

- [📄 목차](#-목차)
- [✍🏻 프로젝트 개요](#-프로젝트-개요)
- [🚀 핵심 기능](#-핵심-기능)
- [📜 프로젝트 개요](#-프로젝트-개요)
- [🚀 주요 기능](#-주요-기능)
- [⚙️ 기술 스택](#️-기술-스택)
- [🏛️ 시스템 아키텍처](#️-시스템-아키텍처)
- [🔎 FE 기술적 도전](#-fe-기술적-도전)
- [🔎 BE 기술적 도전](#-be-기술적-도전)
- [🧡 팀원 소개](#-팀원-소개)
- [🛠️ 설치 및 실행 방법](#️-설치-및-실행-방법)
- [📂 프로젝트 구조](#-프로젝트-구조)
- [🔗 관련 문서](#-관련-문서)

<br />
---

## ✍🏻 프로젝트 개요
## 📜 프로젝트 개요

**안녕! 클로바파트라**음성 기반 발음 게임 프로젝트로 사용자들이 발음과 관련된 다양한 도전을 통해 즐거움을 느끼고, 실시간으로 소통할 수 있도록 도와주는 서비스입니다.
**안녕! 클로바파트라**참가자들이 음성을 기반으로 도전을 수행하며, 게임을 즐기는 실시간 소셜 플랫폼입니다.

사용자들은 음성 인식과 텍스트 변환 기술을 체험하고, 게임을 통해 발음을 개선하며 소통 능력을 향상시키는 경험을 할 수 있습니다.
- 사용자들은 자신의 목소리로 게임을 플레이하며, 발음, 음정 등의 도전을 통해 경쟁합니다.
- WebRTC와 음성 분석 기술을 활용하여 음성 데이터를 실시간으로 처리하며, Clova Speech Recognition API를 통해 발음의 정확도를 측정합니다.

<br />
---

## **🔎 핵심 기능**
## 🚀 주요 기능

### **🎮 멀티 플레이어 게임**
### 1. 멀티플레이 지원

**게임 방 만들기**
- **방 개설 및 관리**: 사용자는 게임 방을 생성하고 친구를 초대하여 실시간으로 소통할 수 있습니다.
- **실시간 음성 통화**: WebRTC 기반의 실시간 통화 기능을 제공합니다.
- **참가자 관리**: 방 참여, 준비 상태 토글, 강퇴 등의 기능을 지원합니다.

> 친구랑 게임하고 싶으세요? 걱정하지 마세요. 방을 하나 만들고 링크만 공유하면 상대방이 쉽게 접속할 수 있고, 처음보는 사람과도 같이 게임을 즐길 수 있도록 개설된 방에 들어갈 수도 있습니다. 사용자들은 직접 방을 개설하고, 다른 사람들을 초대해 실시간으로 소통할 수 있습니다. 닉네임을 지정하여 방에 참여하고, 참가자 목록을 통해 현재 방에 있는 모든 사람을 확인할 수 있습니다.
### 2. 게임 모드

- 방 개설 및 링크 공유
- 참가자 닉네임 지정 및 실시간 참가자 목록 조회
- 음성 기반의 실시간 통화 지원
- **클레오파트라 모드**: 이전 참가자보다 높은 음정을 내는 것을 목표로 하는 도전 게임.
- **발음 도전 모드**: 주어진 지문을 정확히 발음하여 Clova Speech Recognition API로 점수를 측정.

### **🎮 안녕! 클로바파트라**
### 3. 음성 분석

**음성 스트리밍**
- **음정 분석**: 실시간으로 음성 데이터를 분석하여 음정의 높낮이를 비교.
- **발음 점수화**: Clova Speech Recognition API를 활용해 발음 정확도를 측정.
- **볼륨 분석**: 음량을 분석하여 시각적으로 표현.

> 상대방의 플레이를 숨죽이고 조용히 듣거나, 에베베~ 방해하며 게임에 직접적으로 영향을 줄 수 있습니다. 상대를 최대한 킹받게하세요!
---

**발음 도전**
## ⚙️ 기술 스택

> 발음 도전 스테이지는 언제 누가 걸릴지 모릅니다. 목표 문장이 주어지면, 정확하게 발음해야 다음 단계로 진행할 수 있어요. 긴장하세요. 어떤 문장이 나올지 모릅니다.
### 프론트엔드

- **클로바파트라 게임**:
- 서버 소켓을 통해 사용자별 음성 데이터를 수집하고, 이를 텍스트와 음정으로 변환
- **게임 로직**:
- **React**: 사용자 인터페이스 개발
- **WebRTC**: 실시간 통신 및 음성 데이터 전송
- **Socket.IO**: 실시간 통신 구현

1. **방 개설 및 참여**
### 백엔드

사용자는 방을 개설하거나 다른 사용자가 개설한 방에 참가할 수 있습니다. 방에 2명 이상의 참가자가 모이면 게임을 시작할 수 있습니다.
- **NestJS**: 서버 및 게임 로직 관리
- **Express**: 음성 처리 및 시그널링 서버
- **Redis**: Pub/Sub 및 캐싱, 방 저장
- **MySQL**: 유저 데이터 저장

2. **게임 시작 및 순서 설정**
### 기타

게임이 시작되면 참가자 순서는 랜덤으로 지정됩니다. 지정된 순서에 따라 참가자들이 차례로 게임에 도전합니다.
- **Naver Clova Speech Recognition API**: 음성 데이터 분석
- **Docker**: 컨테이너화 및 배포
- **NGINX**: 로드 밸런싱 및 요청 라우팅

3. **음성 도전 단계**
---

참가자는 이전 순서의 사용자보다 높은 음을 내야 성공하며, 실패 시 탈락합니다.
## 🏛️ 시스템 아키텍처

4. **발음 도전 스테이지**
![System Architecture](https://github.com/user-attachments/assets/25683f10-1daa-41d8-a82f-5fe7f2b3f55f)

게임 중간에 발음 도전 스테이지가 등장할 수 있으며, 이 단계에서는 정확하게 제시된 문장을 발음해야 성공입니다. 실패 시 탈락하게 됩니다.
### 주요 컴포넌트

5. **게임 종료**
1. **클라이언트 그룹**:
- WebRTC 기반의 P2P MESH 연결로 음성 데이터 전송.
- React로 구성된 사용자 인터페이스.
- Zustand를 통한 전역 상태 관리.
2. **게임 서버**:
- Socket.IO와 NestJS를 통해 실시간 게임 로직을 관리.
3. **시그널링 서버**:
- WebRTC 연결 초기화를 위한 시그널링 처리.
4. **음성 처리 서버**:
- Express 기반 음성 데이터 분석 처리.
- 병목 현상 방지를 위한 다중화
5. **저장소**:
- Redis: Pub/Sub 및 게임 상태 캐싱.
- MySQL: 데이터 영구 저장.

도전 과정을 거쳐 최종적으로 한 명의 사용자만 남을 때까지 게임이 계속됩니다. 마지막까지 남은 참가자가 승리합니다.
---

<br />
## 🛠️ 설치 및 실행 방법

## 🏛️ 시스템 아키텍처
### 1. **환경 변수 설정**

`dotenv` 파일을 생성하고 다음 환경 변수를 설정하세요:

![시스템 아키텍처](https://github.com/user-attachments/assets/dc8c7236-9963-4d6a-b7e0-1346d24e8cb9)

```mermaid
flowchart TB
%% ===========================================
%% 클라이언트 그룹 정의
%% ===========================================
subgraph ClientGroup["클라이언트 그룹(Mesh)"]
direction LR
Client1["클라이언트 1"]
Client2["클라이언트 2"]
Client3["클라이언트 3"]
Client4["클라이언트 4"]
%% P2P 연결
Client1 <--> |P2P WebRTC| Client2
Client1 <--> |P2P WebRTC| Client3
Client1 <--> |P2P WebRTC| Client4
Client2 <--> |P2P WebRTC| Client3
Client2 <--> |P2P WebRTC| Client4
Client3 <--> |P2P WebRTC| Client4
end
%% ===========================================
%% 시스템 컴포넌트 정의
%% ===========================================
%% 로드 밸런서
subgraph LoadBalancer["로드 밸런서"]
direction TB
NGINXMain["NGINX"]
end
%% 게임 서버
subgraph GameServer["게임 서버 (NestJS)"]
direction TB
GameLogic["게임 로직"]
WebSocket["WebSocket 핸들러"]
GameState["게임 상태 관리"]
end
%% 시그널링 서버
subgraph SignalingServer["시그널링 서버 (Express)"]
direction TB
SignalingLogic["시그널링 로직"]
WebRTCHandler["WebRTC 핸들러"]
end
%% 음성 처리 서버 클러스터
subgraph VoiceProcessing["음성 처리 서버 (Express) 클러스터"]
direction TB
VoiceServer1["음성 처리 서버 1"]
VoiceServer2["음성 처리 서버 2"]
VoiceServer3["음성 처리 서버 3"]
end
%% 외부 API
ClovaAPI["Clova Speech Recognition API"]
%% 저장소
subgraph Storage["저장소"]
direction TB
Redis[(Redis)]
MySQL[(MySQL)]
end
%% ===========================================
%% 시스템 연결 정의
%% ===========================================
%% 1. 프론트엔드 연결
ClientGroup <--> |HTTPS| NGINXMain
%% 2. 로드 밸런서 연결
NGINXMain <--> |게임 트래픽| GameServer
NGINXMain <--> |시그널링 트래픽| SignalingServer
NGINXMain <--> |음성 트래픽| VoiceProcessing
%% 3. 데이터 저장소 연결
GameServer <--> Redis
GameServer <--> MySQL
SignalingServer <--> Redis
%% 4. 서비스 간 연결
VoiceProcessing --> |음성 데이터 처리 결과| GameServer
GameServer <--> |게임 데이터| ClientGroup
%% 5. 외부 API 연결
VoiceServer1 <--> |음성 인식 요청| ClovaAPI
VoiceServer2 <--> |음성 인식 요청| ClovaAPI
VoiceServer3 <--> |음성 인식 요청| ClovaAPI
```env
REDIS_HOST=localhost
REDIS_PORT=6379
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=yourpassword
CLOVA_API_KEY=your_clova_api_key
```

<br />
### 2. **프로젝트 클론**

## 🔎 FE 기술적 도전
```bash
git clone https://github.com/boostcampwm-2024/web19-boostproject.git
cd web19-boostproject
```

### 추가 예정
### 3. **의존성 설치**

<br />
```bash
npm install
```

### 4. **로컬 개발 서버 실행**

```bash
npm run dev
```

### 5. **Docker로 실행(진행중)**

```bash
docker-compose up --build
```

---

## 📂 프로젝트 구조

```plaintext
web19-boostproject/
├── fe/ # Frontend(React 기반 클라이언트)
│ ├── src/ # 소스 코드 폴더
│ │ ├── components/ # UI 컴포넌트
│ │ ├── hooks/ # Custom Hooks (상태 및 로직 재사용)
│ │ ├── pages/ # 페이지 컴포넌트 (라우트 매핑)
│ │ └── utils/ # 공통 유틸리티 함수
├── be/ # Backend
│ ├── gameServer/ # 게임 로직과 상태 관리를 담당하는 NestJS 서버
│ ├── signalingServer/ # WebRTC 시그널링을 처리하는 Express 서버
│ ├── voiceProcessingServer/ # 음성 데이터를 분석하는 Express 서버
└── docker-compose.yml # Docker 설정 파일 (준비 중)
```

## 🔎 BE 기술적 도전
---

### 추가 예정
## 🔗 관련 문서

<br />
- 🛠️ [AGT - Automatic Git & Github Tool](https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%F0%9F%9B%A0%EF%B8%8F-AGT-%E2%80%90-Automatic-Git-&-Github-Tool)
- 📊 [WebRTC Mesh ‐ 트래픽 계산](https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%F0%9F%93%8A-WebRTC-Mesh-%E2%80%90-%ED%8A%B8%EB%9E%98%ED%94%BD-%EA%B3%84%EC%82%B0)
- 🎢 [WebRTC Mesh - 험난한 여정](https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%F0%9F%8E%A2-WebRTC-Mesh-%E2%80%90-%ED%97%98%EB%82%9C%ED%95%9C-%EC%97%AC%EC%A0%95)
- 📮 [SSE(Server Sent Events)](<https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%F0%9F%93%AE-SSE(Server-Sent-Events)>)
- 💬 [WebRTC를 알아보자](https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%F0%9F%92%AC-WebRTC%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90)
- 📡 [Redis pub/sub를 활용한 SSE 적용기](https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%F0%9F%93%A1-Redis-pubsub%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-SSE-%EC%A0%81%EC%9A%A9%EA%B8%B0)
- 🏗️ [Naver Cloud Platform을 활용한 배포 전략](https://github.com/boostcampwm-2024/web19-Clovapatra/wiki/%E2%98%81%EF%B8%8FNaver-Cloud-Platform%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%B0%B0%ED%8F%AC-%EC%A0%84%EB%9E%B5)

## 🧡 팀원 소개
---

| 김태원 | 정진성 | 박나현 |
| :---------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------: |
| <img src="https://avatars.githubusercontent.com/u/85913822?s=64&v=4" width="120" /> | <img src="https://avatars.githubusercontent.com/u/102852555?s=64&v=4" width="120" /> | <img src="https://avatars.githubusercontent.com/u/116629752?s=64&v=4" width="120"> |
| **BE** | **BE** | **FE** |
| [@dev-taewon-kim](https://github.com/dev-taewon-kim) | [@student079](https://github.com/student079) | [@studioOwol](https://github.com/studioOwol) |
**"안녕! 클로바파트라"와 함께 독창적인 음성 기반 게임의 세계로 빠져보세요!** 🎤

0 comments on commit c256077

Please sign in to comment.