๐ ํ ๋ ธ์ ย |ย ๐ ๊ฐ๋ฐ ์ํค ย |ย ๐ ๊ทธ๋ผ์ด๋ ๋ฃฐ ย |ย
๋ด๋น์ | ์ฃผ์ ์์ |
---|---|
์ด์ฐฌ | - Lighthouse ์ฑ๋ฅ ๊ฐ์ (LCP 2.5s โ 0.6s) - ์ธ๋ง์ดํธ/๋ฆฌ๋ง์ดํธ ์ ๋ฏธ๋์ด ์คํธ๋ฆผ ๋๊น ํ์ ํด๊ฒฐ - ์ญํ ๊ธฐ๋ฐ ๊ตฌ์กฐ์์ ๊ธฐ๋ฅ ๊ธฐ๋ฐ ๊ตฌ์กฐ(FSD)๋ก ๋ฆฌํฉํ ๋ง - ํ๋ก ํธ์๋ ์ฝ๋ ๊ณ ๋ํ ๋ฐ ๋ฆฌํฉํ ๋ง - OAuth ๋ก๊ทธ์ธ ๋ก์ง ์ค๊ณ ๋ฐ ํ๋ก ํธ ๊ตฌํ - ํ๋ก ํธ์๋ ํ ์คํธ ์ฝ๋ ์์ฑ ์ฐธ๊ณ 1 ์ฐธ๊ณ 2 - ๋ฉด์ ์ง๋ฌธ ์ธํธ ๋ฒ์ ๊ด๋ฆฌ ๊ตฌ์กฐ ์ค๊ณ - ๋ฉด์ ์ง๋ฌธ ์ธํธ ์์ฑ / ์์ ํ์ด์ง ๊ตฌํ - ๋ด๊ฐ ๋ง๋ ์ธํธ / ๊ฐ์ ธ์จ ์ธํธ ๋ง์ดํ์ด์ง ๊ตฌํ |
Kkori๋ ์ฌ์ฉ์๊ฐ WebSocket๊ณผ WebRTC๋ฅผ ํ์ฉํด ์ค์๊ฐ์ผ๋ก ๋ฉด์ ์ ์ฐ์ตํ๊ณ ,
AI ๊ธฐ๋ฐ ์์ฑ ์ธ์๊ณผ ๊ผฌ๋ฆฌ์ง๋ฌธ ์์ฑ์ผ๋ก ์ค์ ๋ฉด์ ๊ณผ ๊ฐ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฉด์ ์ฐ์ต ์๋น์ค์
๋๋ค.
- ์ฌ์ฉ์๋ ํผ์ ์ฐ์ต ๋๋ ๋์ด์ ์ฐ์ต ๋ชจ๋๋ฅผ ์ ํํ ์ ์์ด์.
- ์ค์๊ฐ ์์ฑ ์ธ์(STT) ์ผ๋ก ๋ต๋ณ์ ํ ์คํธ๋ก ๋ณํํ๊ณ AI๊ฐ ๊ผฌ๋ฆฌ์ง๋ฌธ์ ์๋ ์์ฑํฉ๋๋ค.
- WebRTC ๊ธฐ๋ฐ ์์/์์ฑ ํตํ์ ์ค์๊ฐ ์ฑํ ์ผ๋ก ์์ํ ๋ฉด์ ํ๊ฒฝ์ ์ ๊ณตํด์.
์ฌ์ฉ์ ์ง์ ์์ UX ์ต์ ํ๋ฅผ ์ํด CWV๋ฅผ ๊ฐ์ ํ ํ์๊ฐ ์์์ต๋๋ค.
MVP ๊ฐ๋ฐ ํ ์ต์ด๋ก LCP๋ฅผ ์ธก์ ํ์ ๋ 2.5s๊ฐ ๋์์ต๋๋ค.
๊ตฌ๊ธ์์๋ LCP๊ฐ 2.5์ด๊ฐ ๋์ผ๋ฉด ๊ฐ์ ์ด ํ์ํ๋ค๊ณ ๊ถ์ฅํ๊ณ ์์ด์, LCP ๊ฐ์ ํ์์ฑ์ ๋๊ผ์ต๋๋ค.
์ด๋ฏธ์ง ํ์ผ ๊ฐ์ , ์ฝ๋ ์คํ๋ฆฌํธ, SEO ๊ฐ์ 3๊ฐ์ง๋ฅผ ์๋ํ์์ต๋๋ค.
์ต์ข
์ ์ผ๋ก LCP 2.5์ด์์ 0.6์ด๋ก ๊ฐ์ ํ์๊ณ , Performance
, SEO
ํญ๋ชฉ์ 100์ ์ผ๋ก ๋ง๋ค ์ ์์์ต๋๋ค.
์๋ก๊ณ ์นจ๊ณผ ๊ฐ์ ์ธ๋ง์ดํธ/๋ฆฌ๋ง์ดํธ ๊ณผ์ ์์ ์ฌ์ฉ์๊ฐ ๋ฏธ๋์ด ์คํธ๋ฆผ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ํ, ๋คํธ์ํฌ ๋ณ๋ ์ ๊ธฐ์กด ICE Candidate์ด ๋ฌดํจํ๋์ด ์ฐ๊ฒฐ์ด ๋๊ธฐ๊ฒ ๋์์ต๋๋ค.
์์ธ์ ๋ถ์ํ์ฌ ๊ธฐ์กด PeerConnection ๋ฐ MediaStream ๊ฐ์ฒด๊ฐ ๋ธ๋ผ์ฐ์ ์ปจํ ์คํธ์์ ์๋ฉธ๋์ด, ์ฌ๋ง์ดํธ ์ ์๋ก์ด ๊ฐ์ฒด ์์ฑ์ผ๋ก ๊ธฐ์กด ์ฐ๊ฒฐ์ด ์ ์ง๋์ง ์๋ ๊ฒ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ํ์ ํ์ต๋๋ค.
๋ฏธ๋์ด ์คํธ๋ฆผ์ ๊ด๋ฆฌํ๋ ์คํ ์ด์ ๋น๋๊ธฐ ์์ ์ ๊ณต์ ํ๋ ๋ก์ง์ ์ถ๊ฐํ๊ณ , deferred promise ํจํด์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ฆฌ๋ ๋๋ง/์ฌ๋ง์ดํธ ์ํฉ์์๋ ์ค๋ณต ์ด๊ธฐํ ๋ฐ Race Condition ์ํฉ์ ์ ๊ฑฐํ์ฌ ์ผ๊ด๋ ์ด๊ธฐํ๋ฅผ ๋ณด์ฅํ์ต๋๋ค.
์ค์๊ฐ ๋ฉด์ ์์คํ ์์ ๋คํธ์ํฌ ๋ถ์์ ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ข ๋ฃ๋ก ์ธํ WebSocket ์ฐ๊ฒฐ ๋๊น์ ์น๋ช ์ ์ธ ๋ฌธ์ ์์ต๋๋ค. ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์งํ ์ค์ธ ๋ฉด์ ์ด ์ค๋จ๋๊ณ , ์ฌ์ฉ์๋ ์ฒ์๋ถํฐ ๋ค์ ์์ํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์์ต๋๋ค.
์ ํต์ ์ธ heartbeat๋ ping/pong ๋ฐฉ์์ ์ง์์ ์ธ ๋ฉ์์ง ๊ตํ์ผ๋ก ์ธํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ณ , ์ฐ๋ฆฌ ์๋น์ค์ ํน์ฑ์ ๋๋ถ๋ถ์ ์ด๋ฒคํธ๊ฐ broadcast๋์ด ์ฆ๊ฐ์ ์ธ ์ฐ๊ฒฐ ๋๊น ๊ฐ์ง๊ฐ ์ด๋ ค์ ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด "๋ง์ง๋ง ์ด๋ฒคํธ ์ฌ๋ฐ์ก" ์ ๋ต์ ๋์ ํ์ต๋๋ค. ๊ฐ ์ฌ์ฉ์๋ณ๋ก ๋ง์ง๋ง ๋ฐ์ ์ด๋ฒคํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ , ์ฌ์ฐ๊ฒฐ ์ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฌ์ ์กํ์ฌ ๋์ด์ง ์ง์ ๋ถํฐ ์์ฐ์ค๋ฝ๊ฒ ์ด์ด๊ฐ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
JWT ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ธ์ฆ๊ณผ userId ๋งคํ์ ํตํด ์ฌ์ฐ๊ฒฐ ์ ์ด์ ์ธ์ ์ํ๋ฅผ ์ ํํ ๋ณต๊ตฌํ ์ ์์๊ณ , ์ฐ๊ฒฐ ์ํ ๋ชจ๋ํฐ๋ง ์ค๋ฒํค๋ ์์ด๋ ๋น ๋ฅธ ์ฌ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ ์์ ์ ์ธ ๋ฉด์ ํ๊ฒฝ์ ๊ตฌ์ถํ์ต๋๋ค.
๋ง์ฝ 1000๋ช ์ด ๊ฐ์ "Spring ๋ฉด์ ์ง๋ฌธ 30๊ฐ"๋ฅผ ๊ฐ์ ๋ณต์ฌํด์ ์กฐ๊ธ์ฉ๋ง ์์ ํ๋ค๋ฉด, ์ค์ ๋ก๋ ๊ฑฐ์ ๋์ผํ ์ง๋ฌธ๋ค์ด 1000๋ฒ ์ค๋ณต ์ ์ฅ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
"์๋ฐ๋ ๋ฌด์์ธ๊ฐ?" ๋ผ๋ ์ง๋ฌธ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 1000๋ฒ ๋๊ฐ์ด ์ ์ฅ๋๋ ์ํฉ์ด์์ต๋๋ค.
๋, ์ง๋ฌธ ์ธํธ๋ฅผ '๊ฐ์ ธ๊ฐ๊ธฐ' ํ๊ฒ ๋๋ฉด ์๋ณธ ์์ฑ์๊ฐ ์ง๋ฌธ์ ์์ ํ์ ๋, ๊ทธ๊ฑธ ๋ณต์ฌํ ๋ชจ๋ ์ฌ๋๋ค์ ์ง๋ฌธ ์ธํธ๋ ํจ๊ป ๋ฐ๋์ง ์๋๋ก ์ค๊ณํด์ผ ํ์ต๋๋ค.
์์ ํ ๋ณต์ฌ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์ง๋ฌธ์ ์๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ ์ฅ ๊ณต๊ฐ ๋ญ๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊ณ , ์ฐธ์กฐ ๋ฐฉ์์ผ๋ก ์๋ณธ์ ๊ณ์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉ๋ฒ์ ๊ฐ์ธํ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํฌ ์ ์์์ต๋๋ค.
์ง๋ฌธ๊ณผ ๊ธฐ๋๋๋ ๋ต๋ณ์ ํ๋๋ก ๋ฌถ์ด ๋ณํ์ง ์๋๋ก ๊ด๋ฆฌํ๊ณ , ํด๋น ์ง๋ฌธ ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ๋ณ ์ง๋ฌธ ์ธํธ ์ํฐํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ํํ์ต๋๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ง๋ฌธ ์ธํธ์ ๋ฒ์ ๊ณผ ์ง๋ฌธ ์์๋ฅผ ๊ด๋ฆฌํ๋ ์ง๋ฌธ ์ธํธ ๋งต์ ํตํด์ ๊ณต์ ๋๋ฉด์ ๋ ๋ฆฝ์ ์ธ ๊ตฌ์กฐ๋ก ์ค๊ณํ์ต๋๋ค.
๋ฉด์ ์ฐ์ต ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ์ง๋ฌธ ์ธํธ ๋ชฉ๋ก ์กฐํ๊ฐ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์์ต๋๋ค.
ํ์ง๋ง ์ฌ์ฉ์ ์๋๋ฆฌ์ค ํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ํ์ํ ๋๋ง๋ค ๊ฐ๋ณ ์กฐํํ๋ ๋ฐ๋ณต์ ์กฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ง๋ฌธ ์ธํธ 50,000๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ง๋ฌธ ๋ชฉ๋ก ์กฐํ ๊ธฐ๋ฅ์ ํ ์คํธํ์ ๋, ํ๊ท 418ms๋งํผ์ ์๋ต ์๊ฐ์ด ๋์์ต๋๋ค. ๋ ๋ง์ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด ์๋ต ์๊ฐ์ด ๋ ์ฆ๊ฐํ ์ฐ๋ ค๊ฐ ์์ด ํ ๋ฒ์ ์กฐํ๋ก ์ฐ๊ด๋๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
"ํผ์๋, ๋์ด์๋! ๋ค์ํ ๋ฉด์ ์ฐ์ต ๋ชจ๋"
์ฌ์ฉ์๋ SOLO ๋๋ PAIR ๋ชจ๋๋ฅผ ์ ํํด ๋ฉด์ ์ ์์ํ ์ ์์ต๋๋ค.
WebSocket ๊ธฐ๋ฐ ์ค์๊ฐ ํต์ ์ผ๋ก ๋ฉด์ ์ํ๊ฐ ์ค์๊ฐ์ผ๋ก ๋๊ธฐํ๋๋ฉฐ,
๋ฉด์ ๊ด/๋ฉด์ ์ ์ญํ ์ ์์ ๋กญ๊ฒ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์ฐ์ตํ ์ ์์ด์.
"๋ต๋ณ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋๋ํ ์ง๋ฌธ!"
์ฌ์ฉ์์ ๋ต๋ณ์ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ
GPT API๋ฅผ ํตํด ๋ง์ถคํ ๊ผฌ๋ฆฌ์ง๋ฌธ์ ์๋ ์์ฑํฉ๋๋ค.
STT(Speech-to-Text) ๊ธฐ์ ๋ก ์์ฑ ๋ต๋ณ์ ํ
์คํธ๋ก ๋ณํํ๊ณ ,
์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ์ธํ๋ ํ์ ์ง๋ฌธ์ ์ ๊ณตํด์.
"๋ฉด์ ์ค์๋ ์ํต์ ๊ณ์๋์ด์ผ์ฃ !"
WebSocket ๊ธฐ๋ฐ ์ค์๊ฐ ์ฑํ
์ผ๋ก ๋ฉด์ ์งํ ์ค
์ฐธ์ฌ์๋ค์ด ์ฆ์ ์ํตํ ์ ์์ต๋๋ค.
๋ฐฉ๋ณ ์ฑํ
๋ฐฉ ๊ด๋ฆฌ์ ๋ฉ์์ง ๋ธ๋ก๋์บ์คํ
์ผ๋ก
์ํํ ์ปค๋ฎค๋์ผ์ด์
์ ์ง์ํด์.
"๊ฐํธํ๊ณ ์์ ํ ๋ก๊ทธ์ธ!"
์นด์นด์ค OAuth2 ์ฐ๋์ผ๋ก ๋ณต์กํ ํ์๊ฐ์
์ ์ฐจ ์์ด ์ํด๋ฆญ์ผ๋ก ๋น ๋ฅธ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ผ๋ก ๋ณด์์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๋ฆฌํ๋ ์ ํ ํฐ์ ํตํด ์์ ์ ์ธ ์ธ์
๊ด๋ฆฌ๋ฅผ ์ ๊ณตํด์.
"ํ์๊ฐ์ ์์ด๋ ๋ฐ๋ก ์ฒดํ!"
์ต๋ช
์ฌ์ฉ์๋ ์ฆ์ ๋ฉด์ ์ฐ์ต์ ์์ํ ์ ์์ต๋๋ค.
์์ ๊ฒ์คํธ ๊ณ์ ์์ฑ์ผ๋ก ์๋น์ค ์ ํ ์์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ์์ ๋กญ๊ฒ ์ด์ฉํ ์ ์์ด์.
๋ถ๋ด ์๋ ์๋น์ค ์ฒดํ์ด ๊ฐ๋ฅํฉ๋๋ค.
"๋ชจ๋ ์ง๋ฌธ ์ธํธ๋ฅผ ๊น๋ํ๊ฒ!"
ํ๊ทธ๋ณ ํํฐ๋ง ์์คํ
์ผ๋ก ํ๊ทธ ๊ธฐ๋ฐ ๊ฒ์๊ณผ ํ์ด์ง ์ฒ๋ฆฌ๋ก ํจ์จ์ ์ธ ์ง๋ฌธ ์ธํธ ํ์์ด ๊ฐ๋ฅํฉ๋๋ค.
**๋ด ์ง๋ฌธ์ธํธ(/my)**์ ๊ณต๊ฐ ์ง๋ฌธ์ธํธ ๋ถ๋ฆฌ ์กฐํ๋ก ์ฒด๊ณ์ ์ธ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์.
"๋๋ง์ ๋ง์ถค ์ง๋ฌธ ์ธํธ ๋ง๋ค๊ธฐ!"
์ง๊ด์ ์ธ UI๋ก ์ง๋ฌธ๊ณผ ์์ ๋ต๋ณ์ ํ ๋ฒ์ ๋ฑ๋กํ๊ณ , ํ๊ทธ ์์คํ
์ผ๋ก ์ฒด๊ณ์ ์ธ ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ณต๊ฐ/๋น๊ณต๊ฐ ์ค์ ์ผ๋ก ๋ค๋ฅธ ์ฌ์ฉ์์์ ๊ณต์ ์ฌ๋ถ๋ฅผ ์์ ๋กญ๊ฒ ๊ฒฐ์ ํ ์ ์์ด์.
"๋ง์์ ๋๋ ์ง๋ฌธ์ ๋ด ๊ฒ์ผ๋ก!"
๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๊ณต์ ํ ์ง๋ฌธ ์ธํธ๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ํด๋ฆญ ํ ๋ฒ์ผ๋ก ๋ด ๊ณ์ ์ ๋ณต์ฌํ ์ ์์ต๋๋ค.
์ ๋ชฉ๊ณผ ์ค๋ช
์ ์์ ๋กญ๊ฒ ์์ ํ ์ ์์ด์.
"๊ธฐ์กด ์ง๋ฌธ์ ๋ต์ ๋ ์ข๊ฒ ๋ง๋ค์ด๋ณด์ธ์!"
๋ด ์์ ์ ์ง๋ฌธ ์ธํธ๋ฅผ ์์ ํด ๊ธฐ์กด ๋ต๋ณ์ ๋ ์ข๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค.
"์ค์๋ ๊ฑฑ์ ์๋ ์ํํธ ์ญ์ !"
๋ด๊ฐ ๋ง๋ ์ง๋ฌธ ์ธํธ๋ง ์ญ์ ํ ์ ์์ด์. ๋ ์ด์ ํ์ํ์ง ์์ ์ง๋ฌธ ์ธํธ๋ ์ญ์ ํด ๋ด ์ง๋ฌธ ์ธํธ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ถ๋ฅ | ๊ธฐ์ ์คํ |
---|---|
Frontend | |
Backend | |
Database / Infra | |
๋ฐฐํฌ | |
ํ์ / ๊ฐ๋ฐ๋๊ตฌ |
์ด์ฐฌ | ๊นํ์ง | ๊ฐ์ง๊ท | ๋ฐฐ์ํ | ์ ์ค์ง | ์ฅ๋ํ |
---|---|---|---|---|---|
![]() |
|||||
Frontend | Frontend | Backend | Backend | Backend | Backend |
@today-is-first | @hyeongjin-kim | @jin0410 | @SwnBae | @llcodingll | @SuitGGam |