์๊ฐ์ ์ฝ๋๋ก ์ ๋ฆฌํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋๋ค.
"์ ์ด๋ ๊ฒ ๋์ํ๋๊ฐ"๋ฅผ ์ง์ ๊ตฌํํด๋ณด๋ฉฐ ์ดํดํ๊ณ ,
๋ถ๋ถ์ด ์๋ ์ ์ฒด ์์คํ
์ ์ํธ์์ฉ ๊ด์ ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ด
๋๋ค.
- Spring Boot ๊ธฐ๋ฐ์ Java/Kotlin ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์ด์ํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋๋ค. ์ฌ๋ด์์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฑ๋ฅ ๊ฐ์ , ๊ตฌ์กฐ ๋ฆฌํฉํ ๋ง, ํ ์คํธ ์ฝ๋ ๋์ ์ ๋งก์ ์์ต๋๋ค.
- ๋ณต์กํ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋๊ตฌ๋ ๊ฐ์ ๋ป์ผ๋ก ์ฝ์ ์ ์๊ฒ ์ ๋ฆฌํ๋ ๋ฐ ๊ด์ฌ์ด ๋ง์ต๋๋ค. ๊ตฌํ์ด ํ๋ฆฌ๋ ๋น์ฉ๋ณด๋ค ํฉ์๊ฐ ์ด๊ธ๋๋ ๋น์ฉ์ด ๋ ํฌ๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ์ค๋ ์ ์ง๋๊ณ ์ ๋ขฐํ ์ ์๋ ์์คํ ์ ๋ง๋๋ ๊ฐ๋ฐ์๋ฅผ ์งํฅํฉ๋๋ค.
- ์ ์ ๋์๋ณด๋ค ๋จผ์ ์คํจํ์ ๋ ๋ฌด์์ด ๊นจ์ง๋์ง๋ฅผ ๊ทธ๋ ค๋ด ๋๋ค. ๋ฌด์์ ํฌ์ํ๊ณ ๋ฌด์์ ์งํฌ์ง ์ ํ ๋ค์ ์ค๊ณ์ ๋ค์ด๊ฐ๋๋ค.
- ์ปค๋ฒ๋ฆฌ์ง ์ซ์๋ณด๋ค "์ด ํ ์คํธ๊ฐ ์ค์ ๋ก ํ๊ท๋ฅผ ์ก์๋ด๋๊ฐ"๋ฅผ ๋จผ์ ๋ฌป์ต๋๋ค. ํต๊ณผํ๋ ํ ์คํธ์ ์ ๋ขฐํ ์ ์๋ ํ ์คํธ๋ ๋ค๋ฅด๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ํ ์คํธ๊ฐ ์ด๋ ต๋ค๋ฉด ํ ์คํธ ๊ธฐ๋ฒ๋ณด๋ค ์ค๊ณ๋ฅผ ๋จผ์ ์์ฌํฉ๋๋ค. ๊ฒฐํฉ์ด ์ฌํ ์ฝ๋๋ ๋์ฒด๋ก ํ ์คํธ์์ ๋จผ์ ๋๋ฌ๋ฉ๋๋ค.
- ๊ธฐํ์ ๊ทธ๋๋ก ๊ตฌํํ๊ธฐ ์ ์ ์ด ๊ธฐํ์ด ํ๋ ค๋ ๋ฌธ์ ๊ฐ ๋ฌด์์ด์๋์ง ๋์ง๊ณ , ์ ๋งคํ ์ง์ ์ ๋์ด๊ฐ์ง ์๊ณ ๋จผ์ ํ์ธํฉ๋๋ค.
- ์๊ตฌ์ฌํญ ํ๋๊ฐ ์ฝ๋ ์ด๋๊น์ง ๋ฟ๋์ง, ๊ทธ ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋ฉด ์ด๋๊ฐ ํ๋ค๋ฆด์ง๋ฅผ ๋จผ์ ๊ทธ๋ ค๋ด ๋๋ค.
- ์ ํ์ง๋ฅผ ๋ช ์์ ์ผ๋ก ๋น๊ตํ๊ณ "์ ์ด ๋ฐฉ์์ ํํ๋๊ฐ"๋ฅผ ๊ธฐ๋ก์ผ๋ก ๋จ๊ธฐ๋ ์ต๊ด์ ๋ค์ด๊ณ ์์ต๋๋ค.
- ์คํจ์ ์ ํ โ ์ฅ์ ๊ฐ ์ด๋์ ๋๋์ง๋ณด๋ค ์ด๋๊น์ง ๋ฒ์ง๋์ง. ์ฌ์๋ยทํด๋ฐฑยท๊ฒฉ๋ฆฌ๋ฅผ ์คํจ๋ฅผ ์์ ๋ ์ฅ์น๊ฐ ์๋๋ผ ๋ฐ๊ฒฝ์ ์ค์ด๋ ์ฅ์น๋ก ๋ณด๋ ๊ด์ .
- ์ ํฉ์ฑ์ ์์ค โ "์๋ฒฝํ ์ผ๊ด์ฑ"์ด ๊ธฐ๋ณธ๊ฐ์ด ์๋ ์์ญ๋ค. ๋๋ฉ์ธ์ด ์ค์ ๋ก ์๊ตฌํ๋ ์ ์ด ์ด๋๊น์ง์ด๊ณ , ๊ทธ ์ ์ ๋ฌด์์ ๊ทผ๊ฑฐ๋ก ์ ํ๋์ง.
- ๋ณํ์ ๊ฒฌ๋๋ ๊ตฌ์กฐ โ ์ง๊ธ ํ์ํ์ง ์์ ์ ์ฐ์ฑ์ ๋ฏธ๋ฆฌ ๋ง๋๋ ์ชฝ๋ณด๋ค, ์ค์ ๋ก ๋ฐ๋ ๋ ๋ฐ๊ฟ ์ ์๋ ๊ตฌ์กฐ.
- ๋ฌธ์ ์ ๋ณธ์ง โ ์๋ก์ด ๊ธฐ์ ์์ฒด๋ณด๋ค ๊ทธ ๊ธฐ์ ์ด ํ๋ ค๋ ๋ฌธ์ . ๋๊ตฌ๋ ๊ณ์ ๋ฐ๋์ง๋ง ๋ฌธ์ ๋ ์ ๋ฐ๋์ง ์์์, ํน์ ์คํ๋ณด๋ค ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๋ฐ ์๊ฐ์ ์๋๋ค.
order-system โ RabbitMQ ๋น๋๊ธฐ ์ฃผ๋ฌธ ์์คํ
์ฃผ๋ฌธ API๊ฐ ๋ฉ์์ง ๋ฐํ ์ฆ์ ์๋ตํ๊ณ , ์ปจ์๋จธ๊ฐ ์ฌ๊ณ ์ฐจ๊ฐยท์ฃผ๋ฌธ ์์ฑ์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ์ ๋๋ค.
- MySQL Named Lock(์ฃผ๋ฌธ ๋จ์) + JPA ๋น๊ด์ ๋ฝ(์ฌ๊ณ ๋จ์) ์ด์ค ๋ฝ์ผ๋ก ๋์์ฑ ์ ์ด
- k6 ๋ถํ ํ ์คํธ: 4,000 VUs์์ TPS 2.23k, ์คํจ 0๊ฑด, ์ฌ๊ณ ์ ํฉ์ฑ ์ค์ฐจ 0 ์ค์ธก ๊ธฐ๋ก
- Dead Letter Queue + ์ฌ๋ฐํ์ผ๋ก ์คํจ ๋ฉ์์ง ์ ์ค ๋ฐฉ์ง, prefetchยท์ปจ์๋จธ ์ ํ๋ ๊ณผ์ ๋ฌธ์ํ
query-performance โ ๋์ฉ๋ ์กฐํ ์ฑ๋ฅ ๊ฐ์ (SQL ํ๋ โ Redis ์บ์ฑ)
30๋ง ๊ฑด ๋ฐ์ดํฐ์์ ํ ํ ์ด๋ธ ์ค์บ์ผ๋ก ์ต๋ 14์ด ๊ฑธ๋ฆฌ๋ ํํฐ๋ง ์กฐํ๋ฅผ ๋จ๊ณ์ ์ผ๋ก ๊ฐ์ ํ์ต๋๋ค.
- EXPLAIN์ผ๋ก ํ ํ ์ด๋ธ ์ค์บ(type: ALL) ํ์ธ โ ๊ฐ๊ฒฉ ์ธ๋ฑ์ค ์ ์ฉ์ผ๋ก ์กฐํ ์๊ฐ70.5% ๋จ์ถ(1s โ 0.295s)
- ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋๋ฐ๋ ๋์ํ์ง ์๋ ์์ธ ๋ถ์ โ ๋ฎ์ ์นด๋๋๋ฆฌํฐ(LocalDate ์ผ ๋จ์ ์ ์ฅ + ์ค๋ณต๋ ๋์ ๋๋ฏธ ๋ฐ์ดํฐ)๋ก ์ตํฐ๋ง์ด์ ๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฒ๋ฆฌ๋ ์ํฉ์ ๊ท๋ช ํ๊ณ , ํ์ ยท๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ๋ฐ๋ก์ก์ 82.25% ๋จ์ถ (2s โ 0.355s)
- ์์คํ ๋ณ๊ฒฝ ์๋ SQL ํ๋์ ๋จผ์ , ๊ทธ ์์ Redis Cache-Aside๋ฅผ ์น์ด ์ถ๊ฐ 45.7% ๊ฐ์ (1.01s โ 0.548s) โ ์บ์-DB ์ ํฉ์ฑ ํ๊ณ๊น์ง ๋ฌธ์ํ