- ๋ ์ค๋ฅด๋ ๋ฌธ์ฅ ๋๋ ๋จ์ด๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ !
๊ฒ์์ ์์ํ๋ฉด ์ ์ ๋ค์ ๋ค๋ฅธ์ฌ๋์ด ๊ทธ๋ฆด ๋ฌธ์ฅ ๋๋ ๋จ์ด๋ฅผ ์ ์ถํด ์ฃผ์ธ์.
๋ ์ค๋ฅด๋๊ฒ ์์ผ์ ๋ ๊ด์ฐฎ์ต๋๋ค. ์ ํฌ๊ฐ ๋๋คํ๊ฒ ๋๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ ๋ ๐ - ์ ์์ด๋ฅผ ๋ฐ์ผ๋ฉด ๊ทธ๋ฆผ์ ๊ทธ๋ ค์!
๋ค๋ฅธ ์ ์ ๊ฐ ์ ์ถํ ์ ์์ด๋ฅผ ๋ณด๊ณ ๋๋ง์ ๊ทธ๋ฆผ์ ํตํด ํํํด์ฃผ์ธ์. - ๊ทธ๋ฆผ์ ๋ฐ์ผ๋ฉด ์ ์์ด๋ฅผ ์
๋ ฅํด์!
๋ค๋ฅธ ์ ์ ๊ฐ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ ๋ณด๊ณ ์ฌ๋ฌ๋ถ์ด ๋๋ผ์ ๊ทธ๋๋ก ์ ์ด์ฃผ์ธ์. - ๋ชจ๋ ๋ผ์ด๋๊ฐ ์ข
๋ฃ๋๋ฉด...?
๊ฒ์์ด ์งํ๋๋ฉด์ ๊ฒฐ๊ณผ๋ฌผ๋ค์ด ์ด๋ป๊ฒ ํํ๋๋์ง ํจ๊ป ๋ณด๋ฉด์ ์ฆ๊ฒจ์ฃผ์ธ์ ๐
๋ณด์ด์ค ์ฑํ
๊ฒ์์ด ์งํ๋๋ ๋์ ์๋ก ๋ํ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ํ๋ ์ด ํด์ฃผ์ธ์.์ค์ผ์น๋ถ
๋ด๊ฐ ์์ํ๋ ๊ฒ์ ๊ทธ๋ฆผ์ ํตํด ๋ง์๊ป ํํํด ์ฃผ์ธ์.๊ฒฐ๊ณผ ํ์ด์ง
๋ชจ๋๊ฐ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ ํจ๊ป ๋ณด๋ฉด์ ๋ณด์ด์ค ์ฑํ ์ ํตํด ์ฆ๊ฒจ์ฃผ์ธ์.์ข์์
ํ์์ ๋ง์ ๋ค์๋ ๊ทธ๋ฆผ๋ค์ ์ข์์๋ฅผ ํตํด ๋ณด๊ณ ์ถ์ผ์ค ๋ ์ผ๋ง๋ ์ง ๋ค์ ๋ณด์ค ์ ์์ต๋๋ค.์ด๋ฏธ์ง ์ ์ฅ
ํ์์ ๊ฒฐ๊ณผ ํ์ด์ง์์ ๋ง์ ๋๋ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ์ ์ฅํด์ ๊ฐ์งํ์ค ์ ์์ต๋๋ค.์ด๋ ์ฝ๋
๊ฐ ๋ฐฉ๋ง๋ค ๊ฐ์ง๊ณ ์๋ ๋๋คํ ์ฝ๋๋ฅผ ์ด์ฉํด์ ์น๊ตฌ์๊ฒ ์ด๋๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.๋ฑ์ง
ํน์ ํ ์ํฉ๋ง๋ค ์ง๊ธ๋๋ ๋ฑ์ง๋ฅผ ํตํด ์์ํ ์ฑ์ทจ๊ฐ์ ๋๋ผ์ค ์ ์์ต๋๋ค.
2022.12.30 ~ 2023.02.10 / ์๋น์ค ๋ฐ์นญ : 2023.01.30
๐๐ป ๊ฒ์ ํํ ํ๋ฌ ๊ฐ์์ฃ !
์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ์๊ฐํ๊ณ ๊ฒฐ์ ํ์ต๋๋ค !
์๊ตฌ ์ฌํญ | ์ ํ์ง | ํต์ฌ ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ฐ ๊ทผ๊ฑฐ |
---|---|---|
WebRTC๋ฅผ ์ด์ฉํ ์ฌ์ฉ์ ์์ฑ ์ฐ๊ฒฐ |
- Mesh(p2p) - SFU |
- SFU๋ ํ๋์ ์๋ฒ๋ฅผ ๋ ๊ตฌ์ถํด์ผํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ์ ๊ท๋ชจ์ ๋ง์ง ์์ - ์์ ์์ด ์์ฑํต์ ๋ง ๊ตฌํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ๋ถํ๊ฐ ์ฌํ์ง ์๋ค๊ณ ํ๋จ - Mesh๋ฐฉ์์ ์ฝ๋ ์ํ์ด ๊ฐ์ฅ ๋ง์ ์ ๋ณด๋ฅผ ์ฐพ์๋ณด๊ธฐ ํธํ์ |
๊ฒ์ ๋ก๋น์์ ์ค์๊ฐ ๋ฐฉ ์ ๋ณด ์กฐํ |
- Polling - Long Polling - SSE - WebSocket |
- ๋ฆฌ์์ค์ ์ค์๊ฐ์ฑ ๋๊ฐ์ง ์ธก๋ฉด ๊ณ ๋ ค ํ์ - ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผํ๋ฏ๋ก ์๋ฒ์ ๋ถํ๊ฐ ์ ์ด์ผํจ - polling์ ๊ตฌํ์ด ๊ฐ๋จํ๋ ์ค์๊ฐ์ผ๋ก ๋ฐ์๋์ง ์๊ณ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ํค๊ณ ์ถ๋ค๋ฉด ์๋ฒ์ ์งง์ ๊ฐ๊ฒฉ์ผ๋ก ์์ฒญ์ ํ๋ฉด ๋๋ ์๋ฒ์ ๋ถํ๊ฐ ์ฌํด์ง - Long Polling์ ์ค์๊ฐ์ฑ์ ๋ณด์ฅ๋ฐ์ ์ ์์ผ๋ ๊ตฌํ์ด ๋ฒ๊ฑฐ๋ก์ - ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ํธ์์ฉ ๋ถํ์, ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋จ๋ฐฉํฅ ํต์ ๋ง ํ์ํ ์ผ์ด์ค์ด๋ฏ๋ก ๋ฆฌ์์ค ์ธก๋ฉด ๊ณ ๋ คํ์ฌ SSE๋ฐฉ์์ ์ฑํ |
๊ฒ์ ์งํ ๊ณผ์ ์์ ๊ฐ๋จํ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ |
- Canvas API - WebGL |
- WebGL์ ๋ณต์กํ 3D ๋ ๋๋ง์ ๋ ์ ํธ๋๊ณ Canvas API๋ ์ผ๋ฐ์ ์ผ๋ก 2D ๋ ๋๋ง์ ๋ ์ ํธ๋จ - ๊ฐ๋จํ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด WebGL์ ๋๋ฌด๋ ๋ง์ ๋ฌ๋์ปค๋ธ๋ฅผ ํ์๋ก ํจ - ๋ฐ๋ผ์ ์ ๋ก๋ฒ ์ด์ค์์ ๊ธ๋ฐฉ ๊ตฌํํ ์ ์๋ Canvas API๋ฅผ ์ฑํํ์์ |
๊ทธ๋ฆผ ์ด๋ฏธ์ง ํ์ผ ๊ด๋ฆฌ |
- Spring Scheduler - Spring Batch - Scheduler quartz |
- ๊ทธ๋ฆผ์ DB์ ์ ์ฅํ์ฌ ๊ฒ์ ์ค ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๋ฉฐ ํ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ ๊ธฐ ์ํด ์ค์ผ์ค๋ง ํ์ - ์ด๋ฒคํธ ์ผ์ ์ ๋ณ๋์ด ์์ผ๋ฉฐ ์ด๋ฒคํธ ์ ๋์ํ๋ ๋ก์ง์ด ๋จ์ํ๊ณ ํ๋ก์ ํธ ๊ท๋ชจ์ ๋ง๊ฒ ๊ฐ๋จํ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ Spring Scheduler ์ฌ์ฉ |
๋นํ์ ์ ๋ณด ๊ด๋ฆฌ | - MySQL - Redis - Memcached |
- Redis๋ ๋ฐ์ดํฐ ์
๋ ฅ๊ณผ ์ญ์ ๊ฐ MySQL์ ๋นํด์ 10๋ฐฐ์ ๋ ๋น ๋ฆ - ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ด ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ง์ํ์ง ์์ง๋ง, ๋์ ๋ฐ์ดํฐ์ ๊ณ ์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ์ ์ต์ ํ ๋์ด ์์ - Redis๋ Memcached ์ ๋ฌ๋ฆฌ ๋จ์ํ key/value ์๋ฃ๊ตฌ์กฐ ์ธ์๋ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ ์ง์ - ํ๋์ ๋นํ์ ์ ๋ณด์ โ๊ณ ์ ๋ฒํธ, ๋๋ค์, ์ด๋ฏธ์งURLโ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ์ ์ฅ์ด ๊ฐ๋ฅ - Redis ์์ฒด์ ์ผ๋ก ๋ง๋ฃ ์๊ฐ ์ค์ ๊ฐ๋ฅ |
FRONT-END
์งํ ์์ | ๋ด์ฉ |
---|---|
๐ฑ ๋ฌธ์ | ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ ๊ทผ ๊ถํ์ ํ๊ฐ ํน์ ๊ฑฐ๋ถํ์ง ์์ผ๋ฉด ์์ผ์ด ์ฐ๊ฒฐ๋์ง ์์ ๊ฒ์์ ์ ๋๋ก ์งํ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋ด ์๋ฆฌ๋ฅผ ๋ค๋ฅธ ์ฌ๋์ ๋ค์ ์ ์์ผ๋ ๋๋ ๋ค๋ฅธ ์ฌ๋์ ์๋ฆฌ๋ฅผ ๋ค์ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ |
๐ค ์์ธ | ๋ฏธ๋์ด ์คํธ๋ฆผ ์ ๊ทผ ๊ถํ์ ์์ฒญํ ๋ ์ฝ๋์ ํ๋ฆ์ด ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ดํ ์ฝ๋๊ฐ ์คํ๋์ง ์์ผ๋ฏ๋ก ์์ผ ์ฐ๊ฒฐ์ด ๋์ง ์์ ๋ฏธ๋์ด ์คํธ๋ฆผ ๊ถํ์ด ์ฒ๋ฆฌ๋์ง ์์์ ๋ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ rtc์ฐ๊ฒฐ์ ์์ฒญ์ ๋์ ๋ฏธ๋์ด ์คํธ๋ฆผ์ด undefined ์ํ์ด๋ฏ๋ก ์๋์ ์์ฑ์ ๋ค๋ฆฌ๋ ๋์ ์์ฑ์ด ์ ๋ฌ๋์ง ์์ |
๐ญ ์๋ | โข getUserMedia()๋ฅผ ๋ณ๊ฐ์ useEffect๋ก ๋ถ๋ฆฌํ์ฌ ์์ผ๊ณผ rtc๋ฅผ ์ฐ๊ฒฐํ๋ ๋ก์ง์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฒ ๊ตฌํ ์ด ๊ฒฝ์ฐ ๋ฏธ๋์ด์คํธ๋ฆผ์ ํ๊ฐํ๊ธฐ ์ ์ rtc์ฐ๊ฒฐ์ ์์ฒญํ๋ฏ๋ก ๋ด ๋ก์ปฌ์คํธ๋ฆผ์ด undefined ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ โข getUserMedia()ํจ์๋ฅผ ์์ผ ์ฐ๊ฒฐ ์ดํ์ ํธ์ถํ๋๋ก ๋ณ๊ฒฝํจ. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ rtc์ฐ๊ฒฐ์ ์์ฒญํ์ ๋๋ง์ดํฌ ์ ๊ทผ ๊ถํ์ ํ๊ฐํ๊ฑฐ๋ ๊ฑฐ๋ถํ์ง ์์ ์ํ์ด๋ฉด ๋์ ๋ฏธ๋์ด์คํธ๋ฆผ์ด undefined ์ธ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ฏ๋ก ๋์ ๋ง์ ๋ค๋ฅธ ์ฌ๋์ด ๋ค์ ์๊ฐ ์์ |
๐ ํด๊ฒฐ | โข getUserMedia()ํจ์๋ฅผ ๋ณ๊ฐ์ useEffect๋ฅผ ์ด์ฉํด ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๊ทธ๋๋ก ๋ โข ์์ฒญ์ ๋ฐ์ rtc์ฐ๊ฒฐ์ ์คํํ๊ฑฐ๋, ๋ด๊ฐ ์๋ก์ด rtc์ฐ๊ฒฐ์ ์๋ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ๋ง์ดํฌ ์ฌ์ฉ์ ํ๊ฐ/๊ฑฐ๋ถํ์ง ์์ ์ํ๋ฉด ๋ฐ๋ณต๋ฌธ๊ณผ ํจ๊ป Promise, setTimeOut์ผ๋ก ๊ตฌํํ sleepํจ์๋ฅผ ์ด์ฉํด ์ฝ๋์ ํ๋ฆ์ ๋ง์ โข ์ฌ์ฉ์๊ฐ ๋ง์ดํฌ ์ฌ์ฉ์ ํ๊ฐํ ๊ฒฝ์ฐ ๊ทธ๋๋ก ์ฐ๊ฒฐ์ ์งํํจ, ์ฌ์ฉ์ ๊ฑฐ๋ถํ ๊ฒฝ์ฐ ๋ณธ์ธ์ ๋ง์ดํฌ๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง ์ฌ์ฉ์๊ฐ ์๋ํ ๊ฒ์ด๋ฏ๋ก ํน๋ณํ ์์ธ์ฒ๋ฆฌํ์ง ์์ |
์๊ตฌ ์ฌํญ | ํต์ฌ ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ฐ ๊ทผ๊ฑฐ |
---|---|
๐ฑ ๋ฌธ์ | floodfill ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ด ์ข์ง ์์ ์์ ์น ํ๋๋ฐ ์ง๋์น๊ฒ ์ค๋ ์๊ฐ์ด ์์๋จ ์ ์ ๊ทธ์์ ๋ ํ ๋๋ฆฌ์ rgba๊ฐ์ด ์ ์ rgba๊ฐ๊ณผ ์์ฃผ ์์ ์ฐจ์ด๊ฐ ์์ด floodfill ์๊ณ ๋ฆฌ์ฆ ์ด ์ ๋๋ก ์ ์ฉ๋์ง ์์ |
๐ค ์์ธ | ์ ์ ๊ทธ์์ ๋ ํ
๋๋ฆฌ๊ฐ ํฝ์
์ ์ค๊ฐ์ ๊ฒน์น๋ ๊ฒฝ์ฐ Canvas API์์ ์๋์ผ๋ก ๋ณด์ ํ์ฌ ํฝ์
์ ์์์ด ๋ฐ๋๊ฒ ๋๋ฉด์ floodfill ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ฉ๋์ง ์์ floodfill ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ง~์์ญ๋ง๊ฐ์ ํฝ์ ์ ๋์์ผ๋ก ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ ํจ์์ ์ค๋ฒํค๋๋ ์๊ฐ๋ณต์ก๋์ ํฐ ์ํฅ์ ๋ฐ๊ฒ ๋จ ๋ฐ๋ผ์ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ์ผ ํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ญ์ ์ต์ ํ ๋์ด์ผํจ |
๐ญ ์๋ | โข ์ฌ๊ท ํํ์ floodfill ์๊ณ ๋ฆฌ์ฆ ์ stack์ pop๊ณผ push๋ก ๊ตฌํํด๋ณด์์ผ๋ pop๊ณผ push๋ฉ์๋์ ์ค๋ฒํค๋๋ก ์ธํด ๋ง์กฑํ ๋งํ ์ฑ๋ฅ์ ๋ด์ง ๋ชปํ์ โข rgba๊ฐ์ tolerance๋ฅผ ์ฃผ์ด rgba๊ฐ์ ์ฐจ์ด๊ฐ ํฌ์ง ์๋ค๋ฉด ๊ฐ์ ์์ผ๋ก ์ธ์ํ๊ณ floodfill ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ์ ๋ฐ๊ฒ ๊ตฌํํจ โข rgb๊ฐ์ string์ ์ด์ฉํด ๊ตฌํ๊ณ ์ ํ์ผ๋ ์ด๋ ๋๋ฌด ๋ง์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์์ผฐ์. ๋ํ ํด๋น ํฝ์ ์ rgb๊ฐ์ด tolerance ๋ฒ์ ๋ด์ ์กด์ฌํ๋์ง๋ฅผ ํ๋จํ๊ธฐ ์ํด Math.abs() ํน์ rgb๊ฐ์ ํ์คํธ์ฐจ๋ฅผ ์ด์ฉํด tolerance์ ๋น๊ตํ์์ ๊ทธ๋ฌ๋ ์ด ์ญ์ ๋ง์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํด |
๐ ํด๊ฒฐ | โข pop๊ณผ push๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐฐ์ด์ x์ y์ ํฝ์
์์น ์ ๋ณด๋ฅผ ๋ด์ ํ์ฌ์ ํฝ์
์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํด์ผ๋ก์ ํน์ ํ๊ณ ํด๋น ํฝ์ ์ ๋ํ floodfill ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ์ฑ๋ฅ ํฅ์์ ์ด๋์ด๋ โข rgba๊ฐ์ ์ถ์ถํด๋ด๊ธฐ ์ํด unsigned int๋ก ํํ๋ rgba๊ฐ์ ํด๋นํ๋ ๋นํธ์ ๋นํธ์ฐ์ฐ์ &๋ก ๋ง์คํนํ์ฌ rgba๊ฐ์ ์ถ์ถํ๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก shiftํ์ฌ rgba๊ฐ์ ์ฌ์ฉํ๋๋ก ํจ โข tolerance์ ํ์ฌ rgba๊ฐ์ ๋น๊ตํ๋ ๋ถ๋ถ์์ ๋ค๋ฅธ ๋ฐฉ์์ ์ฐจ์ฉํ์ง ์๊ณ ๊ทธ๋ฅ tolerance๊ฐ๊ณผ ์ผ์ผ์ด ๋น๊ตํจ ๋ค๋ฅธ ๋ฐฉ์๋ณด๋ค ์ด ๋ฐฉ์์ด ๊ฐ์ฅ ๋นจ๋์ |
์๊ตฌ ์ฌํญ | ํต์ฌ ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ฐ ๊ทผ๊ฑฐ |
---|---|
๐ฑ ๋ฌธ์ | ํ ์คํธ์์ ์์ฑ์ 3์ด๋ค์ ์ญ์ ๋๋ ํ์์์์ ์ ์ฉํด๋์ ๊ฐ๊ฐ์ ํ ์คํธ๊ฐ ์๋ก ๋ค๋ฅธ ์ข ๋ฃ ์์ ์ ๊ฐ์ง์ง ์๊ณ ๋ชจ๋ ๊ฐ์ ์ข ๋ฃ์์ ์ ๊ฐ์ง |
๐ค ์์ธ | rerendering ๋๋ฉด์ ํ์์์๋ ์ฌ์ค์ ๋จ |
๐ญ ์๋ | โข react devtools render highlight ๋๋ฒ๊น ์ ์ํด ๋ ๋๋ง๋๋ ์ปดํฌ๋ํธ๋ฅผ ํ์ด๋ผ์ดํธํด์ฃผ๋ react devtools ๊ธฐ๋ฅ ์ฌ์ฉ โ ๋๋ฒ๊น ๊ฒฐ๊ณผ ํ ์คํธ๊ฐ ์์ฑ๋ ๋ ์ด๋ฏธ ์กด์ฌํ๋ ํ ์คํธ๋ค๋ ํจ๊ป ๋ ๋๋ง๋๋ ๊ฒ์ ๋ฐ๊ฒฌ |
๐ ํด๊ฒฐ | โข ํ ์คํธ ์ปดํฌ๋ํธ์ memo ์ ์ฉ โข ํ ์คํธ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋๋ ํจ์ props์ useCallback ์ ์ฉ ์ ๋๊ฐ์ง๋ฅผ ์ ์ฉํ๋ฉด์ ๋ฆฌ๋ ๋๋งํด์ผํ ์ปดํฌ๋ํธ๋ก ์ธ์ํ์ง ์์์ ๊ฐ๊ฐ์ ํ์์์์ด ์ ๋ฐ์ดํธ๋์ง ์์ |
BACK-END
์๊ตฌ ์ฌํญ | ํต์ฌ ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ฐ ๊ทผ๊ฑฐ |
---|---|
๐ฑ ๋ฌธ์ | ๋ ๋์ค์์ ํค๊ฐ์ผ๋ก ์กฐํํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ @Indexed ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ ์ด ์ด๋ ธํ ์ด์ ์ ๋ถ์ฌ ์ค์ผ์ง๋ง key ๊ฐ์ผ๋ก ๊ฒ์์ด ๊ฐ๋ฅํ๋ฉฐ, ๋นํ์ ์ ๋ณด์ ๊ฒ์ฆ์ ํ๊ธฐ ์ํด์ ์ถ๊ฐ ์) ์๋ก์ด ๋นํ์์ด ์๊ธฐ๋ฉด guest:10001 ์ด๋ผ๋ ํ๋์ ํ์ผ์ด ์๊ธฐ๊ณ ๋์์ guest:10001:idx ๋ผ๋ ์๋ก์ดํ์ผ์ด ์๊ธฐ๋๋ฐ ์ด ํ์ผ์ด ๋ง๋ฃ์ ์ญ์ ๊ฐ ๋์ง ์๋ ๋ฌธ์ ๋ฐ์ |
๐ค ์์ธ | @Indexed ๋ก ์ธํด ๊ฐ์ด ์์ฑ๋ ์ฐธ์กฐ๊ฐ๋ค์ ๋ง๋ฃ์ ์๋์ผ๋ก ์ญ์ ๊ฐ ๋์ง ์๋๊ฒ์ด ๋ฌธ์ ์๋ค. |
๐ญ ์๋ | โข ๊ฐ์ ์ง์ (redistemplate.expire) ์ฐธ์กฐ๊ฐ์ด ์์ฑ๋ ๋ ์๊ธฐ๋ ์ด๋ฆ์ ๋์ผํ ํจํด์ด๊ธฐ ๋๋ฌธ์ RedisTemplate ์์ ๋ง๋ฃ์๊ฐ์ ํด๋น ํ์ผ์ด ์์ฑ๋๋ฉด ๋ฐ๋ก ๊ฐ์ด ์ง์ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ์ง๋ง ์ด๋ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ๋ฒ์ด ์๋์ฌ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ ์ฐพ์๋ณด๊ธฐ๋ก ๊ฒฐ์ โข @Id ๋ง์ ์ฌ์ฉ ๋ ๋์ค๋ฅผ ํตํด ๋นํ์์ ๋ณด ๊ฒ์ฆํ๋ ๋ถ๋ถ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ @Id ์ด๋ ธํ ์ด์ ๋ง์ผ๋ก๋ ์ฐพ๋ ๋นํ์์ ๋ณด๋ฅผ ์ฐพ์์๊ฐ ์์ด์ @Indexed ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ง |
๐ ํด๊ฒฐ | @EnableRedisRepositories(enableKeyspaceEvents = EnableKeyspaceEvents.ON_STARTUP) ์์ฒ๋ผ RedisRepo ์ ์์ฑ์ ์ถ๊ฐํด์ ์ฌ์ฉํด๋ณธ ๊ฒฐ๊ณผ Server ๊ฐ ๋ด๋ ค๊ฐ ์ฌ์ด Redis ์์ ์ญ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ ์ด์ ์ญ์ ์์ ์ด๋ฒคํธ๋ฅผ ์์ ํด์ ์ฐธ์กฐ๊ฐ๋ ํจ๊ป ์ ์ญ์ ๊ฐ ๋๋๊ฒ์ ํ์ธ |
์๊ตฌ ์ฌํญ | ํต์ฌ ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ฐ ๊ทผ๊ฑฐ |
---|---|
๐ฑ ๋ฌธ์ | emitter์ ๊ฐ์ฒด ์๊ฐ์ ๊ธธ๊ฒ ์ค์ ํ ๋, ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ์ ์กํ์ง ๋ชปํ ๋ ๋ฐ์ํ๋ IOException : Broken Pipe ์๋ฌ๊ฐ ๋ฐ์ |
๐ค ์์ธ | JPA ์ฌ์ฉ์ open in view ์ค์ ์ด ๊ธฐ๋ณธ์ผ๋ก true๋ก ์ค์ ๋จ. true๋ก ์ค์ ๋๋ฉด HTTP Connection์ด ์ด๋ ค์๋ ๋์ DB Connection๋ ๊ฐ์ด ์ด๋ ค์๊ฒ ๋จ. ๋ณดํต์ HTTP ํธ์ถ์ด ๋๋๊ณ DB ์ปค๋ฅ์ ๋ ์ข ๋ฃ๋๋, SSE ์ฌ์ฉ์์๋ ๊ฐ์ฒด๊ฐ ๋ง๋ฃ๋๊ธฐ ์ ๊น์ง ๊ณ์ํด์ DB ์ปค๋ฅ์ ์ด ์ด๋ ค ๊ณ ๊ฐ๋๋ ๊ฒ์ด ๋ฌธ์ ์์ |
๐ญ ์๋ | ๊ฐ์ฒด์ ์๊ฐ์ ์งง๊ฒ ์ค์ ํด๋ด โ ๊ฐ์ฒด์ ๋ง๋ฃ์๊ฐ์ด ์ง๋ ๋๋ง๋ค ์ฌ์ฐ๊ฒฐ๋๊ณ ์ด๋ ๊ฒฐ๊ตญ ๋ฆฌ์์ค์ ๋ญ๋น๋ก ์ด์ด์ ธ SSE๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ๋ง์ง์์ |
๐ ํด๊ฒฐ | DB ์ปค๋ฅ์
์ ๊ณ์ ๋ฌผ๊ณ ์์ง ์๋๋ก OSIV ์ค์ ์ ๋. โ ์ด๋ฌํ ๊ฒฝ์ฐ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ์ํค์ง ๋ชปํ๋ค๋ ๋ค๋ฅธ ์๋ฌ๊ฐ ๋ฐ์ โ @OneToMany์ fetch join ํ์ ์ Eager๋ก ์ค์ ํ์ฌ ํด๊ฒฐ |
์๊ตฌ ์ฌํญ | ํต์ฌ ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ฐ ๊ทผ๊ฑฐ |
---|---|
๐ฑ ๋ฌธ์ | ์ ํ ์๊ฐ์ ๋์ด ๋ฏธ์ฒ ์ ์ถํ์ง ๋ชปํ ์ ์ ์ ํค์๋๋ ์ด๋ฏธ์ง๊ฐ ์ผ๊ด ์๋ ์ ์ถ ๋์์ ๋ DB์ ์ ๋๋ก ๋ฐ์ดํฐ๊ฐ ์์ด์ง ์๊ฑฐ๋ ๋ค์ ๋ผ์ด๋๋ก ์งํ๋์ง ์๋ ์ด์๊ฐ ๋ฐ์ํจ. |
๐ค ์์ธ | ํ์ฌ ๋ก์ง์ save โ find์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์ ์๋์ ์ถ ๊ธฐ๋ฅ ๊ตฌํ ์ ๋์์ ๋์ผํ ์์์ ์ ๊ทผํ๋ ค ํ๋ ๊ฒ์ ์์ธ์ผ๋ก ํ๋จ. |
๐ญ ์๋ | โข synchronized ์ ์ถ๋ก์ง์ Controller method ์ synchronized ์ ์ฉํ์ฌ ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํํจ. ์๋๋๋ก ๋์ ํ์ผ๋, ์ฑ๋ฅ ์ ์๋ ์ ํ ์ด์ ๋ฐ์ํจ. โข Thread Scheduler ์ ์ถ ์ธ์์ ํ์ธํ๋ ๋ก์ง์ ๋ ๋ฆฝ์์ผ์ thread๋ฅผ ๋ง๋ค๊ณ , ์ผ์ ์๊ฐ ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋์๊ฐ๊ฒ๋ ๊ตฌํํจ. ๊ทธ๋ฌ๋ DB์ ์ฝ๊ธฐ ๋๋ ์์๋ฅผ ์ ์ด ํ์ง ๋ชปํด ๋์ผํ ๋ฌธ์ ๋ฐ์ํจ. โข Optimistic Lock ์ ์ถ ๋ก์ง ํน์ฑ ์ ๋น๋ฒํ ์ถฉ๋์ด ์์ธก ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋กค๋ฐฑ ๋น์ฉ์ ๊ณ ๋ คํ์ฌ Optimistic Lock ๋ฏธ์ ์ฉ. โข Pessimistic Lock ์ ์ถ ์ธ์์ ํ๋์ column์ผ๋ก ๊ฐ๋ table์ ์์ฑํ๊ณ , row level lock ์ ์ฉ, update์ฉ find method๋ฅผ ๊ตฌํ ๋ฐ, ํด๋น method์ @Lock ์ด๋ ธํ ์ด์ ๊ณผ ๋ชจ๋๋ฅผ ์ค์ ํจ. ์ ์ถ ์ธ์์ ์์ ํ ๋ write lock์ด ๊ฑธ๋ฆฌ๊ณ transaction์ด ๋๋์ผ lock์ด ํ๋ฆฌ๋ ๊ฒ์ ์ด์ฉํจ. |
๐ ํด๊ฒฐ | ๊ฒ์์ ์ต๋ ์ธ์์ด 8๋ช
์ผ๋ก ํ
์คํธ ํ์ ๋, ๋น๊ต์ ์ฑ๋ฅ ์ด์๊ฐ ์๋ Pessimistic Lock์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ํ๋จ๋์ด ๋์ ํจ. |
๐ฐ์ฅ์ ์ | ์ด๋ฏผ๊ท | ๐ฐ์์์ | ๊น์ฌ์ | ์ํ์ | ํฉ๋ฏธ๊ฒฝ | ์กฐ๋ฌธ์ |
---|---|---|---|---|---|---|
FRONT-END | FRONT-END | BACK-END | BACK-END | BACK-END | BACK-END | DESIGN |