diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..d30d1fab22 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,24 @@ +[submodule "Frontend"] + path = Frontend + url = https://github.com/PNU-Tree/Tree-front +[submodule "Unity-FPS"] + path = Unity-FPS + url = https://github.com/PNU-Tree/unity-FPS-microgame +[submodule "Unity-HDRP"] + path = Unity-HDRP + url = https://github.com/PNU-Tree/unity-HDRP +[submodule "WebRTC-HDRP"] + path = WebRTC-HDRP + url = https://github.com/PNU-Tree/HDRP-signaling +[submodule "WebRTC-FPS"] + path = WebRTC-FPS + url = https://github.com/PNU-Tree/FPS-signaling +[submodule "Backend"] + path = Backend + url = https://github.com/PNU-Tree/backend +[submodule "Infra"] + path = Infra + url = https://github.com/PNU-Tree/Tree-infra +[submodule "Database"] + path = Database + url = https://github.com/PNU-Tree/database diff --git a/Backend b/Backend new file mode 160000 index 0000000000..cff96eb16d --- /dev/null +++ b/Backend @@ -0,0 +1 @@ +Subproject commit cff96eb16dbabaef6d022838f6953f2a7dd69d7c diff --git a/Database b/Database new file mode 160000 index 0000000000..030ad53267 --- /dev/null +++ b/Database @@ -0,0 +1 @@ +Subproject commit 030ad5326732702bd98ef3bb060f925f04c7dd17 diff --git a/Frontend b/Frontend new file mode 160000 index 0000000000..43a7280277 --- /dev/null +++ b/Frontend @@ -0,0 +1 @@ +Subproject commit 43a72802773e4c1178d3346433eebe104c321220 diff --git a/Infra b/Infra new file mode 160000 index 0000000000..2f289853e1 --- /dev/null +++ b/Infra @@ -0,0 +1 @@ +Subproject commit 2f289853e1560500790170d2af253bd94017ad7a diff --git a/README.md b/README.md index fbc0b23f7c..b3e31bc335 100644 --- a/README.md +++ b/README.md @@ -1,205 +1,149 @@ -# Template for Capstone -이 레파지토리는 학생들이 캡스톤 프로젝트 결과물을 위한 레파지토리 생성시에 참고할 내용들을 담고 있습니다. -1. 레파지토리 생성 -2. 레파지토리 구성 -3. 레파지토리 제출 -4. README.md 가이드라인 -5. README.md 작성팁 - ---- - -## 1. 레파지토리 생성 -- [https://classroom.github.com/a/NJK_cPkH](https://classroom.github.com/a/NJK_cPkH) -- 위 Github Classroom 링크에 접속해 본인 조의 github 레파지토리를 생성하세요. -깃헙 클래스룸 레포 생성 - -- 레포지토리 생성 시 팀명은 `TEAM-{조 번호}` 형식으로 생성하세요. -- 예를 들어, 2024년도 3조의 팀명은 `TEAM-03` 입니다. -- 이 경우 `Capstone2024-TEAM-03`이란 이름으로 레파지토리가 생성됩니다. - ---- - -## 2. 레파지토리 구성 -- 레파지토리 내에 README.md 파일 생성하고 아래의 가이드라인과 작성팁을 참고하여 README.md 파일을 작성하세요. (이 레파지토리의 SAMPLE_README.md 참조) -- 레파지토리 내에 docs 디렉토리를 생성하고 docs 디렉토리 내에는 과제 수행 하면서 작성한 각종 보고서, 발표자료를 올려둡니다. (이 레파지토리의 docs 디렉토리 참조) -- 그 밖에 레파지토리의 폴더 구성은 과제 결과물에 따라 자유롭게 구성하되 가급적 코드의 목적이나 기능에 따라 디렉토리를 나누어 구성하세요. - ---- - -## 3. 레파지토리 제출 - -- **`[주의]` 레파지토리 제출**은 해당 레파지토리의 ownership을 **학과 계정**으로 넘기는 것이므로 되돌릴 수 없습니다. -- **레파지토리 제출** 전, 더 이상 수정 사항이 없는지 다시 한번 확인하세요. -- github 레파지토리에서 Settings > General > Danger zone > Transfer 클릭 - 소유주 변경 경로 - -- [ Specify an organization or username ]에 'PNUCSE'를 입력하고 확인 메세지를 입력하세요. - 소유주 변경 - ---- - -## 4. README.md 가이드 라인 -- README 파일 작성시에 아래의 5가지 항목의 내용은 필수적으로 포함해야 합니다. -- 아래의 5가지 항목이외에 프로젝트의 이해를 돕기 위한 내용을 추가해도 됩니다. -- SAMPLE_README.md 이 단순한 형태의 예제이니 참고하세요. - -```markdown -### 1. 프로젝트 소개 -#### 1.1. 배경 및 필요성 -> 프로젝트를 실행하게 된 배경 및 필요성을 작성하세요. - -#### 1.2. 목표 및 주요 내용 -> 프로젝트의 목표 및 주요 내용을 작성하세요. - -### 2. 상세설계 -#### 2.1. 시스템 구성도 -> 시스템 구성도(infra, front, back등의 node 간의 관계)의 사진을 삽입하세요. - -#### 2.1. 사용 기술 -> 스택 별(backend, frontend, designer등) 사용한 기술 및 버전을 작성하세요. -> -> ex) React.Js - React14, Node.js - v20.0.2 - -### 3. 설치 및 사용 방법 -> 제품을 설치하기 위헤 필요한 소프트웨어 및 설치 방법을 작성하세요. -> -> 제품을 설치하고 난 후, 실행 할 수 있는 방법을 작성하세요. - -### 4. 소개 및 시연 영상 -> 프로젝트에 대한 소개와 시연 영상을 넣으세요. - -### 5. 팀 소개 -> 팀원 소개 & 구성원 별 역할 분담 & 간단한 연락처를 작성하세요. -``` - -## 5. README.md 작성팁 -* 마크다운 언어를 이용해 README.md 파일을 작성할 때 참고할 수 있는 마크다운 언어 문법을 공유합니다. -* 다양한 예제와 보다 자세한 문법은 [이 문서](https://www.markdownguide.org/basic-syntax/)를 참고하세요. - -### 5.1. 헤더 Header -``` -# This is a Header 1 -## This is a Header 2 -### This is a Header 3 -#### This is a Header 4 -##### This is a Header 5 -###### This is a Header 6 -####### This is a Header 7 은 지원되지 않습니다. -``` -
- -### 5.2. 인용문 BlockQuote -``` -> This is a first blockqute. -> > This is a second blockqute. -> > > This is a third blockqute. -``` -> This is a first blockqute. -> > This is a second blockqute. -> > > This is a third blockqute. -
- -### 5.3. 목록 List -* **Ordered List** -``` -1. first -2. second -3. third -``` -1. first -2. second -3. third -
- -* **Unordered List** -``` -* 하나 - * 둘 - -+ 하나 - + 둘 - -- 하나 - - 둘 -``` -* 하나 - * 둘 - -+ 하나 - + 둘 - -- 하나 - - 둘 -
- -### 5.4. 코드 CodeBlock -* 코드 블럭 이용 '``' -``` -여러줄 주석 "```" 이용 -"``` -#include -int main(void){ - printf("Hello world!"); - return 0; -} -```" - -단어 주석 "`" 이용 -"`Hello world`" - -* 큰 따움표(") 없이 사용하세요. -``` -
- -### 5.5. 링크 Link -``` -[Title](link) -[부산대학교 정보컴퓨터공학부](https://cse.pusan.ac.kr/cse/index..do) - - - -``` -[부산대학교 정보컴퓨터공학부](https://cse.pusan.ac.kr/cse/index..do) - - -
- -### 5.6. 강조 Highlighting -``` -*single asterisks* -_single underscores_ -**double asterisks** -__double underscores__ -~~cancelline~~ -``` -*single asterisks*
-_single underscores_
-**double asterisks**
-__double underscores__
-~~cancelline~~
-
- -### 5.7. 이미지 Image -``` -Alt text -![Alt text](image URL "Optional title") -``` -- 웹에서 작성한다면 README.md 내용 안으로 이미지를 드래그 앤 드롭하면 이미지가 생성됩니다. -- 웹이 아닌 로컬에서 작성한다면, github issue에 이미지를 드래그 앤 드롭하여 image url 을 얻을 수 있습니다. (URL만 복사하고 issue는 제출 안 함.) - 이슈에 image 올림 - image url 복사 - - -### 5.8. 유튜브 영상 추가 -```markdown -[![영상 이름](유튜브 영상 썸네일 URL)](유튜브 영상 URL) -[![부산대학교 정보컴퓨터공학부 소개](http://img.youtube.com/vi/zh_gQ_lmLqE/0.jpg)](https://www.youtube.com/watch?v=zh_gQ_lmLqE) -``` -[![부산대학교 정보컴퓨터공학부 소개](http://img.youtube.com/vi/zh_gQ_lmLqE/0.jpg)](https://www.youtube.com/watch?v=zh_gQ_lmLqE) - -- 이때 유튜브 영상 썸네일 URL은 유투브 영상 URL로부터 다음과 같이 얻을 수 있습니다. - -- `Youtube URL`: https://www.youtube.com/watch?v={동영상 ID} -- `Youtube Thumbnail URL`: http://img.youtube.com/vi/{동영상 ID}/0.jpg -- 예를 들어, https://www.youtube.com/watch?v=zh_gQ_lmLqE 라고 하면 썸네일의 주소는 http://img.youtube.com/vi/zh_gQ_lmLqE/0.jpg 이다. +# 클라우드 게이밍 시스템 개발 + +## 팀원 소개 +
+ + + + + + + + + + + + + + + + + +
+ 이수빈 + + 이다은 + + 이지민 +
+ + 02ggang9 +
+ 02ggang9@gmail.com +
+
+
+ + llddang +
+ laliddang@gmail.com +
+
+
+ + JJimini +
+ min102602@naver.com +
+
+
+ Infra + + Frontend, Unity + + Backend, Database +
+
+ +## 1. 프로젝트 소개 +### 1.1. 배경 및 필요성 +클라우드 게이밍(Cloud Gaming)은 게임을 클라이언트에 설치하지 않고 스트리밍을 통해 게임을 제공하는 방식이다. 사용자는 네트워크를 통해 서버에서 처리된 게임 영상을 전송받아 게임을 즐길 수 있다. 최근 고성능 게임에 대한 요구가 증가하고 있으며, 다양한 기기에서 게임을 실행하려는 수요가 늘면서 클라우드 게이밍은 빠르게 성장하는 분야가 되었다. 클라우드 게이밍은 사용자가 장치 성능으로 부터 받는 영향을 최소화하고 고화질, 고사양의 게임을 즐길 수 있는 장점을 제공한다. + + +### 1.2. 목표 및 주요 내용 +본 과제의 목표는 클라우드 게이밍 성능을 최적화하고 사용자에게 다양한 환경에서 안정적인 서비스를 제공하는 것이다. Unity Render Streaming 기술을 활용하여 서버에서 실시간으로 고화질의 게임 영상을 렌더링하고 스트리밍한다. 이를 통해 클라이언트 장치의 하드웨어 성능과 운영체제에 영향을 받지 않고 고품질의 게임 경험을 제공할 수 있다. 또한 그래픽 처리 부담을 서버로 이전하여 일관된 게임 품질을 유지할 수 있도록 한다. + +WebRTC(Web Real-Time Communication)를 사용하여 실시간 게임 데이터의 전송 및 스트리밍을 개선한다. 이를 통해 지연 시간을 최소화하고 게임 플레이의 반응성을 향상시킨다. 클라우드 게임에서 중요한 성능 요소인 지연 시간을 줄이기 위해 위의 기술을 통합적으로 활용하여 실시간 데이터 전송 지연을 최소화하는 것을 목표로 한다. + + +## 2. 상세 설계 + +### 2.1. 시스템 구성도 +![시스템 구성도](https://github.com/user-attachments/assets/b03f4f9b-33b0-41e0-bf5e-91b0c03183ac) + +### 2.2. 사용 기술 +**Infra** +- Terraform - v1.9.8 +- Kubernetes - v1.31.1 +- Prometheus - v2.47.0 +- Grafana - v10.1.2 + +**Front** +- Node - v20.11.0 + +**Unity** +- Unity - v2022.3.28f1 + +**Backend** +- Spring boot - v3.3.4 +- Spring Webflux - v6.1.13 +- Spring Security - v6.3.3 +- R2DBC - v1.0.5 +- PostgreSQL - v14 + +## 3. 설치 및 사용 방법 + + +### 프론트엔드 서버 + +`npm run start` 명령어를 통해 로컬 개발 서버를 실행합니다. + +### 백엔드 서버(Spring Boot) + +Spring Boot 백엔드 서버는 `./mvnw spring-boot:run` 명령어를 통해 실행합니다. 프로젝트 디렉토리 내에서 실행해야 하며, 정상 실행 여부는 로그로 확인합니다. + +### 데이터베이스 서버(PostgreSQL) + +PostgreSQL 데이터베이스 서버를 Docker로 설정합니다. 필요한 환경 변수는 다음과 같습니다: +- `POSTGRES_USER`: 데이터베이스 사용자 이름 +- `POSTGRES_PASSWORD`: 데이터베이스 비밀번호 +- `POSTGRES_DB`: 생성할 데이터베이스 이름 +Docker를 통해 컨테이너를 생성하고 실행합니다. + +### 유니티 게임 렌더링 + +Unity Hub를 사용하여 GitHub에서 클론한 프로젝트를 연 다음, 구글 STUN 서버(`stun:stun.l.google.com:19302`)를 이용해 Render Streaming URL을 설정합니다. Unity Hub에서 렌더링 시작 버튼을 클릭하여 스트리밍을 시작합니다. + +## 4. 소개 및 시연 영상 +### 1. 홈 +![홈화면](https://github.com/user-attachments/assets/6de33f60-8fb8-45b9-97e5-e8fbfbab60f9) + +사용자는 언제든지 웹 브라우저를 통해 서비스에 접속하여 게임을 실행할 수 있다. + +### 2. 회원가입 +![회원가입 화면](https://github.com/user-attachments/assets/3a4b5c69-3df5-4749-8b28-503d78ddd14f) + +사용자는 닉네임, 비밀번호를 형식에 맞게 입력한 후 회원가입을 할 수 있다. + +### 3. 로그인 +![로그인 화면](https://github.com/user-attachments/assets/eeaf4fb6-01cf-4e43-ab32-fe887f2ea0db) + +사용자는 회원가입한 계정으로 로그인할 수 있다. + +로그인 결과 반환되는 정보를 localStorage에 저장하여 다시 접속했을 때에도 로그인 정보가 남아있도록 하였다. + +### 4. 게임 플레이 +![게임플레이화면](https://github.com/user-attachments/assets/1f63c05c-4d77-4b9a-ba55-476a19023943) + +WebRTC를 통해 스트리밍 되는 게임 영상을 받을 수 있다. + +전체 화면 버튼을 클릭하여 여백없는 화면으로 게임을 실행할 수도 있다. + +### 5. 랭킹 +![랭킹화면](https://github.com/user-attachments/assets/49aeefd9-9d31-49f9-a3e3-7f92698a7f89) + +사용자가 게임을 클리어한 시간에 따른 순위를 볼 수 있다. + +### 6. 영상 +[![2024년 전기 졸업과저 30 Tree](https://github.com/user-attachments/assets/a6963421-c98e-4ec6-a6d1-0de552c65a97)](https://www.youtube.com/watch?v=HeQP4ZvuC5g&list=PLFUP9jG-TDp-CVdTbHvql-WoADl4gNkKj&index=30&pp=iAQB) diff --git a/SAMPLE_README.md b/SAMPLE_README.md deleted file mode 100644 index f7f1ea25e0..0000000000 --- a/SAMPLE_README.md +++ /dev/null @@ -1,31 +0,0 @@ -### 1. 프로젝트 소개 - -이 프로젝트는 졸업과제를 수행하는 학생들에게 README 작성의 가이드라인을 제공하기 위해 제작되었습니다. - -### 2. 팀소개 - -Tony Stark, ironman@marvel.com, 개발총괄 - -Peter Benjamin Parker, spiderman@marvel.com, 알고리즘 설계 - -Stephen Vincent Strange, doctorstrange@marvel.com, 백앤드 개발 - -Robert Bruce Banner, hulk@marvel.com, 프론트엔드 개발 - -### 3. 시스템 구성도 - -부산대학교 일반대학원 정보융합공학과는 컴퓨터공학전공, AI전공, 의생명융합전공이 있습니다. - -![정보융합공학과 이미지](https://user-images.githubusercontent.com/100384365/192478661-5dc79a18-b076-48ef-b842-bcf65b0d8d44.jpg) - -### 4. 소개 및 시연 영상 - -[![부산대학교 정보컴퓨터공학부 소개](http://img.youtube.com/vi/zh_gQ_lmLqE/0.jpg)](https://youtu.be/zh_gQ_lmLqE) - -### 5. 설치 및 사용법 - -본 프로젝트는 Ubuntu 20.04 버전에서 개발되었으며 함께 포함된 다음의 스크립트를 수행하여 -관련 패키지들의 설치와 빌드를 수행할 수 있습니다. -``` -$ ./install_and_build.sh -``` diff --git a/Unity-FPS b/Unity-FPS new file mode 160000 index 0000000000..f52ebf8bbb --- /dev/null +++ b/Unity-FPS @@ -0,0 +1 @@ +Subproject commit f52ebf8bbb8edc9248ffbd218430cad5e53f5f8c diff --git a/Unity-HDRP b/Unity-HDRP new file mode 160000 index 0000000000..d69433dcda --- /dev/null +++ b/Unity-HDRP @@ -0,0 +1 @@ +Subproject commit d69433dcdaea367cc4898f228db0f62d33e3d4e2 diff --git a/WebRTC-FPS b/WebRTC-FPS new file mode 160000 index 0000000000..3e8e64e87e --- /dev/null +++ b/WebRTC-FPS @@ -0,0 +1 @@ +Subproject commit 3e8e64e87e549352f46faf3edde67f4310e9a312 diff --git a/WebRTC-HDRP b/WebRTC-HDRP new file mode 160000 index 0000000000..aa8723c58f --- /dev/null +++ b/WebRTC-HDRP @@ -0,0 +1 @@ +Subproject commit aa8723c58fa5c160cede7aa019cee0292323524a diff --git "a/docs/01.\353\263\264\352\263\240\354\204\234/01. \354\260\251\354\210\230\353\263\264\352\263\240\354\204\234.pdf" "b/docs/01.\353\263\264\352\263\240\354\204\234/01. \354\260\251\354\210\230\353\263\264\352\263\240\354\204\234.pdf" new file mode 100644 index 0000000000..6437bdafb1 Binary files /dev/null and "b/docs/01.\353\263\264\352\263\240\354\204\234/01. \354\260\251\354\210\230\353\263\264\352\263\240\354\204\234.pdf" differ diff --git "a/docs/01.\353\263\264\352\263\240\354\204\234/01.\354\260\251\354\210\230\353\263\264\352\263\240\354\204\234.pdf" "b/docs/01.\353\263\264\352\263\240\354\204\234/01.\354\260\251\354\210\230\353\263\264\352\263\240\354\204\234.pdf" deleted file mode 100644 index e69de29bb2..0000000000 diff --git "a/docs/01.\353\263\264\352\263\240\354\204\234/02. \354\244\221\352\260\204\353\263\264\352\263\240\354\204\234.pdf" "b/docs/01.\353\263\264\352\263\240\354\204\234/02. \354\244\221\352\260\204\353\263\264\352\263\240\354\204\234.pdf" new file mode 100644 index 0000000000..ce80d6bd12 Binary files /dev/null and "b/docs/01.\353\263\264\352\263\240\354\204\234/02. \354\244\221\352\260\204\353\263\264\352\263\240\354\204\234.pdf" differ diff --git "a/docs/01.\353\263\264\352\263\240\354\204\234/02.\354\244\221\352\260\204\353\263\264\352\263\240\354\204\234.pdf" "b/docs/01.\353\263\264\352\263\240\354\204\234/02.\354\244\221\352\260\204\353\263\264\352\263\240\354\204\234.pdf" deleted file mode 100644 index e69de29bb2..0000000000 diff --git "a/docs/01.\353\263\264\352\263\240\354\204\234/03. \354\265\234\354\242\205\353\263\264\352\263\240\354\204\234.pdf" "b/docs/01.\353\263\264\352\263\240\354\204\234/03. \354\265\234\354\242\205\353\263\264\352\263\240\354\204\234.pdf" new file mode 100644 index 0000000000..bb764dd1bf Binary files /dev/null and "b/docs/01.\353\263\264\352\263\240\354\204\234/03. \354\265\234\354\242\205\353\263\264\352\263\240\354\204\234.pdf" differ diff --git "a/docs/01.\353\263\264\352\263\240\354\204\234/03.\354\265\234\354\242\205\353\263\264\352\263\240\354\204\234.pdf" "b/docs/01.\353\263\264\352\263\240\354\204\234/03.\354\265\234\354\242\205\353\263\264\352\263\240\354\204\234.pdf" deleted file mode 100644 index e69de29bb2..0000000000 diff --git "a/docs/02.\355\217\254\354\212\244\355\204\260/\355\217\254\354\212\244\355\204\260\355\214\214\354\235\274.pdf" "b/docs/02.\355\217\254\354\212\244\355\204\260/\355\217\254\354\212\244\355\204\260\355\214\214\354\235\274.pdf" index e69de29bb2..874fcb78d3 100644 Binary files "a/docs/02.\355\217\254\354\212\244\355\204\260/\355\217\254\354\212\244\355\204\260\355\214\214\354\235\274.pdf" and "b/docs/02.\355\217\254\354\212\244\355\204\260/\355\217\254\354\212\244\355\204\260\355\214\214\354\235\274.pdf" differ diff --git "a/docs/03.\353\260\234\355\221\234\354\236\220\353\243\214/\353\260\234\355\221\234\354\236\220\353\243\214.pdf" "b/docs/03.\353\260\234\355\221\234\354\236\220\353\243\214/\353\260\234\355\221\234\354\236\220\353\243\214.pdf" index e69de29bb2..9a48c7445f 100644 Binary files "a/docs/03.\353\260\234\355\221\234\354\236\220\353\243\214/\353\260\234\355\221\234\354\236\220\353\243\214.pdf" and "b/docs/03.\353\260\234\355\221\234\354\236\220\353\243\214/\353\260\234\355\221\234\354\236\220\353\243\214.pdf" differ diff --git "a/docs/03.\353\260\234\355\221\234\354\236\220\353\243\214/\353\260\234\355\221\234\354\236\220\353\243\214.pptx" "b/docs/03.\353\260\234\355\221\234\354\236\220\353\243\214/\353\260\234\355\221\234\354\236\220\353\243\214.pptx" deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/install_and_build.sh b/install_and_build.sh deleted file mode 100644 index fb5c46539b..0000000000 --- a/install_and_build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -echo 'This is a sample' -echo '1. Installation' -sudo apt-get install tree -echo '2. Run' -echo 'a tree command shows directories and files' -tree