ํํ ๋ง์ง ๋ฆฌ๋ทฐ๋ ๊ฐ๋ผ! ์๋ก์ด ๋ง์ง ๊ธฐ๋ก, ๊ณต์ , ์ฐธ์ฌ
์น๊ตฌ์ ์ฝ์์ ์ก์ ๋, โ์ฌ๊ธฐ ์ด๋?โ ๋ผ๊ณ ๋ฌผ์ด๋ณด๊ณ ํ์ฐธ ๋ค์ ๋ต๋ณ์ ๋ฐ์ ๊ฒฝํ์ด ์์ผ์ ๊ฐ์?๐ฅน
๋ด๊ฐ ๊ฐ๋ณธ ๋ง์ง๋ค์ ๊ฐํธํ๊ฒ ๊ธฐ๋กํ ์ ์๋ ์๋น์ค๊ฐ ํ์ํ์ง ์์ผ์ ๊ฐ์?๐ค
WAGU BOOK์ ์ด๋ฐ ๋ถ๋ค์ ์ํด ๊ธฐ๋ก ๊ณต์ ์ฐธ์ฌ์ ์ด์ ์ ๋ ๋ง์ง ์๋น์ค์ ๋๋ค!
ํธํ๊ฒ ์์ฑํ๊ณ ๋น ๋ฅด๊ฒ ์ํตํ์ธ์!!
โ์ฌ์ง์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ธฐ๋ก์ ์์ฑํ์ธ์!โ
- ํฌ์คํธ๋ฅผ ์์ฑํ ๋, [์ด๋ฏธ์ง, ์์์ , ๋ฉ๋ด] ์ ๋ณด๋ฅผ ์ ๋ ฅํด์ AI๋ฅผ ํตํด ๋ฆฌ๋ทฐ๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค
- AI๋ฆฌ๋ทฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋, ์์ ํ ์๋ ์์ต๋๋ค
โ์์ฑ์ฑํ ๊ณผ ์น๊ตฌ๋ค์ด ๋ณด๊ณ ์๋ ์ฅ์๋ฅผ ํ์ธํ๋ฉฐ ์น๊ตฌ๋ค๊ณผ ์ํตํ๋ฉฐ ๋ง์ง์ ๊ณจ๋ผ๋ณด์ธ์!โ
- ์์ฑ๋ ๋งํฌ์์ ์น๊ตฌ๋ค๊ณผ ์ค์๊ฐ์ผ๋ก ์ง๋๋ฅผ ๋ณด๋ฉฐ ์๋น์ ํ์ํ ์ ์์ต๋๋ค
- ๋ช๋ช ์๋น์ ์ ํํ๊ณ ํฌํ๋ฅผ ํตํด ๊ฐ๊ณ ์ถ์ ๋ง์ง์ ์ ํํด๋ณด์ธ์
- ์ง๋์์๋ ์น๊ตฌ๋ค์ด ์ค์๊ฐ์ผ๋ก ๋ณด๊ณ ์๋ ์์น๋ฅผ ํ์ธํ ์ ์์ต๋๋ค
- ์์ฑ์ฑํ ์ผ๋ก ๋ํํ๋ฉฐ ์๊ฒฌ์ ๊ณต์ ํด ๋ณด์ธ์
โ์ค์๊ฐ์ผ๋ก ์์์ ๊ฐ๋์ ๊ณต์ ํ์ธ์!!โ
- ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ ํตํด ์์ ์ ๋จน๋ฐฉ์ ์๋ํ ์ ์์ต๋๋ค
- ์คํธ๋ฆฌ๋ฐ์ ์ฐธ์ฌํ๋ ์ฑํ ์ ํตํด ์ํธ์์ฉํ๋ฉฐ ๋ง์ง ํ์์ ๋์์ ๋ฐ์๋ณด์ธ์
- ์ค์๊ฐ ํต์ ๊ธฐ์
- ์์ฑ ๋ฐ ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ฅผ ์ํ SFU ๋ฐฉ์ WebRTC ์๋ฒ ๊ตฌํ
- ๋ฏธ๋์ด ์๋ฒ Openvidu ์ฌ์ฉ
- ์ฑํ , ์ขํ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ํ WebSocket ์๋ฒ ๊ตฌํ
- ์ด๋ฏธ์ง ์ ๋ก๋ ์ ํจ์จ์ ์ธ ๊ณต๊ฐ ์ฌ์ฉ ๋ฐ ๋ก๋ฉ ์ต์ ํ๋ฅผ ์ํด Graphics2D๋ฅผ ์ฌ์ฉํ ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง
- ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํด Redis๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ Spin-Lock ๊ตฌํ
- ์ ์งํ ํ์๊ฐ ์๋ ๊ณต์ , ํฌํ ๋ฐ์ดํฐ Redis ์ฌ์ฉํ ์ผ์ ์ ์ฅ
- Github Actions/AWS ALB/Docker๋ฅผ ํตํ blue-green ๋ฐฐํฌ๋ฐฉ์์ CI/CD ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ตฌํ
- ๋ฏธ๋์ด ์ ์ก ์๋ฒ์ ๋ฐ์ดํฐ ์ ์ก ์๋ฒ๋ฅผ ๊ตฌ๋ถํ์ฌ ํ์ฅ์ฑ ์ฆ๊ฐ
๊ธฐ์ | ๋์ ์ด์ | ํ๋ณด๊ตฐ | ์๊ฒฌ ์กฐ์จ ๋ฐ ๊ธฐ์ ๊ฒฐ์ |
---|---|---|---|
Web Socket | ์ฑํ , ๋ฐ์ดํฐ ์ ์ก | Polling / Long Polling / Web Socket | WebSocket ์ฌ์ฉ ๊ฒฐ์ |
WebRTC (SFU) | ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ ์์ฑ | HLS / Mesh / SFU / MCU | WebRTC (SFU) ์ฌ์ฉ ๊ฒฐ์ |
Redis (Lettuce) | TTL์ด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ DB ์ ์ | Lettuce / Redisson | Lettuce ์ฌ์ฉ ๊ฒฐ์ |
Github Action & DockerHub / AWS CodeDeploy | ์ง์์ ํตํฉ๊ณผ ์ง์์ ๋ฐฐํฌ๋ฅผ ํตํ ์ ๋ฌด ํจ์จ ์์น | Jenkins / Github Action / Travis CI | Github Action๊ณผ AWS CodeDeploy ์ฌ์ฉ ๊ฒฐ์ |
-
WebRTC (SFU)
- HLS์ ๊ฐ์ ์ ํ์ง๊ฐ ์์์ง๋ง, WebRTC๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ์ด์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฎ์ ์ง์ฐ ์๊ฐ(Low Latency) ๋๋ฌธ์ ๋๋ค.
- HLS๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTTP ๊ธฐ๋ฐ์ ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋จ์์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ง๋ง, WebRTC๋ P2P ์ฐ๊ฒฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๋งค์ฐ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- WebRTC๋ ๋จ์ํ ์์ ์ ์ก๋ฟ๋ง ์๋๋ผ ์ค๋์ค์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์๋ฐฉํฅ ํต์ ์ ์ง์ํฉ๋๋ค.
- ์งง์ ๊ธฐ๊ฐ ๋ด์ WebRTC๋ฅผ ์ง์ ๊ตฌํํ๋ ๊ฒ์ ์ด๋ ต๋ค๊ณ ํ๋จํ์์ผ๋ฉฐ, OpenVidu๋ฅผ Spring Boot์ ์ด์ํ์ฌ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธก์์ ์ธ์ ์ ์์ฑํ๋ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, Spring์ ์ปจํธ๋กค๋ฌ๊ฐ ํด๋น ์์ฒญ์ ๋ฐ์ OpenVidu๋ก ์ ๋ฌํ๊ณ , OpenVidu๊ฐ ์ธ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํฉ๋๋ค.
-
Redis (Lettuce)
- TTL์ด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ DB๋ก Lettuce๋ฅผ ์ ์ ํ์ต๋๋ค.
- ํฌํ ๊ธฐ๋ฅ์์, ํฌํ๊ฐ ์ข ๋ฃ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ DB์ ๊ณ์ ์ ์ฅํ๋ ๊ฒ์ ๋ญ๋น๋ผ๊ณ ํ๋จํ์ต๋๋ค.
- ํฌํํ๊ธฐ ๊ธฐ๋ฅ์์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๊ฐ์ ๊ฐ๊ฒ์ ํฌํํ ๊ฒฝ์ฐ, ํฌํ ๊ฒฐ๊ณผ๊ฐ 1๋ฒ๋ง ๋ฐ์๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฝ์ด ํ์ํ์ต๋๋ค.
- Lettuce๋ Redisson๋ณด๋ค ๊ฐ๋ฒผ์ฐ๋ฉฐ, ๋จ์ํ ๋ฝ ๊ธฐ๋ฅ์ ์ํด ์ถ๊ฐ์ ์ธ ์ข ์์ฑ๊ณผ ๋ณต์ก์ฑ์ ๋์ ํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ ์ ๋๋ค.
- Lettuce๋ฅผ ์ฌ์ฉํ์ฌ Spinlock์ ์ง์ ๊ตฌํํจ์ผ๋ก์จ, ๋ฝ ํ๋๊ณผ ํด์ ๋ฅผ ์ง์ ๊ด๋ฆฌํ์ฌ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- Spinlock์ ์์์ ๊ธฐ๋ค๋ฆด ๋ CPU๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ์ผ๋ก ์๋ํ๋ ๋ฐฉ์์ด๋ฉฐ, ๋ฝ์ ํ์์์, ์ฌ์๋ ํ์, ๋๊ธฐ ์๊ฐ์ ์กฐ์ ํ ์ ์์ด ํน์ ์ํฉ์ ๋ง์ถ ์ต์ ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
-
Github Action & DockerHub / AWS CodeDeploy
- ์ง์์ ํตํฉ๊ณผ ์ง์์ ๋ฐฐํฌ๋ฅผ ์ํด Github Action๊ณผ AWS CodeDeploy๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- ํ์ฌ ํ๋ก์ ํธ ๊ด๋ฆฌ๋ GitHub๋ฅผ ํตํด ์งํ ์ค์ด๋ฉฐ, ์๊ท๋ชจ ํ๋ก์ ํธ์ด๊ณ ์ถ๊ฐ ์ค์น ๊ณผ์ ์์ด GitHub์์ ์ ๊ณตํ๋ ํ๊ฒฝ์์ CI ์์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ Github Action์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ํ๋ก์ ํธ ๊ท๋ชจ๋ฅผ ๊ณ ๋ คํ์ฌ ์ด๊ธฐ ์ค์ ์ด ์ ๊ณ ํธ์์ฑ์ด ๋์ ๋ฆฌ์์ค๋ฅผ ์ค์ด๋ ๋ฐฉํฅ์ผ๋ก ์งํํ์ผ๋ฉฐ, ์๋ํ ๋ฐฐํฌ๋ฅผ ์ํด Github Action๊ณผ AWS CodeDeploy๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
- Blue-Green๋ฐฐํฌ ์ ์ธ์
๋ก๊ทธ์ธ ๋ฌธ์
- ๋ฌธ์ ์ํฉ
- ๋ ๊ฐ์ ์๋ฒ๊ฐ ๋์์ ธ ์์ ๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด Round Robin ๋ฐฉ์์ผ๋ก ํธ๋ํฝ์ด ๋ถ์ฐ๋๋ ๊ฒฝ์ฐ ์ธ์ ๋ก๊ทธ์ธ์ด ์ ์ง๋์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ์ด์
- ๊ธฐ๋ณธ์ ์ผ๋ก AWS ALB์ ๊ฒฝ์ฐ Round Robin ๋ฐฉ์์ผ๋ก ํธ๋ํฝ์ ๋ถ์ฐ์ํค๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ก๊ทธ์ธ์ ํตํด ๋ก๊ทธ์ธ ํ๊ณ ์ฟ ํค์ ๋ฐํ์๋ ์ธ์ ์ ์ฒซ ๋ฒ์งธ ์๋ฒ์์ ์ธ์ฆ๋ฐ์ ์ธ์ ์ ๋๋ค. ๋น๋๊ฐ ์๋ฃ๋ ๋ค์ ์๋ฒ์ ์ฐ๊ฒฐํ ๋๋ ๋ค๋ฅธ ์๋ฒ๋ก ์ฐ๊ฒฐ์ด ๋๊ธฐ ๋๋ฌธ์ ์ธ์ฆ์ ์คํจํ๊ฒ ๋ฉ๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ
- AWS ๋ก๋๋ฐธ๋ฐ์์ ํธ๋ํฝ ๋ถ์ฐ ๋ฐฉ์์ Sticky ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. Sticky ๋ฐฉ์์ ์ด์ ์ ์๋ฒ์ ์ ๊ทผํ ๊ธฐ๋ก์ด ์๋ ๊ฒฝ์ฐ์๋ ๋์ผํ ์๋ฒ๋ก ํธ๋ํฝ์ ๋ถ์ฐํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ฌธ์ ์ํฉ
- ์ ์ ํผ๋๋ฐฑ
- ๋์ฉ๋ ํธ๋ํฝ ์ฒ๋ฆฌ(Docker๋ฅผ ์ฌ์ฉํ scale-out)
- Graphics2D๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํฝ์ ๋ณด๊ฐ๋ฒ์ ์ฌ์ฉํด์ ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง๊ณผ ๋ณต์
- ์์ ๋ก๊ทธ์ธ(์นด์นด์ค, ๋ค์ด๋ฒ, ๊ตฌ๊ธ)
โ๏ธ 2024.5.30 - 2024.07.27