๐งโ๐ป ๊ฐ๋ฐ ๊ธฐ๊ฐ : 2023.05.19 ~ 2023.06.30
๐ ์๋น์ค URL : https://www.study-hub.shop ๐ ํญํด14๊ธฐ ์ต๊ณ ์ ์ธ๊ธฐ ํ๋ก์ ํธ์ ์์!
๐งโ๐ป ํ์ ์คํฐ๋
- ์คํฐ๋๋ฃธ์ ์ ์ํ ์ ์ ๋ webRTC๋ฅผ ํ์ฉํ์ฌ ๋ณธ์ธ์ ํ๋ฉด์ ์ก์ถํ๋ ๋์์, ๋ค๋ฅธ ์ ์ ์ ๊ณต๋ถํ๋ ๋ชจ์ต์ ์ค์๊ฐ์ผ๋ก ํ์ธ
๐ ํ์ด๋จธ ๊ธฐ๋ฅ & ํต๊ณ
- ๋งค์ผ ์์ ์ ๊ธฐ์ค์ผ๋ก DB์ ์ ์ฅ๋ ๊ณต๋ถ ์๊ฐ์ ์ฐธ์กฐํ์ฌ, ์ผ์ผ ๊ณต๋ถ์๊ฐ ๋ฐ ๋์ ๊ณต๋ถ์๊ฐ ํ์ธ
| ์ฌ์ฉ ๊ธฐ์ | ๊ธฐ์ ์ค๋ช |
|---|---|
| Styled-Components | ๋ค๋ฅธ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๊ตํด ๋
ผ์ ํ Styled-Components๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๊ฐ๋
์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ฉฐ, ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์์ฑํด ์ถฉ๋์ ์ต์ํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ, Styled-Components๋ฅผ ํตํด ์ปดํฌ๋ํธ์ props๋ฅผ ์ ๋ฌํ ์ ์์ด ์คํ์ผ ์์ฑ์ ๋์ ์ธ ์ฌ์ฉ์ด ์ฉ์ดํ๋ฉฐ, ์ด์ ๋ฐ๋ผ ๊ฐ๋ฐ์ ์ ์ฐ์ฑ์ด ์ฆ๊ฐ ํ๊ธฐ์ ์ฌ์ฉํ์์ต๋๋ค. |
| React Query | React Query๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด ๋์
๋ ๊ธฐ์ ์
๋๋ค. ์ฟผ๋ฆฌ ์บ์ฑ ์ฒ๋ฆฌ๋ฅผ ํตํด ์๋ฒ ๋ถํ๋ฅผ ์ต์ํํ๊ณ ์ด๋ฏธ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ ์ฌ๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ฅ์ ๋ค๊ณผ ํจ๊ป isLoading๊ณผ isError๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ ์ฐํ๊ฒ ํ ์ ์์ด, ์ ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ต์ ํํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ์์ต๋๋ค. |
| Vercel | Vercel์ ์ฌ์ฉํ ์ด์ ๋ ํ๋ก์ ํธ๋ฅผ ๋์ฑ ์ํํ๊ฒ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด์ ์
๋๋ค. Vercel์ GitHub์ ํธ์(pushing)๋ ๋๋ง๋ค ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ด๋ก ์ธํด ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ๋งค์ฐ ๊ฐ๋จํด์ง๊ธฐ์ ์ฌ์ฉํ์์ต๋๋ค. |
| Axios | Axios๋ฅผ ์ฌ์ฉํ ์ด์ ๋ Fetch์ ๋น๊ตํ์ฌ ์๋ฌ ๊ฐ์ฒด๋ฅผ ํตํด ์์ธํ ์๋ต ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ํ, API ์์ฒญ ์ ํ ํฐ์ ์กด์ฌ์ฌ๋ถ์ ๋ฐ๋ผ ํ ํฐ์ ์ฌ๋ฐ๊ธ ๋ฐ ์ฌ์์ฒญ ์์ ์ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋ Axios interceptor ๊ธฐ๋ฅ์ด ์ ๊ณต๋์ด API ํต์ ์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์๊ธฐ์ ์ฌ์ฉ์ ํ์์ต๋๋ค. |
๐ฅ ์คํฐ๋๋ฃธ ์ ์ฅ ์ openVidu ์ธ์ ์ฐ๊ฒฐ ์ด์
๋ฌธ์
์คํฐ๋๋ฃธ ์ ์ฅ ํ ๋ฐ๋ก ๋ง์ดํฌ๋ ์นด๋ฉ๋ผ๋ฅผ ๋๋ฉด openvidu ์ธ์ ์ฐ๊ฒฐ์ด ๋์ง ์๋ ์ค๋ฅ๊ฐ ๋ฐ์
์๋
Redirect ํ์ด์ง๋ฅผ ๋ฐฉ ์
์ฅํ setTimeOut์ ์ ์ฉํ์ฌ 3์ด๊ฐ ์ง๋ ํ ์คํฐ๋๋ฃธ ํ์ด์ง๊ฐ ๋ณด์ด๊ฒ ํ์ฌ ๋ง์ดํฌ๋ ์นด๋ฉ๋ผ์ ๋ํ ์กฐ์์ ํ ์ ์๊ฒ ํ๋ ค๊ณ ํ์๋ค.
ํ์ง๋ง ์๊ฐ๋ง ์ ์ฉ์ ํด์ฃผ๋ฉด ์ ์ ๋ณ ์ธ์
์ฐ๊ฒฐ ์๊ฐ์ ๋ํ ํธ์ฐจ๊ฐ ์์ด์ redirect ํ์ด์ง๊ฐ ์ฌ๋ผ์ง ํ์๋ ์ธ์
์ฐ๊ฒฐ์ด ์๋ ์ ์ ๊ฐ ๋ง์ดํฌ๋ ์นด๋ฉ๋ผ๋ฅผ ๊ป์ ๋ ์ฌ์ ํ ์ธ์
์ฐ๊ฒฐ์ด ๋์ง์์๋ค.
ํด๊ฒฐ
์คํฐ๋๋ฃธ ์ ์ฅ ํ ์ธ์ ์ฐ๊ฒฐํ๋ ์ฝ๋์์ redirect ํ์ด์ง๋ฅผ ๋ฃ์ด์ค์ ์ด์ ์ฒ๋ผ ์๊ฐ์ด ์ง๋ ํ ์คํฐ๋๋ฃธ์ด ๋ณด์ด๋ ์๋๋ผ ์ธ์ ์ฐ๊ฒฐ์ด ์๋ฃ ๋ ํ ์คํฐ๋๋ฃธ ํ์ด์ง๊ฐ ๋ณด์ด๋๋ก ์์
๐ฅ ์คํฐ๋๋ฃธ์์ ์๋๋ฐฉ์ ์นด๋ฉ๋ผ, ๋ง์ดํฌ ์ํ ํ์ธ ์ด์
๋ฌธ์
OpenViduLogger(์คํ๋น๋ ์ฝ์ ๋ฉ์ธ์ง)๋ ์๋๋ฐฉ์ด ์นด๋ฉ๋ผ๋ ๋ง์ดํฌ๋ฅผ ์ผ๊ฑฐ๋ ๋๋ ์์
(publish/unpublish)์ ๋ณผ ์ ์์.
์ ์ ๋ ์์ ์ด ์ํํ ์นด๋ฉ๋ผ/๋ง์ดํฌ ์ํ ๋ณ๊ฒฝ๋ง ํ์ธํ ์ ์์ผ๋ฉฐ, ์๋๋ฐฉ์ ์นด๋ฉ๋ผ/๋ง์ดํฌ ์ ๋ฌด๋ฅผ ํ์ธํ์ง ๋ชป ํ๋ ๋ฌธ์ ๋ฐ์
์๋
'streamPropertyChanged' ์คํ๋น๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ stream์ ๋ณ๊ฒฝํ ๋๋ง ์ํ๋ฅผ ์
๋ฐ์ดํธ ์๋.
๊ทธ๋ฌ๋ ์คํ๋น๋๋ ๋ด๊ฐ ๋ฐํ์์ด์ ๊ตฌ๋
์์ด๊ธฐ ๋๋ฌธ์ ์ ํํ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ด ์ด๋ ค์์ ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์
ํด๊ฒฐ
'streamManager'๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ํด๊ฒฐ, 'streamManager'๋ฅผ ํตํด ๊ตฌ๋
์์ ๋ฐํ์๋ฅผ ๊ตฌ๋ถ ๊ฐ๋ฅ.
'streamManager.stream.audioActive'์ 'streamManager.stream.videoActive'๋ฅผ ์ฌ์ฉํ์ฌ
๋์ ์๋๋ฐฉ์ ์ค๋์ค ๋ฐ ๋น๋์ค ์ํ๋ฅผ ํ์ธํ๊ณ , UI๋ฅผ ์
๋ฐ์ดํธํ ์ ์์๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์๋๋ฐฉ์ด ๋ง์ดํฌ๋ ์นด๋ฉ๋ผ๋ฅผ ๋๊ฑฐ๋ ์ผค ๋ ์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ์ ์ ์๊ฒ ๋จ.
ํด๊ฒฐ ์ฝ๋
- Front: ๊ฐํ๋น(Github), ๊น์์ฅ(Github), ์ ๋ฏผ์ฒ (Github)
- Back: ๊น๊ทผ๋ณด(Github), ๋ฐ์ฑ์ฐ(Github), ํ์นํฌ(Github))
| ๊ฐํ๋น | ๊น์์ฅ | ๐ฉ์ ๋ฏผ์ฒ | ๐ฉ๊น๊ทผ๋ณด | ๋ฐ์ฑ์ฐ | ํ์นํฌ |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| FRONT-END | FRONT-END | FRONT-END | BACK-END | BACK-END | BACK-END |














