์๊ฐ์ ์ฝ๋๋ก ์ ๋ฆฌํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋๋ค.
"์ ์ด๋ ๊ฒ ๋์ํ๋๊ฐ"๋ฅผ ์ง์ ๊ตฌํํด๋ณด๋ฉฐ ์ดํดํ๊ณ ,
๋ถ๋ถ์ด ์๋ ์ ์ฒด ์์คํ
์ ์ํธ์์ฉ ๊ด์ ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ด
๋๋ค.
ํ ์คํธ์ ์ฝ๋ ํ์ง
- ์ปค๋ฒ๋ฆฌ์ง ์ซ์๋ณด๋ค "์ด ํ ์คํธ๊ฐ ์ค์ ๋ก ํ๊ท๋ฅผ ์ก์๋ด๋๊ฐ"๋ฅผ ๋จผ์ ๋ฌป์ต๋๋ค. ํต๊ณผํ๋ ํ ์คํธ์ ์ ๋ขฐํ ์ ์๋ ํ ์คํธ๋ ๋ค๋ฅด๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ์ข์ ์ฝ๋๋ ๊ฒฐ๊ตญ ํ ์คํธํ๊ธฐ ์ฌ์ด ์ฝ๋๋ผ๊ณ ๋ด ๋๋ค. ํ ์คํธ๊ฐ ์ด๋ ต๋ค๋ฉด ์ค๊ณ์ ์์ธ์ด ์๋ ๊ฑด ์๋์ง ๋จผ์ ์์ฌํฉ๋๋ค.
- ๋ชจ๋ ์ํฉ์ ํต์ฉ๋๋ ์ ๋ต์ ์๋ค๊ณ ์๊ฐํด์, ํธ๋ ์ด๋์คํ๋ฅผ ๋ช ์์ ์ผ๋ก ๋น๊ตํ๊ณ "์ ์ด ๋ฐฉ์์ ์ ํํ๋๊ฐ"๋ฅผ ๋จ๊ธฐ๋ ์ต๊ด์ ๋ค์ด๊ณ ์์ต๋๋ค.
- ์ง๊ธ ๋น์ฅ ํ์ํ์ง ์์ ์ ์ฐ์ฑ์ ๋ฏธ๋ฆฌ ์ค๊ณํ๊ธฐ๋ณด๋ค, ์ค์ ๋ก ๋ฐ๋ ๋ ๋ฐ๊ฟ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ์ชฝ์ ๋ ๊ด์ฌ์ด ์์ต๋๋ค.
๊ธฐ์ ๋ณด๋ค ๋ณธ์ง
- ์๋ก์ด ๊ธฐ์ ์์ฒด๋ณด๋ค, ๊ทธ ๊ธฐ์ ์ด ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ์ ๋ณธ์ง์ ๋ ๊ด์ฌ์ด ์์ต๋๋ค.
- ๋๊ตฌ๋ ๊ณ์ ๋ฐ๋์ง๋ง ๋ฌธ์ ์ ๋ณธ์ง์ ์ ๋ฐ๋์ง ์๋๋ค๊ณ ์๊ฐํด์, ํน์ ์คํ์ด๋ ํธ๋ ๋๋ณด๋ค ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๋ฐ ๋ ์๊ฐ์ ์๋๋ค.
๊ธฐํ์ ์ค๊ณ๋ก ์ฎ๊ธฐ๋ ๊ณผ์
- ์ฃผ์ด์ง ๊ธฐํ์ ๊ทธ๋๋ก ๊ตฌํํ๊ธฐ๋ณด๋ค, ๊ธฐํ์ด ์ด๋ค ๋ฌธ์ ๋ฅผ ํ๋ ค๋ ๊ฑด์ง๋ถํฐ ๋์ง์ด๋ณด๊ณ ๊ทธ ์๋๊ฐ ์ค๊ณ์ ์ ๋ฐ์๋๋์ง ํ์ธํฉ๋๋ค.
- ์๊ตฌ์ฌํญ ํ๋๊ฐ ์ฝ๋ ์ด๋๊น์ง ์ํฅ์ ๋ฏธ์น๋์ง, ๋์ค์ ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋ฉด ์ด๋๊ฐ ํ๋ค๋ฆด์ง๋ฅผ ๋จผ์ ๊ทธ๋ ค๋ณด๋ ํธ์ ๋๋ค.
- ๊ธฐํ๊ณผ ๊ตฌํ ์ฌ์ด์ ๊ฐ๊ทน์ ๊ฒฐ๊ตญ ์ปค๋ฎค๋์ผ์ด์ ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํด์, ์ ๋งคํ ์ง์ ์ ๋์ด๊ฐ์ง ์๊ณ ๋จผ์ ํ์ธํ๋ ค๊ณ ํฉ๋๋ค.
์คํจ๋ฅผ ๊ฐ์ ํ ์ค๊ณ
- ์ ์ ๋์๋ณด๋ค ์คํจํ์ ๋ ๋ฌด์์ด ๊นจ์ง๋์ง๋ฅผ ๋จผ์ ๊ทธ๋ ค๋ด ๋๋ค. ์ฅ์ ๊ฐ ์ด๋์ ๋๋์ง๋ณด๋ค, ๊ทธ ์ฅ์ ๊ฐ ์ด๋๊น์ง ์ ํ๋๋์ง๊ฐ ๋ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ์ ํฉ์ฑ์ ์ผ๋ง๋ ๊ฐํ๊ฒ ๋ณด์ฅํ ์ง๋ ํญ์ ํธ๋ ์ด๋์คํ๋ผ, "์๋ฒฝํ ์ผ๊ด์ฑ"์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๊ธฐ๋ณด๋ค ๋๋ฉ์ธ์ด ์ค์ ๋ก ์๊ตฌํ๋ ์์ค์ด ์ด๋์ธ์ง๋ถํฐ ํ์ธํฉ๋๋ค.
- ์ฌ์๋, ํด๋ฐฑ, ๊ฒฉ๋ฆฌ ๊ฐ์ ๋์์ ๊ฒฐ๊ตญ ์คํจ๋ฅผ ์์ ๋ ๊ฒ ์๋๋ผ ์คํจ์ ๋ฐ๊ฒฝ์ ์ค์ด๋ ์ผ์ด๋ผ๊ณ ์๊ฐํด์, ๋ฌด์์ ํฌ์ํ๊ณ ๋ฌด์์ ์งํฌ์ง ๋จผ์ ์ ํ๊ณ ์ค๊ณํฉ๋๋ค.
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 ์ ํฉ์ฑ ํ๊ณ๊น์ง ๋ฌธ์ํ