๐ค ์์ด๋ ์ง์ง ๋์!
์จ๋ผ์ธ ๋์ด๋ฐฉ ํ๋ก์ ํธ ๋๋๋
ธ๋
๋๋๋
ธ๋์ ์นRTC๋ฅผ ํตํด ์์ด์ ๋ณดํธ์๊ฐ ๋์ด๋ฅผ ํตํด ๊ต๊ฐํ๋ฉฐ ํ๋ณตํ ์ถ์ต์ ๋จ๊ธธ ์ ์๋ ์จ๋ผ์ธ ๋์ด๋ฐฉ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์น๊ธฐ์ ํ๋ก์ ํธ์
๋๋ค.
๋๋๋
ธ๋์์ ์์ด์ ํจ๊ป ๋๋ฉฐ, ์์ด์๊ฒ ์ต๊ณ ์ ์๊ฐ์ ์ ๋ฌผํ์ธ์:)
2023.07.03. ~ 2023.08.18.
Name |
์์งํ |
์ํจ์ |
์ํ์ |
๊ณฝ๊ฐํ |
์ด์ฐฌ์
|
์ก์๋ |
Profile |
![image](images/profile/%EC%96%91%EC%A7%80%ED%98%9C.jpg) |
![image](images/profile/%EC%9C%84%ED%9A%A8%EC%84%A0.jpg) |
![image](images/profile/%EC%84%9C%ED%98%84%EC%98%81.jpg) |
![image](images/profile/%EA%B3%BD%EA%B0%95%ED%95%9C.jpg) |
![image](images/profile/%EC%9D%B4%EC%B0%AC%EC%9B%85.jpg) |
![image](images/profile/%EC%86%A1%EC%95%84%EB%9E%8C.jpg) |
Position |
Team Leader |
Frontend Leader |
Backend Leader |
Backend Developer |
Release Developer |
Backend Developer |
โจ ๊ธฐํ๋ฐฐ๊ฒฝ ๋ฐ ํ๊ฒ
์์ด๋ค์ ๋ณดํธ์์ ํจ๊ป ๋๋ฉฐ ๊ต๊ฐํ ๋ ๊ฐ์ฅ ํฐ ํ๋ณต์ ๋๋๋๋ค. ๊ทธ๋ฌ๋ ๋ณดํธ์๊ฐ ์๊ฐํ๋ ๋์ด์ ์์ด๊ฐ ์๊ฐํ๋ ๋์ด์ ๊ฐ๋
์ ์ฌ๋ญ ๋ค๋ฆ
๋๋ค.
๋๋๋
ธ๋์ ์นRTC๋ฅผ ํตํด ์ฅ์์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์์ด์ ๋ณดํธ์๊ฐ ํจ๊ป ๊ฒ์์ ์ฆ๊ธฐ๊ณ ์ํตํ ์ ์๋ ์ฅ์ ๋ง๋ จํ์์ต๋๋ค.
๋๋๋
ธ๋์ ํตํด ์์ด์๊ฒ ์ต๊ณ ์ ์๊ฐ์ ์ ๋ฌผํด์ฃผ์ธ์:)
์ด๋ฐ ๋ถ๊ป ์ถ์ฒํฉ๋๋ค๐
๐คฑ ์์ด๊ฐ ์ฌ๋ฟ์ด๋ผ ์คํ๋ผ์ธ ํ๋์ด ์ด๋ ค์ด ๊ฐ์
๐ถ ์์ด์ ํจ๊ป ์ ์ ํ๊ณ ์ฌ๋ฏธ์๋ ๊ฒ์์ ํ๋ฉฐ ํ๋ณตํ ์ถ์ต์ ๋จ๊ธฐ๊ณ ์ถ์ ๊ฐ์
- ๋ ๋ฐ๋ผํด๋ด์
- ๊ทธ๋๋ก ๋ฉ์ถฐ๋ผ
- ์ ํ๋ธAPI๋ฅผ ํตํ ๋ค์ํ ์ด๋ฆฐ์ด ์ฒด์กฐ
๐ ๋๋๋
ธ๋ ์๋น์คํ๋ฉด
![image](images/screenshots/00_%EB%A9%94%EC%9D%B8%ED%8E%98%EC%9D%B4%EC%A7%80.png)
ํ์๊ฐ์
|
๋ก๊ทธ์ธ |
![image](images/screenshots/01_%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%851.png) |
![image](images/screenshots/02_%EB%A1%9C%EA%B7%B8%EC%9D%B81.png) |
๋ง์ดํ์ด์ง |
![image](images/screenshots/mypage.PNG) |
![image](images/screenshots/03_%EB%B0%A92%EC%B4%88%EB%8C%80.png)
์นด๋ฉ๋ผ off |
๋ง์ดํฌ off |
![image](images/screenshots/03_%EB%B0%A91%EC%B9%B4%EB%A9%94%EB%9D%BC.png) |
![image](images/screenshots/03_%EB%B0%A91%EB%A7%88%EC%9D%B4%ED%81%AC.png) |
๊ฒ์ ์ ํ ํ๋ฉด |
๊ฒ์ ์ค ํ๋ฉด |
![image](images/screenshots/10_1%EA%B2%8C%EC%9E%84.png) |
![image](images/screenshots/12_%EA%B2%8C%EC%9E%84%EC%8B%9C%EC%9E%91.png) |
์ฒด์กฐํ๋ฉด |
์ฐ์นํ๋ฉด |
![image](images/screenshots/11_%EC%B2%B4%EC%A1%B0%EC%8B%9C%EC%9E%91.png) |
![image](/images/screenshots/14_%EA%B2%8C%EC%9E%84%EC%8B%9C%EC%83%81.png) |
![image](images/screenshots/03_%EB%B0%A94%EC%97%91%EC%8A%A4%EB%A0%88%EC%9D%B4.png)
์ฌ์ง ์ ํํ๋ฉด |
์จ๋ฒํ์ด์ง |
![image](images/screenshots/17_%EC%95%A8%EB%B2%94%EC%A0%80%EC%9E%A5.png) |
![image](images/screenshots/20_00_%EC%95%A8%EB%B2%94.png) |
์๋น์ค ์ค๋ช
: ์์ด์ ์ด๋ฅธ์ด ํ๋ฐ ๋ชจ์ฌ ํจ๊ป ๋๋ฉฐ ์ถ์ต์ ์์ ์ ์๋ ์จ๋ผ์ธ ๋์ด๋ฐฉ
- webRTC๋ฅผ ํตํ ์ฌ๋ฟ์ด ์ฆ๊ธธ ์ ์๋ ์ค์๊ฐ ๊ฒ์, ์ฒด์กฐ ์์ ์ ๊ณต
- Pose Detection์ ํตํด ์์ธ๋ฅผ ์ธ์ํ๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ์ฌ ์ ์ ์ฐ์ถ
- ์ฌ์ฉ์๊ฐ ๊ฒ์์ ์ฆ๊ธฐ๊ณ ์๋ ๋ชจ์ต์ ์บก์ณํ๊ณ ๊ธฐ๋ก์ ์ํ๋ ์ฌ์ฉ์์๊ฒ ์จ๋ฒ ์ ๊ณต
- tfjs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด PoseNet ๋ชจ๋ธ ์ด์ฉ
- cosine similarity ๊ณ์ฐ์ ํตํด ์ ์ ์ฐ์ถ
- ํ์๊ด๋ฆฌ, ๋ก๊ทธ์ธ, ๋ง์ดํ์ด์ง ๋ฑ ํ์๊ด๋ฆฌ ์ ํจ์ฑ ๊ฒ์ฌ
- ๋ฉ์ธํ์ด์ง ๋ก๋ ์ fade in ํจ๊ณผ ๊ตฌํ
- ๋ ๋ฐ๋ผํด๋ด์ ๊ฒ์ ๊ตฌ์ฑ ๋ฐ ๊ตฌํ
- openvidu๋ฅผ ํตํ webRTC ์๋น์ค ์ ๊ณต
- ๋ฐฉ ์ด๋ ๋งํฌ ์์ฑ, ์นด๋ฉ๋ผ on/off, ๋ง์ดํฌ on/off ๋ฑ ํด๋ฐ ๊ธฐ๋ฅ ๊ตฌํ
- ์บก์ฒ ๊ธฐ๋ฅ์ ๊ตฌํํด ์จ๋ฒ์ ์ฌ์ง ์ ์ฅ ์๋น์ค ์ ๊ณต
- ํ์๊ด๋ฆฌ, ์จ๋ฒ ์ฌ์ง ๊ด๋ฆฌ, ๋ฌธ์๋ด์ญ ๊ด๋ฆฌ
- ์ฐธ์ฌ์ ์, ๊ฒ์ ์ํ, ์ ์ ๊ด๋ จ ๋ฐฉ ์ ๋ณด ์ ์ฅ ๋ฐ ์ธ์ ์ ํ, ๊ฒ์ ์ค ์ฐธ์ฌ ๋ถ๊ฐ ๋ฑ openvidu ๋ฐฉ ๊ด๋ฆฌ
- Swagger/OpenAPI๋ฅผ ์ด์ฉํ์ฌ API ๋ช
์ธ์ ๊ตฌํ
![image](images/screenshots/api1.jpg)
Tech |
Stack |
Language |
Java, JavaScript |
Backend |
Spring Boot, JPA, Spring Security, JWT |
Frontend |
React, reduxjs/toolkit |
Database |
MySQL, Redis |
Server |
AWS EC2, NginX |
DevOps |
Git, Docker |
WebRTC |
openvidu |
๐จ ์์คํ
์ํคํ
์ณ
![image](./images/architecture.png)
๐จ ERD |
UML ์ ์ค์ผ์ด์ค |
![](./images/ERD.png) |
![](./images/usecase.png) |
Notion |
Jira |
GitLab |
Figma |
MatterMost |
![notion](./images/notion.png) |
![jira](./images/jira.png) |
![gitlab](./images/gitlab.png) |
![figma](./images/screenshots/figma.PNG) |
![mattermost](./images/mattermost.png) |