๐ ํ๋ก์ ํธ ํ๊ณ
Readhub ์ ์๋์๊ด ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค๊ฐ์ ์ง๋๋ฉด์ ์ํ ์ , ๋ฌธ์ ์ , ๊ณํ๊ณผ ์๋ํ ๋ถ๋ถ ๋ฑ์ ์ ๊ฒํ๋ฉฐ
๊ตฌํํ๋ฉด์ ๋๋์ ์ ํ๊ณ ํด๋ณด๋ ค๊ณ ํ๋ค!
๐ ํ๋ก์ ํธ ์ค๊ฐ ๋ชฉํ
- SSE ์ค์๊ฐ ์๋ฆผ ๊ตฌํ
- ๊ฐ์ธ๋ณ ๋ง์ถค์ถ์ฒ ๊ณ ๋ํ ํด๋ณด๊ธฐ!
- ํต๊ณ๊ธฐ๋ฅ ๊ตฌํ
๐ง ์งํ ์ํฉ
์๋ฆผ
- SseEmitter๋ฅผ ํ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ
- ์ ์ ๋ณ ์๋ฆผ์ ๊ด๋ฆฌํ๊ธฐ ์ํ EmitterRepository ๊ตฌํ
- ๋ฐ๋ฉ์ผ ์๋ฐ, ์ฐ์ฒด, ์์ฝ ๋์ ์๋ฆผ ๋ฑ์ @Scheduled ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ ์ก
- ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ณ๋ก ๊ณ ์ SSE ์ฐ๊ฒฐ์ ์ ์งํ๋ฉฐ ์๋ฆผ ์์ ๊ฐ๋ฅ
์ฐํ๊ธฐ
- ์ํ๋ ๋์๋ฅผ ์ฐํ์ฌ ์ฐํ ๋ชฉ๋ก์ ์ ์ฅ
- ์ฐํ๊ธฐ ์ทจ์
- ์ฐํ ๋์๋ฅผ ์ ์ฒด ์กฐํ
ํต๊ณ
- ๊ธฐ๊ฐ๋ณ ๋์ถ ๊ฑด์ ์กฐํ
- ์ฐ์ฒด๋ ๋์ ๋ชฉ๋ก ์กฐํ
- ๋์ถ ์ํ ๋ณ ๋์ ์
- ๊ฐ์ฅ ๋ง์ด ๋์ถ๋ ๋์ ๋ชฉ๋ก ์กฐํ
- ์นดํ ๊ณ ๋ฆฌ๋ณ ์ธ๊ธฐ ๋์ ๋ชฉ๋ก ์กฐํ
ํฌ๋ง๋์
- ํฌ๋ง๋์ ์ ์ฒญ /์ทจ์
- ํฌ๋ง๋์ ๋ชฉ๋ก ์กฐํ (๊ด๋ฆฌ์ / ์ ์ )
์ฐ์ฒด
- ์ฐ์ฒด ์๋๋ฑ๋ก (์ค์ผ์ฅด๋ฌ)
- ์ฐ์ฒด์ํ์ ๋์ ์กฐํ (๊ด๋ฆฌ์/์ ์ )
- ์ฐ์ฒด ์ทจ์
- ๋์ฌ๋ถ๊ฐ ์ทจ์ ์ ์ฒญ /์น์ธ
๐ ์ํ ์ (Keep)
์ด๋ฒ ํ๋ก์ ํธ์ ์ค๊ฐ ์์ ์์, ๊ฐ์ฅ ์ํ๋ค๊ณ ์๊ฐํ๋ ์ ์ ์ฒ์ ์จ๋ณด๋ ๊ธฐ์ ๋ค์ ๊น๊ฒ ๊ณ ๋ฏผํ๊ณ ์ค์ ๊ธฐ๋ฅ์ ์ ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
ํนํ ๊ฐ์ธ๋ณ ๋ง์ถค ์ถ์ฒ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ ๋ง์ ๊ณ ๋ฏผ๊ณผ ์ฑ์ฅ์ ๊ฒฝํํ๋ค.
์ฒ์์๋ ๋จ์ํ "์ต๊ทผ ๋์ฌํ ์ฑ
๊ณผ ๊ฐ์ ์นดํ
๊ณ ๋ฆฌ์์ ์กฐํ์๊ฐ ๋์ ์ฑ
์ ์ถ์ฒํ๋ฉด ๋๊ฒ ์ง?"๋ผ๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ๊ณง ์นดํ
๊ณ ๋ฆฌ ๊ธฐ์ค์ด ๋๋ฌด ๋๊ณ ์ถ์์ ์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ๋๊ผ๋ค. ๊ทธ๋์ ๋ ์ ๊ตํ ์ถ์ฒ์ ์ํด ์ ์์ ํค์๋ ๊ธฐ๋ฐ์ ์ฝํ
์ธ ์ ์ฌ์ฑ ์ถ์ฒ ๋ฐฉ์์ผ๋ก ๊ณ ๋ํํ๊ณ ,
์ฌ๊ธฐ์ Redis๋ฅผ ๋์
ํด ์ถ์ฒ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํจ์ผ๋ก์จ ์ฑ๋ฅ ์ต์ ํ์ ์๋ต ์๋ ํฅ์์ด๋ผ๋ ๊ฒฐ๊ณผ๋ ์ป์ ์ ์์๋ค.
์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์๋ ๋จ์ํ ๊ธฐ์ ๊ตฌํ์ ๋์ด์ “์ ๋ง ์ด ๋ฐฉ์์ด ์ต์ ์ผ๊น?”, “๋ ์ข์ ๋ฐฉ๋ฒ์ ์์๊น?”,“๋ด๊ฐ ์ด ์ฌ์ดํธ์ ์ฌ์ฉ์๋ผ๋ฉด ๋ถํธํ์ง ์์๊น?”์ ๊ฐ์ ์ฌ์ฉ์ ์ค์ฌ์ ์ง๋ฌธ์ ๋์์์ด ๋์ง๋ฉฐ ๊ฐ์ ํด ๋๊ฐ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ์ ์ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณด๋ค ๊ฐ์ธํ๋ ์ถ์ฒ์ ์ ๊ณตํ๊ณ , Redis๋ฅผ ํตํด ์ ํ์ฑ๊ณผ ์๋๊น์ง ๊ณ ๋ คํ ๊ธฐ๋ฅ์ ์์ฑํ๋ค.!
์ด๋ฒ ํ๋ก์ ํธ์์ ๊ผญ ๋์ ํด๋ณด๊ณ ์ถ์๋ ๊ธฐ๋ฅ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ค์๊ฐ ์๋ฆผ์ด์๋ค.
WebSocket๊ณผ ๊ณ ๋ฏผํ๋ค๊ฐ ์๋์ ์ผ๋ก ๊ฐ๋ณ๊ณ ๊ตฌํ์ด ๊ฐ๋จํ **SSE(Server-Sent Events)**๋ฅผ ์ ํํ๋ค.
์ฒ์์๋ ๋จ์ํ ์ค์๊ฐ์ผ๋ก ์๋ฆผ์ ๋์ฐ๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ง ์๊ฐํ์ง๋ง, ๋ง์ ๊ตฌํํด ๋ณด๋ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์ ์ง, ํ์์์, ์ฌ์ฐ๊ฒฐ ์ฒ๋ฆฌ ๋ฑ
์์ธ ์ํฉ์ ์ง์ ๋ค๋ค์ผ ํ๊ณ , ๊ทธ ๊ณผ์ ์์ ์ค์๊ฐ ๊ธฐ๋ฅ์ ๋ณต์กํ ํ๋ฆ๊ณผ ์ธ์ฌํ ์ค๊ณ ํ์์ฑ์ ๊น์ด ๋๊ผ๋ค.
ํนํ ์ค์ํ ๊ฑด, ๋จ์ํ "๊ธฐ๋ฅ์ด ๋๋ค"์์ ๊ทธ์น๋ ๊ฒ์ด ์๋๋ผ ์ฌ์ฉ์์ ์
์ฅ์์ ํ์ํ ์๋ฆผ์ ๋์น์ง ์๊ณ ์ฆ์ ์ ๋ฌ๋ฐ๋ ๊ฒฝํ์ ๋ง๋ค์ด๋ด๋ ๊ฒ์ด์๋ค. ์์ฝํ ๋์๊ฐ ๋์ฌ ๊ฐ๋ฅํด์ก์ ๋, ๋ฐ๋ฉ์ผ์ด ์๋ฐํ์ ๋, ์ฐ์ฒด๊ฐ ๋ฐ์ํ์ ๋ ๋ฑ์ค์ํ ์ํฉ์์ ์ฆ์ ์๋ฆผ์ด ์ ๋ฌ๋๋๋ก ์ค๊ณํ๋ค. ๊ทธ๋ฆฌ๊ณ EmitterRepository๋ฅผ ์ง์ ๊ตฌํํด ์ฌ์ฉ์ ID ๊ธฐ์ค์ผ๋ก emitter๋ฅผ ๊ด๋ฆฌํ๋๋ก ํจ์ผ๋ก์จ, ์ ์ ๋ณ ์๋ฆผ์ ์ ํํ๊ฒ ์ ๋ฌํ ์ ์์๊ณ , ๊ธฐ๋ฅ ํ์ฅ์ด๋ ์์ฉ ์ธก๋ฉด์์๋ ์ ์ฐํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ ๊ตฌ์กฐ๋ก ์ค๊ณํ ์ ์์๋ค.
์ค์๊ฐ ์๋ฆผ๊ณผ ๊ฐ์ธ๋ณ ๋ง์ถคํ ์ถ์ฒ ๊ธฐ๋ฅ ๊ตฌํ์ ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ค๊ณํ๊ณ ๊ณ ๋ฏผํ๋ ๋ฅ๋ ฅ๊น์ง ์ฑ์ฅํ ์ ์์๋ ์์ฃผ ๋ฟ๋ฏํ ์๊ฐ์ด์๊ณ , ๊ฐ์ธ๋ณ ๋ง์ถคํ ์ถ์ฒ์ ๊ธฐ์ ์ ์ผ๋ก๋ ์ฝํ
์ธ ๊ธฐ๋ฐ ์ถ์ฒ ๋ก์ง + ์บ์ฑ ์ต์ ํ ๊ฒฝํํ๋ค.
๋ํ ์ค์๊ฐ ์๋ฆผ ๊ธฐ๋ฅ์ ์ฌ์ฉ์์ ํ๋ฆ์ ๋์ง ์๊ณ ์ ๋ณด๋ฅผ ์ ์์ ์ ๊ณตํ๋ ๊ฒ์ ์ค์์ฑ์ ์๊ฒ ๋์๋ค.
์ด ๋ ๊ฐ์ง ๊ธฐ๋ฅ ๊ตฌํ์ ํตํด ์ค์ ์๋น์ค์ฒ๋ผ ์๊ฐํ๊ณ ๊ฐ๋ฐํ๋ ํ๋๋ฅผ ํค์ธ ์ ์์๋ ์ข์ ์๊ฐ์ด์๋ค.!
๐๋ฌธ์ ์ (Keep)
๊ธฐ์ ์ ์ผ๋ก ๋ง์ ๋ฐฐ์์ด ์์์ง๋ง ์์ฌ์ด ๋ถ๋ถ๋ ๋ช ๊ฐ์ง ์๋ค..!
์ด๋ฒ ํ๋ก์ ํธ์์ ๊ตฌํํ ๊ธฐ๋ฅ ์ค ์กฐํ์๊ฐ ๋์ ๋์๋ฅผ ์ธ๊ธฐ ๋์๋ก ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด๋, ์ฌ์ฉ์์ ๋์ถ ๊ธฐ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ์ถ์ฒํ๋ ๊ฐ์ธ๋ณ ๋ง์ถค ์ถ์ฒ ๊ธฐ๋ฅ์ ์๋น์ค์์ ์์ฃผ ํธ์ถ๋๊ณ ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋งํ๊ฑฐ๋ ์ ๋ ฌํด์ผ ํ๋ ๊ธฐ๋ฅ์ด์๋ค.
์ฒ์ ์ด ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ ๋๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์๋ํ๋ ๋ฐ์๋ง ์ง์คํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ์์ด ๋ง์์ก์ ๋ ์ด๋ป๊ฒ ๋ ์ง์ ๋ํ ๊ณ ๋ฏผ์ ๋ถ์กฑํ๋ ๊ฒ ๊ฐ๋ค.
์ถ์ฒ ๊ธฐ๋ฅ์์๋ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ๊ฑฐ๋ LIKE, IN ์ ๋ฑ์ ํ์ฉํ ๋ณต์กํ ์กฐ๊ฑด์ด ๋ง์๋๋ฐ, ์ฟผ๋ฆฌ ์คํ ๊ณํ์ด๋ ์ธ๋ฑ์ค ์ ๋ฌด์ ๋ํด ๊ณ ๋ คํ์ง ์๊ณ ๊ตฌํํ๋ ์ ์ด ๋์ค์ ๋์๋ณด๋ ์์ฌ์ ๋ค. ์ธ๋ฑ์ค๋ฅผ ํ์ง ์๊ธฐ ๋๋ฌธ์ ํจ์จ์ด ๋จ์ด์ง๋ค๋ ์ ์ ๊ฒ์ํ๋ฉด์ ์๊ฒ ๋์๋ค.
์ด๋ฐ ๊ฒฝํ์ ํ๋ฉด์ ๋๋ ์ ์, ๋จ์ํ ๊ธฐ๋ฅ์ด ์ ๋์๊ฐ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๋ค๋ ๊ฒ์ด์๋ค.
์ด๋ฒ ๊ฒฝํ์ ๋จ์ํ ์๋ํ๋ ์ฝ๋๊ฐ ์๋๋ผ ์ง์์ ์ผ๋ก ์ข์ ์ฑ๋ฅ์ ์ ์งํ๋ ์ฝ๋๊ฐ ๋๋ ค๋ฉด ๋ฌด์์ด ํ์ํ์ง๋ฅผ ๊ณ ๋ฏผํ๊ณ ๊ธฐ๋ฅ ๊ตฌํ ์ด๊ธฐ๋ถํฐ ์ฑ๋ฅ ์ค์ฌ์ ์์ ๋ ํจ๊ป ๊ฐ์ ธ๊ฐ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค!
โ๏ธ ์๋ํ ๋ถ๋ถ (Try)
- ๊ฐ์ธ๋ณ ๋ง์ถค ์ถ์ฒ Elastic Search ์ ์ฉ
- ์์ฃผ ์กฐํ๋๋ ์นผ๋ผ์์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑ
- ๋ณต์กํ ์กฐ๊ฑด์ ์ถ์ฒ ์ฟผ๋ฆฌ๋ QueryDSL + CustomRepository๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๋ ์ฑ ๊ฐ์
- MSA๋ฅผ ๊ณ ๋ คํ์ฌ ์ค์๊ฐ ์๋ฆผ์ Redis์ Pub/Sub ๊ธฐ๋ฅ์ ์ ์ฉ
๐๏ธ ์์ผ๋ก์ ๊ณํ
- ํ ์คํธ ์ฝ๋
- ๋ก๊ทธ ์ ์ฉ
- MSA ์๋น์ค ๋ถํ (Kafka ์ฌ์ฉ)
- AWS ๋ฐฐํฌ
๐ฅ๋ง์ง๋ง์ผ๋ก
์ด ํ๊ณ ๋ฅผ ์์ฑํ๋ฉฐ ๋๋ ์ ์ ์ด๋ฒ ๊ตฌํ์ ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์์ ๋๋๋ ๊ฒ์ด ์๋๋ผ, ์ค์ ๋ก ๋๊ตฐ๊ฐ๊ฐ ์ฌ์ฉํ ์ ์๋ ์๋น์ค๋ ์ด๋ค ๋ชจ์ต์ด์ด์ผ ํ ๊น?๋ผ๋ ์ง๋ฌธ์ ๊ณ์ ๋ ์ฌ๋ฆฌ๊ฒ ํด ์ค ์๊ฐ์ด์๋ค.
์ฒ์์๋ ํ๊ณ ์ถ์ ๊ธฐ๋ฅ, ๋์ ํด๋ณด๊ณ ์ถ์ ๊ธฐ์ ๋ค์ ์ค์ฌ์ผ๋ก ์์ํ์ง๋ง, ํ๋ก์ ํธ๊ฐ ์ ์ ์ปค์ง๊ณ ๊ณ ๋ํ๋๋ฉด์ ๋จ์ํ ์๋ํ๋ ์ฝ๋๊ฐ ์๋๋ผ ์ฌ์ฉ์ ์นํ์ ์ธ ์๋น์ค๋ฅผ ๊ณ์ ๊ณ ๋ คํ๋ฉฐ ์์ ํ๋ค๋ ๊ฑธ ์ค์ค๋ก ๊น๊ฒ ๋๋ผ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋์๊ณ ๊ธฐ์ ์ ์ฑ์ฅ์ ๋ฌผ๋ก ์๋น์ค์ ๋ํ ์์ผ๋ ๋ํ ์ ์์๋ ๊ฒ ๊ฐ๋ค! ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ ๊ธฐ๋ฅ์ ์ ๋ง๋๋ ๊ฒ๋งํผ ์ง์์ ์ผ๋ก ์ข์ ์ฑ๋ฅ์ ์ ์งํ ์ ์๋ ์ค๊ณ์ ์ค์์ฑ๋ ๋๊ผ๋ค.
์ด ๊ณผ์ ์์์ ๊ธฐ์ ์ ๋ํ๋ ํ๋๊ฐ ๋ง์ด ๋ฌ๋ ธ์์ ๋๋ ์๊ฐ์ด์๋ค.
์์ผ๋ก ๋จ์ ์๊ฐ ๋์์ ์ง๊ธ๊น์ง์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ํ
์คํธ ์ฝ๋, ๋ก๊น
, MSA ๋ถ๋ฆฌ, ์ฑ๋ฅ ์ต์ ํ, ๋ฐฐํฌ๊น์ง ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ ๋ง ์ค์๋น์ค์ฒ๋ผ ์์ฑ๋ ๋์ ํ๋ก์ ํธ๋ก ๋์ด์ฌ๋ฆฌ๊ณ ์ถ๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ ๋์๊ฒ ๋จ์ํ ๊ธฐ์ ํ๋๋ฅผ ๋ฐฐ์ฐ๋ ์๊ฐ์ด ์๋๋ผ,
์ด๋ค ๊ด์ ์ผ๋ก ๊ฐ๋ฐ์ ๋ฐ๋ผ๋ณด๊ณ ์ด๋ค ํ๋๋ก ์ฑ์ฅํด ๋๊ฐ์ผ ํ ์ง๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋ง๋ ์๊ฐ์ด์๋ค.
๋ค์ ํ๊ณ ๋ฅผ ์ธ ๋๋ ์กฐ๊ธ ๋ ์ฑ์ฅํด ์๊ธฐ๋ฅผ..!๐ฅ