{"id":20377539,"url":"https://github.com/rootkwak528/pit","last_synced_at":"2026-04-09T17:54:50.745Z","repository":{"id":184660177,"uuid":"399508132","full_name":"rootkwak528/PiT","owner":"rootkwak528","description":"WebRTC를 이용한 화상 PT와 수강신청 커뮤니티 서비스","archived":false,"fork":false,"pushed_at":"2021-09-07T08:33:53.000Z","size":20305,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-15T07:14:37.217Z","etag":null,"topics":["aws-ec2","java","openvidu","spring-boot","ubuntu","vue","vuex","webrtc"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rootkwak528.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-08-24T15:03:07.000Z","updated_at":"2023-07-31T03:55:40.000Z","dependencies_parsed_at":"2023-07-29T15:33:05.818Z","dependency_job_id":null,"html_url":"https://github.com/rootkwak528/PiT","commit_stats":null,"previous_names":["rootkwak528/pit"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rootkwak528%2FPiT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rootkwak528%2FPiT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rootkwak528%2FPiT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rootkwak528%2FPiT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rootkwak528","download_url":"https://codeload.github.com/rootkwak528/PiT/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241928532,"owners_count":20043821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-ec2","java","openvidu","spring-boot","ubuntu","vue","vuex","webrtc"],"created_at":"2024-11-15T01:45:34.060Z","updated_at":"2025-12-30T22:20:37.878Z","avatar_url":"https://github.com/rootkwak528.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![issue](https://img.shields.io/badge/issue-0-yellow.svg) ![ubuntu](https://img.shields.io/badge/ubuntu-20.04-important.svg)\u003cbr /\u003e\n![openvidu](https://img.shields.io/badge/openvidu-2.19.0-brightgreen.svg) ![spring](https://img.shields.io/badge/spring-2.5.4-brightgreen.svg) ![node](https://img.shields.io/badge/node-14.16.1-brightgreen.svg) ![vue](https://img.shields.io/badge/vue-3.0.0-brightgreen.svg)\u003cbr /\u003e\n![vuex](https://img.shields.io/badge/vuex-4.0.0-green.svg) ![element-plus](https://img.shields.io/badge/element_plus-1.1.0_beta.1-green.svg) ![bootstrap](https://img.shields.io/badge/bootstrap-5.1.0-green.svg)\n\n\u003cbr /\u003e\n\n# P;T 피땀눈물\n\n## 목차\n\n[1. P;T 소개](#1-PT-소개)\u003cbr/\u003e\n[2. 개요](#2-개요)\u003cbr/\u003e\n[3. 기술 스택](#3-기술-스택)\u003cbr/\u003e\n[4. 형상 관리](#4-형상-관리)\u003cbr/\u003e\n[5. 주기능 소개](#5-주기능-소개)\u003cbr/\u003e\n[6. 서버 구조](#6-서버-구조)\u003cbr/\u003e\n[7. 데이터베이스 구조](#7-데이터베이스-구조)\u003cbr/\u003e\n[8. 실행 방법](#8-실행-방법)\u003cbr/\u003e\n[9. Contributor](#9-contributor)\u003cbr/\u003e\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 1. P;T 소개\n\n- 개발기간 : 2021.07.12 - 2021.08.20\n- 개발인원 : 곽호근, 서민영, 서요셉, 안대현, 윤영은\n- 주제 : 화상 PT와 클래스 신청 서비스를 연계한 통합 웹 서비스\n- 역할\u003cbr /\u003e\n  ![overview - role and responsibilities](https://i.imgur.com/sMBvMyA.png)\n    - Backend : 서요셉, 안대현\n    - Frontend : 서요셉, 윤영은\n    - WebRTC : 곽호근, 서민영\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 2. 개요\n\n홈트도 **😎 전문가**와 함께 하세요!\n\n\u003e 🥱 바쁘다바빠! 현대사회와 😷 COVID19로 인해 **언택트 라이프**가 일상에 자리잡았습니다.\n\u003e\n\u003e P;T는 코로나 감염 우려로 헬스장에 가지 못하는 사용자들을 위해 화상미팅 기능을 이용한 **PT 서비스**와 클래스를 탐색해 신청하고 관리할 수 있는 **통합 웹 사이트**를 제공하는 서비스입니다.\n\u003e\n\u003e **여러가지 운동** 카테고리를 제공하여 클래스 탐색을 도와줍니다. **일대일, 일대다 수업**으로 전문적인 코칭은 물론 모두 함께 수업하며 운동 시너지를 낼 수 있습니다.\n\nㅤ\n\n### P;T 기획 배경\n\n![overview - project background 1](https://i.imgur.com/hqr00ez.png)\n![overview - project background 2](https://i.imgur.com/fvTblq8.png)\n![overview - project background 3](https://i.imgur.com/vxrMvtE.png)\n\u003cbr\u003e\n\n### P;T 기능\n\n![overview - project services](https://i.imgur.com/AdgxCNH.png)\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 3. 기술 스택\n\n![technical stack - frontend and backend](https://i.imgur.com/iCQCBGR.png)\n![technical stack - infra and communication](https://i.imgur.com/oX0GKJn.png)\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 4. 형상 관리\n\n### Notion\n\n![managiment tool - notion](https://i.imgur.com/ycjWigm.png)\n\n### Jira\n\n![managiment tool - jira](https://i.imgur.com/pJ9O31b.png)\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 5. 주기능 소개\n\n### 사용자별 권한 및 역할\n\n* 관리자 : 클래스 개설 승인/거절 권한\n* 트레이너 : 클래스 개설 신청 권한, 트레이닝룸 개설 권한\n* 수강생 : 클래스 수강 신청 및 찜하기 권한, 본인 수업 녹화본 시청 권한\n* 공통 권한 : 로그인, 로그아웃, 회원가입, 마이페이지 조회/수정, 클래스 상세 조회, 상세 검색\n* 비회원 이용 가능 서비스 : 회원가입, 클래스 목록 조회, 클래스 상세 조회, 상세 검색\n\n\u003cbr /\u003e\n\n### 주기능 1) 클래스 개설\n\n![page - class opening](https://i.imgur.com/gCjZZ9r.png)\n\n\u003e**트레이너**가 클래스 개설 신청을 하게됩니다. **관리자**는 관리자 클래스 목록조회에서 클래스 개설 검수를 하여 승인/거절을 합니다.\n\nㅤ\n\n### 주기능 2) 클래스 신청\n\n![page - class enrollment](https://i.imgur.com/kH53ltP.png)\n\n\u003e**관리자**로부터 승인 받은 클래스들만 **수강생**들에게 보여지며, **수강생**들은 이 클래스들의 상세정보를 조회할 수 있습니다. 상세보기 화면에서 클래스를 보고 원하는 클래스를 찜목록에 두거나, 신청을 할 수 있습니다.\n\u003e\n\n\u003cbr /\u003e\n\n### 주기능 3) PT Room 개설 및 입장\n\n![page - pt room opening and entering 1](https://i.imgur.com/QrrXzys.png)\n![page - pt room opening and entering 2](https://i.imgur.com/BmUsRT6.png)\n\n\u003e**트레이너**는 **관리자**로부터 본인이 개설한 클래스가 승인되면, 본인의 **마이클래스 – 수강중클래스** 탭에서 개설한 클래스 목록 조회가 가능하고 PT룸을 개설할 수 있게 됩니다.\n\n\u003e**수강생**은 본인이 신청한 클래스를 본인의 **마이클래스 – 수강중클래스** 탭에서 신청한 클래스 목록조회가 가능하고 **트레이너**가 방을 개설해야만 PT룸에 입장할 수 있게 됩니다.\n\n\u003cbr /\u003e\n\n### 주기능 4) 화상 수업 및 녹화\n\n![page - pt room recording 1](https://i.imgur.com/E8ukPXQ.png)\n![page - pt room recording 2](https://i.imgur.com/p4J9s5U.png)\n\n\u003e화상 PT룸에 들어오면 개인별 영상이 녹화가 시작되며, 종료하게 되면 그 영상은 저장이 됩니다. 사용자는 그 영상을 녹화된 영상 목록에서 조회해서 다시보기와 다운로드가 가능합니다.\n\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 6. 서버 구조\n\n### WebRTC 구조\n\n![architecture - webrtc](https://i.imgur.com/KMlJjiw.png)\n\n\u003e WebRTC 는 크게 통화기능, 녹화기능이 있습니다. 이를 구현하기 위해 OpenVidu로 클라이언트를 만들고, 서버로는 OpenVidu 서버와 Kurento 미디어 서버가 사용되고 있습니다. 이들은 각각 REST API, WebSocket, webRTC로 통신하고 있습니다.\n\n* WebRTC : WebSocket을 사용해서 1:1 (Peer to Peer) 통화 API\n* Kurento : 1:1 만 가능한 WebRTC의 한계를 극복해주는 미디어서버\n* OpenVidu: Kurento로 쉽게 개발할 수 있게 해주는 프레임워크\n\n\u003cbr /\u003e\n\n### REST API 통신 구조\n\n![architecture - entire service](https://i.imgur.com/W9ICJrI.png)\n\n\u003e 사용자들이 로그인하여 클래스를 조회하는 웹페이지는 백엔드, 프론트엔드 서버에서 구성이 되고 화상 PT룸으로 입장할때는 443포트로 OpenVidu 서버에서 화상피티가 진행되고 녹화 비디오가 저장될때, 피티룸의 인원체크를 할때 백엔드서버와도 통신을 합니다.\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 7. 데이터베이스 구조\n\n![db erd](https://i.imgur.com/Jy448A1.png)\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 8. 실행 방법\n\n### BackEnd\n\n1.  디렉토리를 이동합니다.\n\n```\ncd backend\n```\n\n2. gradle 프로젝트를 빌드합니다.\n\n```\n./gradlew build\n```\n\n3. `./gradlew build` 가 안되면 아래 명령어를 실행 후 빌드합니다.\n\n```\nchmod 777 gradlew\n```\n\n4. build/libs로 이동하고 생성된 .jar 파일을 실행합니다.\n\n```\ncd build/libs\njava -jar backend-0.0.1-SNAPSHOT.jar\n```\n\n\u003cbr\u003e\n\n### FrontEnd\n\n1. 디렉토리를 이동합니다.\n\n```\ncd frontend\n```\n\n2. 필요한 package들을 설치합니다.\n\n```\nnpm install\n```\n\n3. 실행합니다.\n\n```\nnpm run serve\n```\n\n\u003cbr\u003e\n\n### WebRTC\n\n1. 아래 링크 참고하여 OpenVidu 서버를 설치하고 실행합니다. (단, Linux 환경에서만 설치 가능)\n   https://docs.openvidu.io/en/2.19.0/deployment/ce/on-premises/\n\n```\n./openvidu start\n```\n\n2. 본 레포지토리에 포함된 OpenVidu 클라이언트를 실행합니다.\n\n```\ncd webRTC/pit_ptroom/mvn package exec:java\n```\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n## 9. Contributor\n\n- AhnDaeHyun : daehyun1023@naver.com\n- KwakHoGeun : rootkwak528@gmail.com\n- SeoMinYeong : 210113yynim@naver.com\n- SeoYoSeph : tjdytpq0310@gmail.com\n- YunYeongEun : ounog@naver.com\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n**Fin.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frootkwak528%2Fpit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frootkwak528%2Fpit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frootkwak528%2Fpit/lists"}