https://github.com/boostcampwm-2024/web12-mafiacamp
AI가 감시하는 가운데 미션을 완수하고 승리하라! 새로운 차원의 화상 마피아 게임🕵🏻♂️
https://github.com/boostcampwm-2024/web12-mafiacamp
mafia nestjs nextjs nextjs15 socket socket-io typeorm typescript webrtc
Last synced: 6 months ago
JSON representation
AI가 감시하는 가운데 미션을 완수하고 승리하라! 새로운 차원의 화상 마피아 게임🕵🏻♂️
- Host: GitHub
- URL: https://github.com/boostcampwm-2024/web12-mafiacamp
- Owner: boostcampwm-2024
- Created: 2024-10-28T02:13:07.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-11-05T23:44:28.000Z (11 months ago)
- Last Synced: 2024-11-06T00:30:42.876Z (11 months ago)
- Topics: mafia, nestjs, nextjs, nextjs15, socket, socket-io, typeorm, typescript, webrtc
- Homepage:
- Size: 7.74 MB
- Stars: 6
- Watchers: 3
- Forks: 0
- Open Issues: 64
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
MafiaCamp 🕵🏻♂️
> 배포 링크
**https://mafiacamp.p-e.kr/**
[](https://hits.seeyoufarm.com)
목차
- [🤔 기존 마피아 게임의 문제](#-기존-마피아-게임의-문제)
- [🤩 MafiaCamp로 해결하자!](#-MafiaCamp로-해결하자)
- [💾 주요 기능](#-주요-기능)
- [🏆 문제 해결 경험 및 기술적 도전](#-문제-해결-경험-및-기술적-도전)
- [🏛️️ 아키텍처](#%EF%B8%8F%EF%B8%8F-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98)
- [📚 기술스택](#-기술스택)
- [🌱 MafiaCamper 소개](#-mafiacamper-소개)
## 🤔 기존 마피아 게임의 문제

## 🤩 MafiaCamp로 해결하자!

## 💾 주요 기능
### 온라인 상태 표시
- 사용자들은 실시간으로 현재 온라인 상태인 유저의 수와 명단을 확인할 수 있습니다.
- 현재 게임에 참여 중인 사용자와 그렇지 않은 사용자를 구분해 표시합니다.
### 직업 별 임무 수행

- 게임 참여자에게는 `시민`, `경찰`, `의사`, `마피아`로 구성된 네 가지 직업 중 하나가 부여됩니다.
- 게임 참여자는 자신에게 부여된 직업에 따라 승리를 위해 정해진 임무를 수행합니다.
- 🙍🏻`시민`: 명 추리로 마피아를 가려내야 합니다.
- 👮🏻`경찰`: 플레이어의 정체를 조사할 수 있습니다.
- 🧑🏻⚕️`의사`: 특정 시민을 보호할 수 있습니다.
- 🕵🏻♂️`마피아`: 제거할 대상을 선택합니다.
### 채팅 기능

- 게임이 시작하기 전과 후 방에 있는 플레이어들과 채팅으로 대화를 나눌 수 있습니다.
- 또한 `마피아`끼리만 대화할 수 있는 비밀 채팅 방이 부여됩니다.
### 실시간 투표 기능
- 투표는 실시간으로 진행이 되며, 모든 플레이어가 투표 현황을 확인할 수 있습니다.
- 한 턴에 투표는 총 2단계로 이루어집니다.
- 1차 투표
- 토론 이후, `마피아`로 의심되는 사람에게 투표합니다.
- 동률일 경우 최종 변론 단계로 넘어갑니다.
- 최종 투표
- 최종 변론 이후, 플레이어들은 최종적으로 `마피아`를 추리하여 투표합니다.
- 투표 결과에 따라 게임의 승리 팀이 결정됩니다.
### 마피아 임무 수행

- `마피아` 팀은 밤 시간 동안 `시민`들 중 제거할 한 명을 선정합니다.
- `마피아` 간의 협력이 게임 승패를 좌우하는 중요한 요소입니다.
- `마피아`에게 선택된 `시민`이 `의사`에게 보호 받지 못할 시, 아침 시간에 게임에서 탈락하게 됩니다.
### 최종 결과

- 게임의 승리 조건에 따라 `시민` 팀 또는 `마피아` 팀의 승리 여부를 발표합니다.
- 게임 결과는 모든 플레이어에게 실시간으로 공유됩니다.
## 🏆 문제 해결 경험 및 기술적 도전
### `FE`
| **제목** | **핵심 키워드** |
| --- | --- |
| [🐳 Next.js와 Docker를 사용한 빌드 최적화하기](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%F0%9F%90%B3Next.js%EC%99%80-Docker%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EB%B9%8C%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94%ED%95%98%EA%B8%B0) | `Front-end` `Next.js` `Docker` `최적화` `빌드` |
| ↪ [Enter키 이벤트 중복 호출 문제](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/Enter%ED%82%A4-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%A4%91%EB%B3%B5-%ED%98%B8%EC%B6%9C-%EB%AC%B8%EC%A0%9C) | `Front-end` |
| 🗳️ [투표 대상자 지정 오류](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%ED%88%AC%ED%91%9C-%EB%8C%80%EC%83%81%EC%9E%90-%EC%A7%80%EC%A0%95-%EC%98%A4%EB%A5%98) | `JavaScript` |
| 💵 [캐시로 인한 미들웨어 미호출 및 페이지 전환 오류](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%EC%BA%90%EC%8B%9C%EB%A1%9C-%EC%9D%B8%ED%95%9C-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-%EB%AF%B8%ED%98%B8%EC%B6%9C-%EB%B0%8F-%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%A0%84%ED%99%98-%EC%98%A4%EB%A5%98) | `Front-end` `Next.js` `Cache` `Middleware` `Authentication` `Authorization` |
| ⚫ [다크 모드에서 텍스트가 보이지 않는 문제](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%EB%8B%A4%ED%81%AC-%EB%AA%A8%EB%93%9C%EC%97%90%EC%84%9C-%ED%85%8D%EC%8A%A4%ED%8A%B8%EA%B0%80-%EB%B3%B4%EC%9D%B4%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%AC%B8%EC%A0%9C) | `DarkMode` |
| ⚠️[게임 방에서 새로고침 또는 브라우저 탭을 닫을 때의 예외 처리](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%EA%B2%8C%EC%9E%84-%EB%B0%A9%EC%97%90%EC%84%9C-%EC%83%88%EB%A1%9C%EA%B3%A0%EC%B9%A8-%EB%98%90%EB%8A%94-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%ED%83%AD%EC%9D%84-%EB%8B%AB%EC%9D%84-%EB%95%8C%EC%9D%98-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC) | `Exception` `beforeunload` |
### `BE`
| **제목** | **핵심 키워드** |
| --- | --- |
| ⭐ [웹소켓 방 관리 구조 개선](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%EC%9B%B9%EC%86%8C%EC%BC%93-%EB%B0%A9-%EA%B4%80%EB%A6%AC-%EA%B5%AC%EC%A1%B0-%EA%B0%9C%EC%84%A0) | `WebSocket` `Socket.IO` |
| 🚪 [Pub-Sub 패턴을 통한 실시간 방 목록 조회 기능 개발](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/Pub%E2%80%90Sub-%ED%8C%A8%ED%84%B4%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%B0%A9-%EB%AA%A9%EB%A1%9D-%EC%A1%B0%ED%9A%8C-%EA%B8%B0%EB%8A%A5-%EA%B0%9C%EB%B0%9C) | `Pub/Sub` `Socket.IO` |
| 🔁 [유한 상태 기계를 이용한 게임 진행 모델링](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%EC%9C%A0%ED%95%9C-%EC%83%81%ED%83%9C-%EA%B8%B0%EA%B3%84%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B2%8C%EC%9E%84-%EC%A7%84%ED%96%89-%EB%AA%A8%EB%8D%B8%EB%A7%81) | `오토마타 이론` |
| [🔐 동시성 이슈를 해결하기 위한 LockManager 만들기](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%F0%9F%94%90-%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%9D%B4%EC%8A%88%EB%A5%BC-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-LockManager-%EB%A7%8C%EB%93%A4%EA%B8%B0) | `async-mutex` |
| [⏰ RxJS로 실시간 타이머 구축하기](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%E2%8F%B0-Rxjs%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%B0%A9-%ED%83%80%EC%9D%B4%EB%A8%B8-%EA%B4%80%EB%A6%AC) | `RxJS` |
| [🐳 Next.js와 Docker를 사용한 빌드 최적화하기](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%F0%9F%90%B3Next.js%EC%99%80-Docker%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EB%B9%8C%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94%ED%95%98%EA%B8%B0) | `Front-end` `Next.js` `Docker` `최적화` `빌드` |
| [🟢 Redis를 통한 유저 온라인 상태 관리 시스템 구현하기](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/Redis%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%9C%A0%EC%A0%80-%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0) | `Redis` `Pub/Sub` |
| [🐳](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/%F0%9F%90%B3Next.js%EC%99%80-Docker%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EB%B9%8C%EB%93%9C-%EC%B5%9C%EC%A0%81%ED%99%94%ED%95%98%EA%B8%B0) [openvidu 에러 디버깅을 위한 Docker 개발환경 설정](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/openvidu-%EC%97%90%EB%9F%AC-%EB%94%94%EB%B2%84%EA%B9%85%EC%9D%84-%EC%9C%84%ED%95%9C-Docker-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95) | `Docker` `OpenVidu` `WebRTC` |
| 📑 [NestJS, mkcert CA 인증서 문제해결 방법](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/NestJS,-mkcert-CA-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95) | `NestJS` `SSL 인증서` |
| 🧊 [openvidu ICE 후보 관련 오류](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/openvidu-ICE-%ED%9B%84%EB%B3%B4-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98) | `OpenVidu` `WebRTC` `ICE` |
| 🔒 [mutex lock 문제](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/mutex-lock-%EB%AC%B8%EC%A0%9C) | `Mutex` |
| ⚠️ [openvidu 세션 종료 메서드 오류](https://github.com/boostcampwm-2024/web12-MafiaCamp/wiki/openvidu-%EC%84%B8%EC%85%98-%EC%A2%85%EB%A3%8C-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%98%A4%EB%A5%98) | `OpenVidu` `Session` |
## 🏛️️ 아키텍처

## 📚 기술스택
| 분류 | 기술 스택 |
| ------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 공통 |        |
| FE |       |
| BE |    |
| Database |   |
| Infrastructure |     |
| Collaboration Tools |     |
## 🌱 MafiaCamper 소개
| J051_김영현 | J085_노현진 | J149_심재성 | J251_최경수 |
|:------------------------------------------------------------------:| :-------------------------------------------------------------------: | :--------------------------------------------------------------------: | :----------------------------------------------------------------------: |
||
|
|
|
| [@0Chord](https://github.com/0Chord) | [@HyunJinNo](https://github.com/HyunJinNo) | [@simjaesung](https://github.com/simjaesung) | [@Gyeongsu1997](https://github.com/Gyeongsu1997) |
| Back-end | Front-end | Back-end | Back-end |