์ฆ๊ถ๊ฑฐ๋์์ ์ผ๋ถ๋ ๊ธ์ต ์ฐ์ ์์ง์ ์ธ๋ถํ์ ์ด์ ์ ๋ง์ถ๊ณ , ๊ธฐ์ ์ธก๋ฉด์ ๊ฐ์กฐํ๋ฉฐ[1], ์ผ๋ถ๋ ๊ณต์ ์ฑ์ ์ค์ฌ์ ๋๋ค[2].
๋ค๋ฃจ๋ ๋ฌธ์ ์ ๊ท๋ชจ๋ฅผ ํ์ธํด๋ณด์๋ฉด NYSE๋ ํ๋ฃจ ์์ญ์ต๊ฑด ๊ฑฐ๋[3], HKEX๋ ํ๋ฃจ 2์ฒ์ต๊ฑด์ ์ฃผ์๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํ๋ค.[4]

๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
1. ์ด๋ค๊ฑธ ๊ฑฐ๋ํ ๊น? ์ฃผ์, ์ต์ , ์ ๋ฌผ ๋ฑ์ด ์๋๋ฐ
-> ๊ฐ๋จํ๊ฒ ์ฃผ์๋ง ๊ฑฐ๋ํ๋ ๊ฒ์ผ๋ก ์์ํ๋ค.
2. ์ ์ฃผ๋ฌธ, ์ฃผ๋ฌธ ์ทจ์, ์ฃผ๋ฌธ ๊ต์ฒด ์ค ์ด๋ค ์ ํ์ ์ฃผ๋ฌธ์ ์ง์ํด์ผํ ๊น?
์ง์ ๊ฐ์ฃผ๋ฌธ(Limit order), ์์ฅ๊ฐ ์ฃผ๋ฌธ(market order), ์กฐ๊ฑด๋ถ ์ฃผ๋ฌธ(conditional order)๋ฑ์ ์ฃผ๋ฌธ ์ ํ์ ์ ๋ถ ์ง์ํ๋?
-> ์์ฃผ๋ฌธ ๋ฃ๊ณ , ์ฒด๊ฒฐ์๋ ์ฃผ๋ฌธ์ ์ทจ์๊ฐ ๋๊ณ , ์ง์ ๊ฐ ์ฃผ๋ฌธ, ์์ฅ๊ฐ ์ฃผ๋ฌธ, ์กฐ๊ฑด๋ถ ์ฃผ๋ฌธ์ด ๋ชจ๋ ๊ฐ๋ฅํ๋คใ .
3. ์๊ฐ ์ธ ๊ฑฐ๋๊ฐ ๊ฐ๋ฅํด์ผํ๋?
์๋๋ค. ์๊ฐ๋ด ๊ฑฐ๋๋ง ์ฒ๋ฆฌํ๋๋ก ํ์
4. ๊ฐ์ถ์ด์ผ ํ๋ ์ต์ mvp๋ ์ด๋ป๊ฒ ์ค์ ํ๋? ์ฌ์ฉ์ ์, ์ฆ๊ถ ๊ฐ์ง์, ์ฃผ๋ฌธ์, ๊ฑฐ๋์ ๊ท๋ชจ
-> ์๋ก์ด ์ง์ ๊ฐ ์ฃผ๋ฌธ ์ ์, ๋๋ ๊ธฐ์กด ์ฃผ๋ฌธ ์ทจ์ ๊ฐ๋ฅ
- ์ฃผ๋ฌธ ์ฒด๊ฒฐ์ ์ค์๊ฐ์ผ๋ก ๊ทธ ์ฌ์ค์ ์๋ฆผ
- ํธ๊ฐ์ฐฝ ์ ๋ณด๋ ์ค์๊ฐ ๊ฐฑ์
- ํธ๊ฐ์ฐฝ์ ๋งค์ ๋ฐ ๋งค๋ ์ฃผ๋ฌธ ๋ชฉ๋ก์ด ํ์
- ์ต์ ์๋ง๋ช ์ด ์ฌ์ฉ์๊ฐ ๋์ ๊ฑฐ๋ ใ ๊ฐ๋ฅ
- ์ต์ 100๊ฐ์ง ์ด์์ ์ฃผ์๊ฑฐ๋๊ฐ ๊ฐ๋ฅ
- ๊ฑฐ๋๋์ ๊ฒฝ์ฐ ํ๋ฃจ ์์ญ์ต๊ฑด์ ์ฃผ๋ฌธ์ด ๋ฐ์
- ๊ท์ ์์ค์์ผ๋ก ์ํ์ฑ ์ ๊ฒ์ด ํ์ (์ ํ ์ฃผ์ ํ์ฌ๋๋น ๋ฐฑ๋ง์ฃผ ์ดํ๋ก ์ ํํ๋ฉด, ๊ทธ๊ฑธ ์๋ฐํ๋ ์์ฒญ์ ์งํx)
5. ์ฌ์ฉ์ ์ง๊ฐ๊ด๋ฆฌ?
- ์ฃผ๋ฌธ ์ ์ถฉ๋ถํ ์๊ธ์ด ์๋์ง ํ์ธ
- ์ฒด๊ฒฐ์ ์ฃผ๋ฌธ์ด ์์๋์๋, ํด๋น ์ฃผ๋ฌธ์ ์ด์ฉ๋ ์๊ธ์ ๋ค๋ฅธ ์ฃผ๋ฌธ์ ์ฐ์ด๋ฉด ์๋
๋น๊ธฐ๋ฅ ์๊ตฌ์ฌํญ
- ๊ฐ์ฉ์ฑ(availiability):์ต์ 99.9% ๊ฑฐ๋์์ ๊ฐ์ฉ์ฑ์ ๋งค์ฐ ์ค์ํ๋ค. ๋ช ๋ฐ๋ฆฌ์ด์ ์ฅ์ ๋ก๋ ํํ ์์์ด๋๋ค.
- ๊ฒฐํจ ๋ด์ฑ: ์ ํ ์ฅ์ ํ๊ธ์ ์ค์ด๊ธฐ ์ํด ์ค๊ณ์ ๊ฒฐํจ ๋ด์ฑ๊ณผ ๋น ๋ฅธ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ด ํ์ํ๋ค.
- ์ง์ฐ์๊ฐ : ์๋ณต ์ง์ฐ์๊ฐ์ ๋ฐ๋ฆฌ์ด ์์ค์ด์ด์ผํ๋ฉฐ, ์ง์ฐ์๊ฐ์ด ์ค์ํ๋ค.
์๋ณต ์ง์ฐ์๊ฐ์ ์ฃผ๋ฌธ์ด ๊ฑฐ๋์์ ์จ ์๊ฐ๋ถํฐ, ์ฃผ๋ฌธ์ ์ฒด๊ฒฐ ์ฌ์ค์ด ๊ณ ๊ฐ๊ฒก๊ฒ ๋ฐํ๋๋ ์์ ๊น์ง๋ค.
์ง์ฐ์๊ฐ์ด ๋งค์ฐ ์งง์ผ๋ฉด ์ฌ์ฉ์๋ค์ ๊ฑฐ๋์ ์ด์ฉ๊ฒฝํ์ด ์ข๊ฒ ์ฆ๊ฐ ์ฒด๊ฐ๋ ๊ฒ์ด๋ค.
- ๋ณด์: ๊ฑฐ๋์๋ ๊ณ์ ๊ด๋ฆฌ์์คํ ์ด ํ์๋ค.
๋ฒ๋ฅ ๋ฐ ๊ท์ ์ค์๋ฅผ ์ํด์, ์ ๊ณ์ข ๊ฐ์ค ์ ์ ์ฌ์ฉ์ ์ ์ํ์ธ์ ์ํ KYC(Know Your Client)ํ์ธ์ ์ํํ๋ค.
์์ฅ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์นํ์ด์ง์ ๊ณต๊ฐ ์์์ ๊ฒฝ์ฐ์๋ DDoS(Distributed Denial-of-Service)[6] ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ์ฅ์น๋ฅผ ๊ตฌ๋นํด ๋์ด์ผํ๋ค.
๊ฐ๋ต์ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
๊ท๋ชจ ์ถ์
์์คํ ์ค๊ณ ๊ท๋ชจ์ ๋ฐ๋ฅธ, ๊ฐ๋จํ ๊ณ์ฐ์ ์งํํด์ ๊ท๋ชจ๋ฅผ ์ธ์ํด๋ณด์.
- 100๊ฐ์ง ์ฃผ๋ฌธ
- ํ๋ฃจ 10์ต ๊ฑด์ ์ฃผ๋ฌธ
- NY๋ฐ๋ผ์, ์~๊ธ, ์ค์ 9์ 30๋ถ~์คํ 4์(EST) ์์ . ์ด 6.5์๊ฐ
- QPS : 10์ต / (6.5์๊ฐ X 3600) = ~ 43,000
- ์ต๋ QPS : 5XQPS = 43,000 X 5 = 215, 000 ๊ฑฐ๋๋์ ์ฅ ์์ ์งํ, ์ฅ ๋ง๊ฐ ์ง์ ์ ํจ์ฌ ๋์ ํธ๋ํฝ์ด ์๊ธด๋ค.
๋ธ๋ก์ปค(Broker)
๋ธ๋ก์ปค ์์คํ ์ ๊ฐ์ธ ์ฌ์ฉ์๊ฐ ์ฆ๊ถ์ ๊ฑฐ๋ํ๊ณ , ์์ฅ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๋๋ก ํธ๋ฆฌํ UI๋ฅผ ์ ๊ณตํ๋ค.
๋๋ถ๋ถ ๊ฐ์ธ ๊ณ ๊ฐ์ ๋ธ๋ก์ปค ์์คํ ์ผ๋ก ๊ฑฐ๋์ ๊ฑฐ๋๋ฅผ ํ๋ค. Charles Schwab, Robinhood, ETrade, Fidelity, ํ๋์ฆ๊ถ ๋ฑ์ด ์ ๋ช ๋ธ๋ก์ปค ํ์ฌ๋ค.
๊ธฐ๊ด ๊ณ ๊ฐ(Institutional client)
๊ธฐ๊ด๊ณ ๊ฐ์ ์ ๋ฌธ ์ฆ๊ถ๊ฑฐ๋ SW๋ฅผ ์ฌ์ฉํด์ ๋๋ ๊ฑฐ๋ํ๋ค. ๊ธฐ๊ด ๊ณ ๊ฐ๋ง๋ค ์๊ตฌ์ฌํญ์ ๋ค๋ฅด๋ค. ์ฐ๊ธฐ๊ธ์ ์์ ์ ์์ต์ด ๋ชฉํ์ด๊ณ , ๊ฑฐ๋๋น๋๊ฐ ๋ฎ๊ณ , ๊ฑฐ๋๋์ด ๋ง์๊ฒ์ด๋ค. ๋๊ท๋ชจ ์ฃผ๋ฌธ์ด ์์ฅ์ ๋ฏธ์น๋ ์ํฅ[7]์ ์ต์ํ ํ๊ธฐ์ํด์ ์ฃผ๋ฌธ๋ถํ ์ ์งํํ๋ค.
ํค์ง ํ๋๋ ์์ฅ ์กฐ์ฑ์ ์ ๋ฌธ์ผ๋ก ํ๋ฉด์ ์์๋ฃ ๋ฆฌ๋ฒ ์ดํธ๋ฅผ ํตํด์ ์์ต์ ์ป๋๋ค. ์์ฃผ ๋ฎ์ ์๊ฐ์ผ๋ก ๊ฑฐ๋ํ๊ธธ ์ํ๋ค.
์ผ๋ฐ ์ฌ์ฉ์๋ค์ฒ๋ผ ์นํ์ด์ง๋ ๋ชจ๋ฐ์ผ ์ฑ์์ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ฒ ํ๋ฉด ๊ณค๋ํ๋ค.
์ง์ ๊ฐ ์ฃผ๋ฌธ(limit order)
์ง์ ๊ฐ ์ฃผ๋ฌธ์ ๊ฐ๊ฒฉ์ด ๊ณ ์ ํ ๋งค์ or ๋งค๋ ์ฃผ๋ฌธ์ด๋ค. ์์ฅ๊ฐ ์ฃผ๋ฌธ๊ณผ ๋ฌ๋ฆฌ ์ฒด๊ฒฐ์ด ์ฆ์ ์์ด๋ค์ง ์ ์๋ค. ๋ถ๋ถ๋ง ์ฒด๊ฒฐ๋ ์๋ ์๋ค.
- LOC
- LOL
์์ฅ๊ฐ ์ฃผ๋ฌธ(Market order)
์์ฅ๊ฐ ์ฃผ๋ฌธ์ ๊ฐ๊ฒฉ์ ์ ํ์ง ์๋ ์ฃผ๋ฌธ์ด๋ค. ์์ฅ๊ฐ๋ก ์ฆ์ ์ฒด๊ฒฐํ๋ค. ์ฒด๊ฒฐ์ด ๋ณด์ฅ๋์ง๋ง ๋น์ฉ์ํด ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๊ธ๋ณํ๋ ์์ฅ์์ ๋ฐ๋ก ์ฒด๊ฒฐ์ ์ํ ๋ ์ ์ฉํ๋ค.

์์ฅ ๋ฐ์ดํฐ ์์ค
์์ฅ๊ฐ ์ฃผ๋ฌธ์ ๋ฏธ๊ตญ ์ฃผ์ ์์ฅ์๋ L1,L2,L3์์ธ๊ฐ์ง ์ ๋ณด(price quote) ๋ฑ๊ธ์ด์๋ค.
L1 : ์์ฅ๋ฐ์ดํฐ์๋ ์ต๊ณ ๋งค์ ํธ๊ฐ(Best bid price), ๋งค๋ํธ๊ฐ(ask price) ๋ฐ ์๋ (quantity)๊ฐ ํฌํจ๋๋ค.
์ต๊ณ ๋งค์ ํธ๊ฐ๋ ๊ตฌ๋งค์๊ฐ ์ฃผ์์ ์ง๋ถํ ์์ฌ๊ฐ ์๋ ์ต๊ณ ๊ฐ๊ฒฉ์ด๊ณ , ๋งค๋ ํธ๊ฐ๋ ๋งค๋์๊ฐ ์ฃผ์์ ํ๊ณ ์ ํ๋ ์ต์ ๊ฐ๊ฒฉ์ด๋ค.
L2 : ๋ ๋ง์ ์์ค์ ๊ฐ๊ฒฉ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. ๊น์ด(depth)๋ ์ฒด๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฌผ๋์ ํธ๊ฐ๋ฅผ ์ด๋๊น์ง ๋ณด์ฌ์ฃผ๋์ง ๋ํ๋ธ๋ค.
L3 : L3๋ L2์์ ๋ ๋์๊ฐ์, ๊ฐ ๊ฐ๊ฒฉ์ ์ฒด๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฌผ๋๊น์ง ๋ณด์ฌ์ค๋ค.


๋ด ์ฐจํธ
ํน์ ๊ธฐ๊ฐ ๋์์ ์ฃผ๊ฐ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์บ๋ค์ด๋ผ๊ณ ํ๋ค. ํ๋์ ๋ด ๋ง๋๋ก ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ ๋์ ์์ฅ์ ์์๊ฐ, ์ข ๊ฐ, ์ต๊ณ ๊ฐ, ์ต์ ๊ฐ๋ฅผ ํ์ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ง์ํ๋ ๊ธฐ๊ฐ ์ค์ ์ 1๋ถ, 5๋ถ, 1์๊ฐ, 1์ฃผ์ผ, 1๊ฐ์์ด๋ค.

FIX
FIX๋ Financial Information Exchange Protocol, ๊ธ์ต์ ๋ณด๊ตํํ๋กํ ์ฝ(FIX) ์ ์ฝ์ด์ด๋ค. [8]
๊ธฐ์ ์ค๋ฆฝ ํต์ ํ๋กํ ์ฝ์ด๋ค. FIX๋ก ์ธ์ฝ๋ฉํ ์ฆ๊ถ ๊ฑฐ๋์ ์ฌ๋ก๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.

๊ฑฐ๋ ํ๋ฆ(Trading Flow)
ํ๋์ ์ฃผ๋ฌธ์ด ๋ค์ด์ด๊ทธ๋จ์ ๊ตฌ์ฑ์์๋ค ์ฌ์ด์์ ์ด๋ ํ ํธ๋์ง์ ์ ํ๋ฅด๋์ง ์ถ์ ํ๋ฉฐ, ๋์ Flow๋ฅผ ์ค๋ช ํด๋ณด๊ฒ ๋ค.

์๋ ์ง์ฐ์๊ฐ ์๊ฑด์ด ๋งค์ฐ ์๊ฒฉํ๋ค. ์ ์ํ ์ฒ๋ฆฌ๊ฐ ์ค์ํ๋ค.
1. ๊ณ ๊ฐ์ด ๋ธ๋ก์ปค ์น ๋๋ ๋ชจ๋ฐ์ผ ์ฑ์ํตํด์ ์ฃผ๋ฌธํ๋ค.
2. ๋ธ๋ก์ปค๊ฐ ์ฃผ๋ฌธ์ ๊ฑฐ๋์์ ์ ์กํ๋ค.
3. ์ฃผ๋ฌธ์ด ํด๋ผ์ด์ธํธ ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด์ ๊ฑฐ๋์๋ก ๋ค์ด๊ฐ๋ค.
- ํด๋ผ์ด์ธํธ ๊ฒ์ดํธ ์จ์ด : ์ ๋ ฅ ์ ํจ์ฑ, ์๋ ์ ํ, ์ธ์ฆ, ์ ๊ทํ ๊ฐ์ ๊ฒ์ดํธํคํ ๊ธฐ๋ฅ์ ์ํํ๋ค.
4. ๊ฒ์ดํธ์จ์ด ํต๊ณผํ๋ฉด, ์ฃผ๋ฌธ ๊ด๋ฆฌ์์๊ฒ ์ ๋ฌํ๋ค.
5. ์ฃผ๋ฌธ๊ด๋ฆฌ์๊ฐ ์ํ๊ด๋ฆฌ์๊ฐ ์ค์ ํ ๊ท์น์ ๋ณด๋ฉด์, ์ฃผ๋ฌธ์ ์ํ์ฑ ์ ๊ฒ ์ํ์ ์งํํ๋ค.
6. ์ํ์ฑ ์ ๊ฒ์ ํต๊ณผํ ์ฃผ๋ฌธ์ ์ฃผ๋ฌธ๊ด๋ฆฌ์๊ฐ ์ง๊ฐ์ ์ฒ๋ฆฌ ์๊ธ์ด ์ถฉ๋ถํ์ง ์ฒดํฌํ๋ค.
7. ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ ์์ง์ผ๋ก ์ ์ก๋๋ค.
8. ์ฒด๊ฒฐ ๊ฐ๋ฅ ์ฃผ๋ฌธ์ด ๋ฐ๊ฒฌ๋๋ฉด ์ฒด๊ฒฐ์์ง์ ๋งค์์ธก๊ณผ ๋งค๋ ์ธก์ ๊ฐ๊ฐ ํ๋์ฉ ์งํ์ ์์ฑํ๋ค.
9. ์ํ์๋ ๊ณผ์ ์ ์ผ์ ์์๋ก ๊ธฐ๋กํ๋ค. ๋์ค์ ๊ณผ์ ์ ์ฌ์ํ ๋ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด์์ด๋ค.
10~14. ์ฃผ๋ฌธ ์งํ ์ฌ์ค์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ค์ ๊ณผ์ ๋ค์ ํ๊ณ ๋์๊ฐ์, ์ ๋ฌํ๋ค.
์์ฅ ๋ฐ์ดํฐ ํ๋ฆ(market data flow)
ํ๋์ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ ์์ง์์ ์์๋์ด์ ๋ฐ์ดํฐ ์๋น์ค๋ฅผ ๊ฑฐ์ณ์, ๋ธ๋ก์ปค์ ์ ๋ฌ๋์ด ์งํ๋๊ธฐ ๊น์ง์ ๊ณผ์
M1 : ์ฒด๊ฒฐ ์์ง์ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋๋ฉด ์งํ ๊ธฐ๋ก ์คํธ๋ฆผ(์ถฉ์กฑ๊ธฐ๋ก ์คํธ๋ฆผ)์ ๋ง๋ ๋ค. ์ด ์คํธ๋ฆผ์ ์์ฅ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค๋ก ์ ์ก๋๋ค.
M2 : ์์ฅ ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค๋ ์งํ ๊ธฐ๋ก ๋ฐ ์ฃผ๋ฌธ ์คํธ๋ฆผ์์ ์ป์ ๋ฐ์ดํฐ๋ฅผ ์์ฅ๋ฐ์ดํฐ๋ก ์ฌ์ฉํด์ ๋ด ์ฐจํธ์ ํธ๊ฐ ์ฐฝ์ ๊ตฌ์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ ์๋น์ค๋ก ๋ณด๋ธ๋ค.
M3 : ์์ฅ ๋ฐ์ดํฐ๋ ์ค์๊ฐ ๋ถ์ ์ ์ฉ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋๋ค. ๋ธ๋ก์ปค๋ ๋ฐ์ดํฐ ์๋น์ค๋ก ์ค์๊ฐ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค. ๋ธ๋ก์ปค๋ ์ด ์์ฅ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๊ฐ์๊ฒ ์ ๋ฌํ๋ค.
๋ณด๊ณ ํ๋ฆ(Report flow)
R1~R2 : ๋ณด๊ณ ์๋น์ค๋ ์ฃผ๋ฌธ ๋ฐ ์คํ ๊ธฐ๋ก์์ ๋ณด๊ณ ์ ํ์ํ ๋ชจ๋ ํ๋์ ๊ฐ์ ๋ชจ์๋ค์์ ๊ทธ๊ฐ์ ์ข ํฉํด์ ๋ง๋ ๊ธฐ๋ก์ DB์ ๊ธฐ๋กํ๋ ๊ฒ์ด๋ค. (๊ณ ๊ฐ์์ด๋, Pice, quantity, order_type, filled_quantitiy, remaining_quantity๋ฑ)
๊ฑฐ๋ํ๋ฆ 1~14๋ ์ค์๊ฒฝ๋ก, ์์ฅ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ๋ณด๊ณ ํ๋ฆ์ ๊ทธ๋ ์ง ์๋ค. ๋๊ฐ์ง๋ ์ง์ฐ ์๊ฐ ์๊ตฌ์ฌํญ์ด ๋ค๋ฅด๋ค.
๊ฑฐ๋ ํ๋ฆ ์ฒด๊ฒฐ์์ง(matching engin)
์ฒด๊ฒฐ์์ง(matching engin)์ ๊ต์ฐจ ์์ง(cross engine)๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ์ฒด๊ฒฐ์์ง์ ์ฃผ์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๊ฐ ์ฃผ๋ฌธ์ ๋ํ ์ฃผ๋ฌธ์(order book) ๋๋ ํธ๊ฐ์ฐฝ์ ์ ์ง ๊ด๋ฆฌํด์ผํ๋ค.
ํน์ ์ฃผ์์ ๋ํ ๋งค์ ๋ฐ ๋งค๋ ์ฃผ๋ฌธ๋ชฉ๋ก์ ์๋ฏธํ๋ค.
2. ๋งค์ ์ฃผ๋ฌธ๊ณผ ๋งค๋ ์ฃผ๋ฌธ์ ์ฐ๊ฒฐํด์ผํ๋ค. ์ฃผ๋ฌธ ์ฒด๊ฒฐ์ ๊ฒฐ๊ณผ๋ ํ๋์ ๋งค์์ฃผ๋ฌธ๊ณผ ํ๋์ ๋งค๋์ฃผ๋ฌธ์ ์ฐ๊ฒฐ์ด๋ค.. ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋๋ฉฐ ๋๊ฐ (๋งค์์ชฝ1, ๋งค๋์ชฝ1) ์ ์งํ ๊ธฐ๋ก์ด ๋ง๋ค์ด์ง๋ค.
3. ์งํ ๊ธฐ๋ก ์คํธ๋ฆผ์ ์์ฅ ๋ฐ์ดํฐ๋ก ๋ฐฐํฌํ๋ค.
๊ฐ์ฉ์ฑ์ด ๋์์ผํ๋ ์์ง์ ์ฒด๊ฒฐ ์์๋ ๊ฒฐ์ ๋ก ์ (deteministic)์ด์ด์ผ ํ๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์ฃผ๋ฌธ์์๊ฐ ๊ฐ์ผ๋ฉด ์ฒด๊ฒฐ ์์ง์ด ๋ง๋๋ ์งํ ๊ธฐ๋ก ์์๋ ์ธ์ ๋ ๋์ผํ๋ค. ์ด๋ฌํ ๊ฒฐ์ ๋ก ์ ํน์ฑ์ ๊ณ ๊ฐ์ฉ์ฑ ํน์ฑ์ ๋ท๋ฐ์นจ์ด๋๋ค.
์ํ์(Sequencer)
์ํ์๋ ์ฒด๊ฒฐ ์์ง์ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํ ํต์ฌ ์์์ด๋ค. ์ฒด๊ฒฐ ์์ง์ ์ฃผ๋ฌธ์ ์ ๋ฌํ๊ธฐ ์ ์ ์์ ID(Sequnce ID)๋ฅผ ๋ถ์ฌ์ ๋ณด๋ธ๋ค. ์ฒด๊ฒฐ ์์ง์ด ์ฒ๋ฆฌ๋ฅผ ๋๋ธ ๋ชจ๋ ์งํ ์์๋ ์์ ID๋ฅผ ๋ถ์ธ๋ค.
์ํ์์๋ ์ ๋ ฅ ์ํ์(Inbound sequencer)์ ์ถ๋ ฅ ์ํ์(outbount sequence) ๋๊ฐ์ง๊ฐ ์๊ณ , ๊ฐ๊ฐ ๊ณ ์ ํ ์์๋ฅผ ์ ์งํด์ผํ๋ค. ์ํ์๊ฐ ๋ง๋๋ ์์ ID๋ ๋๋ฝํญ๋ชฉ์ ์ฝ๊ฒ ๋ฐ๊ฒฌํด์ผํจ์ผ๋ก ์ผ๋ จ๋ฒํธ์ฌ์ผ ํ๋ค.

1. ์์์ฑ(timeliness) ๋ฐ ๊ณต์ ์ฑ(fairness)
2. ๋น ๋ฅธ ๋ณต๊ตฌ(recovery) ๋ฐ ์ฌ์(replay)
3. ์ ํํ 1ํ ์คํ์ ๋ณด์ฆ(exactly-once quarantee)
์ํ์๋ ๋ฉ์ธ์ง ํ ์ญํ ๋ ํ๋ค.
์ฒด๊ฒฐ ์์ง์ ๋ฉ์ธ์ง(์์ ์ฃผ๋ฌธ)์ ๋ณด๋ด๋ ํ ์ญํ ๋ ํ๊ณ ,
๋ค๋ฅธ ํ๋๋ ์ฃผ๋ฌธ ๊ด๋ฆฌ์์๊ฒ ๋ฉ์ธ์ง(์งํ ๊ธฐ๋ก)์ ํ์ ํ๋ ํ ์ญํ ๋ ์์ฐ์ค๋ ํ๊ฒํ๋ค.
์ฃผ๋ฌธ๊ณผ, ์งํ๊ธฐ๋ก ์ด๋ฒคํธ ์ฐํธ์ ์ ์ฅํ๋ ์ฐํธํจ์ผ๋ก ๋ณผ์์๋ค(๊ทผ๋ฐ ์์๋๋ก ์ผ๋ จ๋ฒํธ๋ก ์ฐํธ์ ์ ๋ฆฌํด์ผํ๋)
์ฒด๊ฒฐ ์์ง์ ๋ ๊ฐ ์นดํ์นด ์ด๋ฒคํธ ์คํธ๋ฆผ์ด ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ๊ณผ ๋น์ทํ๋ค. ํ๋๋ ์ ๋ ฅ๋๋ ์ฃผ๋ฌธ์ฉ, ๋ค๋ฅธํ๋๋ ์ถ๋ ฅ๋ ์งํ ๊ธฐ๋ก์ฉ.
์นดํ์นด์ ์ง์ฐ ์๊ฐ์ด ๋ ์งง๊ณ ์์ธก ๊ฐ๋ฅํ๋ค๋ฉด ์ ๋ง๋ก ์ํ์ ๊ตฌํ์ ์นดํ์นด๋ฅผ ์ฌ์ฉํ ์ ์์์ ๊ฒ์ด๋ค.
์ฃผ๋ฌธ ๊ด๋ฆฌ์(order manager)
ํ ์ชฝ์ ๋ฐ์ ์ฃผ๋ฌธ์ ๋๊ธฐ๊ณ , ๋ค๋ฅธ์ชฝ์ ์ฒด๊ฒฐ ์์ง์ผ๋ก๋ถํฐ ์งํ ๊ธฐ๋ก์ ๋ฐ๋๋ค.
1. ์ข ํฉ์ ์ํ ์ ๊ฒ ๋ด๋น ์ปดํฌ๋ํธ์ ์ฃผ๋ฌธ์ ๋ณด๋ด์, ๊ฒํ ํ๋ค. ์ค๊ณ์์ ๋ฐ๋ผ ์ํ ์ ๊ฒ ๊ท์น์ ๋ฌ๋ผ์ง ๊ฒ์ด๋ค.
์์๋ก ์ฌ์ฉ์ ๊ฑฐ๋๋์ด ํ๋ฃจ 100๋ง ๋ฌ๋ฌ ๋ฏธ๋ง์ธ์ง ํ์ธํ๋๊ฒ ๋ฑ์ด ๋จ์ํ ์๋ค.
2. ์ฌ์ฉ์ ์ง๊ฐ์ ๊ฑฐ๋ ์ฒ๋ฆฌํ๊ธฐ์ ์ถฉ๋ถํ ์๊ธ์ด ์๋์ง ํ์ธํ๋ค.
3. ์ฃผ๋ฌธ์ ์ํ์์ ์ ๋ฌํ๋ค. ์ํ์๋ ๋ฐ์ผ๋ฉด ํด๋น ์ฃผ๋ฌธ์ ์์ID๋ฅผ ๋ถ์ด๊ณ , ์ฒด๊ฒฐ์์ง์ ๋ณด๋ด์ ์ฒ๋ฆฌํ๋ค.
์ฃผ๋ฌธ์๋ ๋ง์ ์์ฑ์ด ์์ง๋ง ๋ชจ๋ ์์ฑ์ ์ฒด๊ฒฐ์์ง์ ์ ๋ฌํ ํ์๋ ์๋ค.
๋ฉ์ธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด์, ํ์ํ ์์ฑ๋ง ์ ์กํ๊ฒ๋๋ค.
์์ฅ ๋ฐ์ดํฐ ํ๋ฆ
์์ฅ ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค(Market Data Publisher, MDP) ๋ ์ฒด๊ฒฐ ์์ง์์ ์งํ ๊ธฐ๋ก์ ์์ ํ๊ณ , ์งํ ์คํธ๋ฆผ์์ ํธ๊ฐ์ฐฝ, ๋ด ์ฐจํธ๋ฅผ ๋ง๋ ๋ค. ํธ๊ฐ์ฐฝ ๋ด์ฐจํธ๋ฅผ ํต์นญ์ผ๋ก ์์ฅ ๋ฐ์ดํฐ๋ผ๊ณ ํ๋ค.
์์ฅ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ์๋น์ค๋ก ์ ๋ฌํด์ ํด๋น ์๋น์ค ๊ตฌ๋ ์๊ฐ ์ฌ์ฉํ ์ ์๊ฒํ๋ค.

๋ณด๊ณ ํ๋ฆ
๊ฑฐ๋ ์ด๋ ฅ, ์ธ๊ธ ๋ณด๊ณ , ๊ท์ ์ค์ ์ฌ๋ถ ๋ณด๊ณ , ๊ฒฐ์ฐ(SETTLEMENT) ๋ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ณด๊ณ ๋ ์ ํ์ฑ๊ณผ ๊ท์ ์ค์๊ฐ ํต์ฌ์ด๋ค. ๋น ๋ฅธ ๊ฒ๊ณผ ์ง์ฐ์๊ฐ ์ต์ํ๊ฐ ๋์ค์ํ๋ค.
์ ๋ ฅ ์ ๋ณด์ ์ฃผ๋ฌธ๊ณผ, ๊ฒฐ๊ณผ๋๊ฐ๋ ์ฃผ๋ฌธ ์์ฑ์ ๋ชจ๋ ๋ชจ์ ๊ตฌ์ฑํ๋ค.
๋ค์ด์ค๋ ์ ์ฃผ๋ฌธ์๋ ์ฃผ๋ฌธ์ ์ธ๋ถ์ ๋ณด๋ง ์๊ณ , ๋๊ฐ๋ ์งํ๊ธฐ๋ก์๋ ์ฃผ๋ฌธid, ๊ฐ๊ฒฉ, ์๋ ๋ฐ ์งํ ์ํ๋ง ์๊ธฐ๋๋ฌธ์ด๋ค.


์ด 13.6 ๊ทธ๋ฆผ์ ์ฆ๊ถ ์ฃผ๋ฌธ์ด ์ ์๋๊ณ ์ฒด๊ฒฐ๋ ๋๊น์ง์ ์ ์ฒด ํ๋ฆ์ ๋ณด์ฌ์ฃผ๋ ๊ตฌ์กฐ๋์์.
์ฝ๊ฒ ๋ณด๋ฉด ๋ค์ ์์์ ๋๋ค.
- ์ฌ์ฉ์
- ๋ก๋นํ๋, ๊ณจ๋๋ง์ญ์ค ๊ฐ์ ์ฆ๊ถ์ฌ ์ฑ์ด๋ ํ๋ก๊ทธ๋จ์์ ๋งค์·๋งค๋ ์ฃผ๋ฌธ์ ๋ ๋๋ค.
- ๋ธ๋ก์ปค
- ์ฌ์ฉ์์ ์ฃผ๋ฌธ์ ๋ฐ์ ๊ฑฐ๋์๋ก ์ ๋ฌํ ์ค๋น๋ฅผ ํฉ๋๋ค.
- ๊ฑฐ๋์์์ ๋ฐ์ ์ฒด๊ฒฐ ๊ฒฐ๊ณผ๋ ๋ค์ ์ฌ์ฉ์์๊ฒ ๋๋ ค์ค๋๋ค.
- ํด๋ผ์ด์ธํธ ๊ฒ์ดํธ์จ์ด
- ์ฆ๊ถ์ฌ์ ๊ฑฐ๋์ ์ฌ์ด์ ์ถ์ ๊ตฌ ์ญํ ์ ํฉ๋๋ค.
- ์ธ๋ถ์์ ๋ค์ด์จ ์ฃผ๋ฌธ์ ๊ฑฐ๋์ ๋ด๋ถ ํ์์ผ๋ก ์ ๋ฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ธ๋ถ๋ก ๋ณด๋ ๋๋ค.
- ์ฃผ๋ฌธ ๊ด๋ฆฌ์
- ์ฃผ๋ฌธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํต์ฌ ์ปดํฌ๋ํธ์ ๋๋ค.
- ์ฃผ๋ฌธ์ด ์ ์์ธ์ง, ์ทจ์๋์๋์ง, ์ผ๋ถ ์ฒด๊ฒฐ๋์๋์ง ๋ฑ์ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ด๋ถ์ ์ง๊ฐ์ ์ฃผ๋ฌธ ๊ฐ๋ฅํ ์๊ธ์ด๋ ๋ณด์ ์๋์ ํ์ธํ๋ ์ญํ ๋ก ์ดํดํ๋ฉด ๋ฉ๋๋ค.
- ์ข
ํฉ์ ์ํ ์ ๊ฒ
- ์ฃผ๋ฌธ ๊ธ์ก์ด ๋๋ฌด ํฌ์ง ์์์ง,
- ๊ณ์ข์ ์ถฉ๋ถํ ๋์ด๋ ์ฃผ์์ด ์๋์ง,
- ๋น์ ์์ ์ธ ์ฃผ๋ฌธ์ ์๋์ง ๊ฒ์ฌํฉ๋๋ค.
- ์ํ์
- ์ฌ๋ฌ ์ฃผ๋ฌธ์ด ๋์์ ๋ค์ด์๋ ์ฒ๋ฆฌ ์์๊ฐ ๊ผฌ์ด์ง ์๋๋ก ์์๋ฅผ ํ์ ํฉ๋๋ค.
- ๊ฑฐ๋์ ๊ณต์ ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ์ญํ ์ ๋๋ค.
- ์ฒด๊ฒฐ ์์ง
- ์ค์ ๋งค์ ์ฃผ๋ฌธ๊ณผ ๋งค๋ ์ฃผ๋ฌธ์ ์๋ก ๋งค์นญํฉ๋๋ค.
- ๊ฐ๊ฒฉ๊ณผ ์๋์ด ๋ง์ผ๋ฉด ๊ฑฐ๋๊ฐ ์ฒด๊ฒฐ๋ฉ๋๋ค.
- ํธ๊ฐ์ฐฝ
- ์์ง ์ฒด๊ฒฐ๋์ง ์์ ๋งค์·๋งค๋ ์ฃผ๋ฌธ์ ๊ฐ๊ฒฉ๋ณ๋ก ์ ๋ฆฌํด ๋ ๊ณต๊ฐ์ ๋๋ค.
- ์๋ฅผ ๋ค์ด “10,000์์ ์ฌ๊ณ ์ถ๋ค”, “10,100์์ ํ๊ณ ์ถ๋ค” ๊ฐ์ ์ฃผ๋ฌธ๋ค์ด ์์ ๋๋ค.
- ์์ฅ ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค
- ์ฒด๊ฒฐ๊ฐ, ๋งค์·๋งค๋ ํธ๊ฐ, ๊ฑฐ๋๋ ๊ฐ์ ์์ฅ ์ ๋ณด๋ฅผ ์ธ๋ถ์ ์ ๋ฌํฉ๋๋ค.
- ๋ฐ์ดํฐ ์๋น์ค
- ์์ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ธ๋ก์ปค๋ ์ฆ๊ถ์ฌ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌ์ฉ์๋ ์ด ์ ๋ณด๋ฅผ ์ฑ์์ ์ค์๊ฐ ์์ธ๋ก ๋ณด๊ฒ ๋ฉ๋๋ค.
- ๋ณด๊ณ ์๋น์ค์ DB
- ์ฃผ๋ฌธ ๊ธฐ๋ก๊ณผ ์ฒด๊ฒฐ ๊ธฐ๋ก์ ์ ์ฅํฉ๋๋ค.
- ๋์ค์ ์กฐํ, ๊ฐ์ฌ, ์ ์ฐ, ๋ถ์์ ์ฌ์ฉ๋ฉ๋๋ค.
ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด,
์ฌ์ฉ์๊ฐ ์ฃผ๋ฌธ์ ๋ด๋ฉด ๋ธ๋ก์ปค์ ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ฑฐ์ณ ์ํ ๊ฒ์ฌ๋ฅผ ๋ฐ๊ณ , ์ํ์๊ฐ ์์๋ฅผ ์ ํ ๋ค ์ฒด๊ฒฐ ์์ง์ด ๋งค์·๋งค๋๋ฅผ ๋งค์นญํ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ ๋ค์ ์ฌ์ฉ์์ ์์ฅ ๋ฐ์ดํฐ ์์คํ
์ผ๋ก ์ ๋ฌ๋๋ ๊ตฌ์กฐ์
๋๋ค.
API ์ค๊ณ
๊ณ ๊ฐ์ ๋ธ๋ก์ปค๋ฅผ ํตํด์ ์ฆ๊ถ ๊ฑฐ๋์์ ์์ฉํด์ ์ฃผ๋ฌธ, ์ฒด๊ฒฐ ์กฐํ ์์ฅ๋ฐ์ดํฐ ์กฐํ, ๋ถ์์ ์ํ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ ๋ค์ด๋ก๋๋ฅผ ์ํํ๋ค.
๋ธ๋ก์ปค์ ํด๋ผ์ด์ธํธ ๊ฒ์ดํธ์จ์ด ๊ฐ์ ์ธํฐํ์ด์ค ๋ช ์ธ ์์ฑ์๋ RESTful ์ปจ๋ฒค์ ์ ์ฌ์ฉํ๋ค. (๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฐธ๊ณ )
RESTful API๋ก๋ ํค์ง ํ๋๊ฐ์ ๊ธฐ๊ด ๊ณ ๊ฐ์ ์ง์ฐ ์๊ฐ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ ๋ชปํ ์ ์๋ค.
์ด๋ฐ ๊ธฐ๊ด์ ๊ณต๊ธ๋๋ ํน์ SW๋ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ผํ๋ค. ๊ทธ๋ฌ๋, ํ๋กํ ์ฝ์ด ์ด๋ค ํน์ฑ์ ๊ฐ๋ ์ง ์๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋์ผํ๊ฒ ์ ๊ณต๋์ด์ผ๋ง ํ๋ค.
์ฃผ๋ฌธ
POST /v1/order
์ธ์
์ด ์๋ํฌ์ธํธ๋ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ค. ์ธ์ฆ์ด ํ์ํ๋ค
- symbol : ์ฃผ์ ๋ํ๋ด๋ ํ์. ์๋ฃํ string
- side : ๋งค์ ๋๋ ๋งค๋. ์๋ฃํ string
- price : ์ง์ ๊ฐ ์ฃผ๋ฌธ์ ๊ฐ๊ฒฉ. ์๋ฃํ long
-orderType : limit(์ง์ ๊ฐ) ๋๋ market(์์ฅ๊ฐ). ์ด๋ฒ์ ์ง์ ๊ฐ ์ฃผ๋ฌธ๋ง, ์๋ฃํ String.
-quantity : ์ฃผ๋ฌธ ์๋. ์๋ฃํ long
์ฃผ๋ฌธ
POST /v1/order
์ด ์๋ํฌ์ธํธ๋ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ค. ์ธ์ฆ์ด ํ์ํ๋ค.
์ธ์
symbol: ์ฃผ์์ ๋ํ๋ด๋ ์ฌ๋ฒ(symbol)์ด๋ค. ์๋ฃํ String
side: buy(๋งค์) ๋๋ sell(๋งค๋). ์๋ฃํ String
price: ์ง์ ๊ฐ ์ฃผ๋ฌธ์ ๊ฐ๊ฒฉ. ์๋ฃํ Long
orderType: limit(์ง์ ๊ฐ) ๋๋ market(์์ฅ๊ฐ). ์ด๋ฒ ์ฅ์์๋ ์ง์ ๊ฐ ์ฃผ๋ฌธ๋ง ์ง์ํจ์ ์ ์ํ์. ์๋ฃํ String
quantity: ์ฃผ๋ฌธ ์๋. ์๋ฃํ Long
์๋ต
๋ณธ๋ฌธ(body):
id: ์ฃผ๋ฌธ ID. ์๋ฃํ Long
creationTime: ์ฃผ๋ฌธ์ด ์์คํ
์ ์์ฑ๋ ์๊ฐ. ์๋ฃํ Long
filledQuantity: ์งํ์ด ์๋ฃ๋ ์๋. ์๋ฃํ Long
remainingQuantity: ์์ง ์ฒด๊ฒฐ๋์ง ์์ ์ฃผ๋ฌธ ์๋. ์๋ฃํ Long
status: new/canceled/filled. ์๋ฃํ String
๋๋จธ์ง ์์ฑ์ ์
๋ ฅ ์ธ์์ ๊ฐ๋ค.
์ฝ๋:
200: ์ฑ๊ณต
40x: ์ธ์ ์ค๋ฅ/์ ๊ทผ ๋ถ๊ฐ/๊ถํ ์์
500: ์๋ฒ ์ค๋ฅ
---
์งํ
GET /v1/execution?symbol={:symbol}&orderId={:orderId}&startTime={:startTime}&endTime={:endTime}
์ด ์๋ํฌ์ธํธ๋ ์งํ ์ ๋ณด๋ฅผ ์ง์ํ๋ค. ์ธ์ฆ์ด ํ์ํ๋ค.
์ธ์
symbol: ์ฃผ์ ์ฌ๋ฒ. ์๋ฃํ String
orderId: ์ฃผ๋ฌธ์ ID. ์ ํ์ ์ธ์(optional). ์๋ฃํ String
startTime: ์ง์ ์์ ์๊ฐ. ๊ธฐ์ ์๊ฐ(epoch) ๊ธฐ์ค. [11] ์๋ฃํ Long
endTime: ์ง์ ์ข
๋ฃ ์๊ฐ. ๊ธฐ์ ์๊ฐ ๊ธฐ์ค. ์๋ฃํ Long
์๋ต
๋ณธ๋ฌธ:
executions: ๋ฒ์ ๋ด ๋ชจ๋ ์งํ ๊ธฐ๋ก์ ๋ฐฐ์ด. ์๋ฃํ Array
id: ์งํ ๊ธฐ๋ก ID. ์๋ฃํ Long
orderId: ์ฃผ๋ฌธ ID. ์๋ฃํ Long
symbol: ์ฃผ์ ์ฌ๋ฒ. ์๋ฃํ String
side: buy(๋งค์) ๋๋ sell(๋งค๋). ์๋ฃํ String
price: ์ฒด๊ฒฐ ๊ฐ๊ฒฉ. ์๋ฃํ String
orderType: limit(์ง์ ๊ฐ) ๋๋ market(์์ฅ๊ฐ). ์๋ฃํ String
quantity: ์ฒด๊ฒฐ ์๋. ์๋ฃํ Long
์ฝ๋:
200: ์ฑ๊ณต
40x: ์ธ์ ์ค๋ฅ/ํด๋น ์์ ์์/์ ๊ทผ ๋ถ๊ฐ/๊ถํ ์์
500: ์๋ฒ ์ค๋ฅ
---
ํธ๊ฐ ์ฐฝ/์ฃผ๋ฌธ์
GET /v1/marketdata/orderBook/L2?symbol={:symbol}&depth={:depth}
์ด ์๋ํฌ์ธํธ๋ ์ฃผ์ด์ง ์ฃผ์ ์ฌ๋ฒ, ์ฃผ์ด์ง ๊น์ด ๊ฐ์ ๋ํ L2 ํธ๊ฐ ์ฐฝ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
์ธ์
symbol: ์ฃผ์ ์ฌ๋ฒ. ์๋ฃํ String
depth: ๋ฐํํ ํธ๊ฐ ์ฐฝ์ ํธ๊ฐ ๊น์ด. ์๋ฃํ Int
startTime: ์ง์ ์์ ์๊ฐ. ๊ธฐ์ ์๊ฐ ๊ธฐ์ค. ์๋ฃํ Long
endTime: ์ง์ ์ข
๋ฃ ์๊ฐ. ๊ธฐ์ ์๊ฐ ๊ธฐ์ค. ์๋ฃํ Long
์๋ต
๋ณธ๋ฌธ:
bids: ๊ฐ๊ฒฉ๊ณผ ์๋ ์ ๋ณด๋ฅผ ๋ด์ ๋ฐฐ์ด. ์๋ฃํ Array
asks: ๊ฐ๊ฒฉ๊ณผ ์๋ ์ ๋ณด๋ฅผ ๋ด์ ๋ฐฐ์ด. ์๋ฃํ Array
์ฝ๋:
200: ์ฑ๊ณต
40x: ์ธ์ ์ค๋ฅ/ํด๋น ์์ ์์/์ ๊ทผ ๋ถ๊ฐ/๊ถํ ์์
500: ์๋ฒ ์ค๋ฅ
---
๊ฐ๊ฒฉ ๋ณ๋ ์ด๋ ฅ(๋ด ์ฐจํธ)
GET /v1/marketdata/candles?symbol={:symbol}&resolution={:resolution}&startTime={:startTime}&endTime={:endTime}
์ฃผ์ด์ง ์๊ฐ ๋ฒ์, ํด์๋(resolution), ์ฌ๋ฒ์ ๋ํ ๋ด ์ฐจํธ ๋ฐ์ดํฐ
์ธ์
symbol: ์ฃผ์ ์ฌ๋ฒ. ์๋ฃํ String
resolution: ๋ด ์ฐจํธ์ ์๋ ๊ธธ์ด(์ด ๋จ์). ์๋ฃํ Long
startTime: ์ง์ ์์ ์๊ฐ. ๊ธฐ์ ์๊ฐ ๊ธฐ์ค. ์๋ฃํ Long
endTime: ์ง์ ์ข
๋ฃ ์๊ฐ. ๊ธฐ์ ์๊ฐ ๊ธฐ์ค. ์๋ฃํ Long
์๋ต
๋ณธ๋ฌธ:
candles: ๊ฐ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ฐฐ์ด. ์๋ฃํ Array
open: ํด๋น ๋ด์ ์๊ฐ. ์๋ฃํ Double
close: ํด๋น ๋ด์ ์ข
๊ฐ. ์๋ฃํ Double
high: ํด๋น ๋ด์ ๊ณ ๊ฐ. ์๋ฃํ Double
low: ํด๋น ๋ด์ ์ ๊ฐ. ์๋ฃํ Double
์ฝ๋:
200: ์ฑ๊ณต
40x: ์ธ์ ์ค๋ฅ/ํด๋น ์์ ์์/์ ๊ทผ ๋ถ๊ฐ/๊ถํ ์์
500: ์๋ฒ ์ค๋ฅ
---
๋ฐ์ดํฐ ๋ชจ๋ธ
์ฆ๊ถ ๊ฑฐ๋์์๋ ์ธ ๊ฐ์ง ์ ํ์ ์ฃผ์ ๋ฐ์ดํฐ๊ฐ ์๋ค. ํ๋์ฉ ์ดํด๋ณด์.
• ์ํ, ์ฃผ๋ฌธ ๋ฐ ์งํ
• ํธ๊ฐ ์ฐฝ/์ฃผ๋ฌธ์
• ๋ด ์ฐจํธ
์ํ, ์ฃผ๋ฌธ, ์งํ
์ํ(product)์ ๊ฑฐ๋ ๋์ ์ฃผ์(์ฆ, ์ฌ๋ฒ)์ด ๊ฐ์ง ์์ฑ์ผ๋ก ์ ์๋๋ค. ์ํ์ ์ ํ, ๊ฑฐ๋์ ์ฐ์ด๋ ์ฌ๋ฒ, UI์ ํ์๋ ์ฌ๋ฒ, ๊ฒฐ์ฐ์ ์ด์ฉ๋๋ ํตํ ๋จ์, ๋งค๋งค ์๋ ๋จ์(lot size), ํธ๊ฐ ๊ฐ๊ฒฉ ๋จ์(tick size) ๋ฑ์ด๋ค. ์ด ๋ฐ์ดํฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋๋ค. ์ฃผ๋ก UI ํ์๋ฅผ ์ํ ๋ฐ์ดํฐ๋ค. ์๋ฌด ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ์บ์๋ฅผ ์ ์ฉํ๊ธฐ ์ข๋ค.
์ฃผ๋ฌธ์ ๋งค์ ๋๋ ๋งค๋๋ฅผ ์คํํ๋ผ๋ ๋ช
๋ น์ด๋ฉฐ, ์งํ ๊ธฐ๋ก์ ์ฒด๊ฒฐ์ด ์ด๋ฃจ์ด์ง ๊ฒฐ๊ณผ๋ค. ์งํ ๊ธฐ๋ก(execution)์ ์ถฉ์กฑ(fill)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ๋ชจ๋ ์ฃผ๋ฌธ์ด ์งํ๋์ง๋ ์๋๋ค. ์ฒด๊ฒฐ ์์ง์ ํ๋์ ์ฃผ๋ฌธ ์ฒด๊ฒฐ์ ๊ด์ฌํ ๋งค์ ํ์์ ๋งค๋ ํ์๋ฅผ ๋ํ๋ด๋ ๋ ๊ฐ์ ์งํ ๊ธฐ๋ก์ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๋ค.
๊ทธ๋ฆผ 13.12๋ ์ด ์ธ ์ ๋ณด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋
ผ๋ฆฌ ๋ชจ๋ธ ๋ค์ด์ด๊ทธ๋จ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๊ฐ ์๋๋ผ๋ ์ ์ ์ ์ํ์.

์ฃผ๋ฌธ๊ณผ ์งํ ๊ธฐ๋ก์ ๊ฑฐ๋์๊ฐ ์ทจ๊ธํ๋ ๊ฐ์ฅ ์ค์ํ ๋ฐ์ดํฐ๋ค. ๊ฐ๋ต์ ์ค๊ณ์์ ํฌํจ๋ ์ธ ๊ฐ์ง ์ค์ ํ๋ฆ์์ ํด๋น ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์กฐ๊ธ์ฉ ๋ค๋ฅธ ํํ๋ก ์ด์ฉ๋๋ ๊ฒ์ ์ดํด๋ณธ ๋ฐ ์๋ค.
• ์ค์ ๊ฑฐ๋ ๊ฒฝ๋ก๋ ์ฃผ๋ฌธ๊ณผ ์งํ ๊ธฐ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ์ง ์๋๋ค. ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ๊ฑฐ๋๋ฅผ ์ฒด๊ฒฐํ๊ณ ํ๋๋์คํฌ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ฃผ๋ฌธ๊ณผ ์งํ ๊ธฐ๋ก์ ์ ์ฅํ๊ณ ๊ณต์ ํ๋ค. ํนํ ์ฃผ๋ฌธ๊ณผ ์งํ ๊ธฐ๋ก์ ๋น ๋ฅธ ๋ณต๊ตฌ๋ฅผ ์ํด ์ํ์์ ์ ์ฅํ๋ฉฐ, ๋ฐ์ดํฐ ๋ณด๊ด์ ์ฅ ๋ง๊ฐ ํ์ ์คํํ๋ค. ์ํ์์ ํจ์จ์ ๊ตฌํ ๋ฐฉ์์ ์์ธ ์ค๊ณ์์ ์ค๋ช
ํ๋ฉด์ ์ดํด๋ณด๊ฒ ๋ค.
• ๋ณด๊ณ ์๋น์ค๋ ์กฐ์ ์ด๋ ์ธ๊ธ ๋ณด๊ณ ๋ฑ์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃผ๋ฌธ ๋ฐ ์งํ ๊ธฐ๋ก์ ์ ์ฅํ๋ค.
• ์งํ ๊ธฐ๋ก์ ์์ฅ ๋ฐ์ดํฐ ํ๋ก์ธ์๋ก ์ ๋ฌ๋์ด ํธ๊ฐ ์ฐฝ/์ฃผ๋ฌธ์์ ๋ด ์ฐจํธ ๋ฐ์ดํฐ ์ฌ๊ตฌ์ฑ์ ์ฐ์ธ๋ค.
ํธ๊ฐ ์ฐฝ
ํธ๊ฐ ์ฐฝ์ ํน์ ์ฆ๊ถ ๋๋ ๊ธ์ต ์ํ์ ๋ํ ๋งค์ ๋ฐ ๋งค๋ ์ฃผ๋ฌธ ๋ชฉ๋ก์ผ๋ก, ๊ฐ๊ฒฉ ์์ค๋ณ๋ก ์ ๋ฆฌ๋์ด ์๋ค.[12][13] ์ฒด๊ฒฐ ์์ง์ด ๋น ๋ฅธ ์ฃผ๋ฌธ ์ฒด๊ฒฐ์ ์ํด ์ฌ์ฉํ๋ ํต์ฌ ์๋ฃ ๊ตฌ์กฐ๋ค. ํธ๊ฐ ์ฐฝ์ ์๋ฃ ๊ตฌ์กฐ๋ ๋ค์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ ์ ์๋, ํจ์จ์ฑ์ด ๋์ ๊ฒ์ด์ด์ผ ํ๋ค.
• ์ผ์ ํ ์กฐํ ์๊ฐ: ์ด ์๊ฑด์ ๋ง์กฑํด์ผ ํ๋ ์์
์๋ ํน์ ๊ฐ๊ฒฉ ์์ค์ ์ฃผ๋ฌธ๋ ์กฐํ, ํน์ ๊ฐ๊ฒฉ ๋ฒ์ ๋ด์ ์ฃผ๋ฌธ๋ ์กฐํ ๋ฑ์ด ํฌํจ๋๋ค.
• ๋น ๋ฅธ ์ถ๊ฐ/์ทจ์/์คํ ์๋: ๊ฐ๊ธ์ O(1) ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ง์กฑํด์ผ ํ๋ค. ์ฌ๊ธฐ ํด๋นํ๋ ์์
์๋ ์ ์ฃผ๋ฌธ ๋ฃ๊ธฐ, ๊ธฐ์กด ์ฃผ๋ฌธ ์ทจ์ํ๊ธฐ, ์ฃผ๋ฌธ ์ฒด๊ฒฐํ๊ธฐ ๋ฑ์ด ์๋ค.
• ๋น ๋ฅธ ์
๋ฐ์ดํธ: ์ฌ๊ธฐ ํด๋นํ๋ ์์
์๋ ์ฃผ๋ฌธ ๊ต์ฒด ๋ฑ์ด ์๋ค.
• ์ต๊ณ ๋งค์ ํธ๊ฐ/์ต์ ๋งค๋ ํธ๊ฐ ์ง์
• ๊ฐ๊ฒฉ ์์ค ์ํ(iteration)
๊ทธ๋ฆผ 13.13์ ํธ๊ฐ ์ฐฝ ์์ ๋ฅผ ํตํด ์ฃผ๋ฌธ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ์์๋ณด์.

- ์์ชฝ ๋ฐ์ค (๋งค๋ ํธ๊ฐ ์ฐฝ, ๋นจ๊ฐ์ ๊ณ์ด): ์ฃผ์์ ํ๋ ค๋ ์ฌ๋๋ค์ ์ฃผ๋ฌธ ํํฉ์
๋๋ค.
- ๊ฐ๊ฒฉ: 100.10๋ถํฐ 100.13๊น์ง ํ๊ณ ์ถ์ ๊ฐ๊ฒฉ๋ค์ด ๋์ด๋์ด ์์ต๋๋ค.
- ์๋: ๊ฐ ๊ฐ๊ฒฉ์ ์ผ๋ง๋ ๋ง์ ์ฃผ์ ๋ฌผ๋์ด ์์ฌ ์๋์ง ์ฌ๊ฐํ ๋ธ๋ก์ ๊ฐ์๋ก ์๊ฐํ๋์ด ์์ต๋๋ค. ๊ฐ๊ฒฉ์ด ๋ฎ์์๋ก (100.10) ๋งค์์๊ฐ ๋จผ์ ์ฑ๊ฐ๊ธฐ ๋๋ฌธ์ '๋งค๋ ์ฃผ๋ฌธ ๊น์ด'๊ฐ ์๊ณ , ๊ฐ๊ฒฉ์ด ๋์์๋ก (100.13) ๊น์ด์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
- ์๋์ชฝ ๋ฐ์ค (๋งค์ ํธ๊ฐ ์ฐฝ, ํ๋์ ๊ณ์ด): ์ฃผ์์ ์ฌ๋ ค๋ ์ฌ๋๋ค์ ์ฃผ๋ฌธ ํํฉ์
๋๋ค.
- ํ๋ ค๋ ๊ฐ๊ฒฉ๋ณด๋ค ๋ฎ์ 100.05๋ถํฐ 100.08๊น์ง์ ๊ฐ๊ฒฉ๋ค์ด ๋์ด๋์ด ์์ต๋๋ค.
- ๊ฐ์ฅ ๋์ ๊ฐ๊ฒฉ์ธ 100.08์ด '์ต๊ณ ๋งค์ ์ฃผ๋ฌธ'์ด๋ฉฐ, ๊ฐ๊ฒฉ์ด ๋ฎ์์ง์๋ก ๋ ๋ง์ ์ฃผ๋ฌธ์ด ์์ด๋ ๊ฒ์ ๋ธ๋ก์ผ๋ก ๋ณด์ฌ์ค๋๋ค.
- ํ์ดํ์ ์๋ ๊ณ์ฐ์: ์ค์ ๊ฑฐ๋๊ฐ ์ฒด๊ฒฐ๋๋ ๊ณผ์ ์ ์ค๋ช
ํฉ๋๋ค.
- ๋๊ตฐ๊ฐ๊ฐ ์์ฅ๊ฐ๋ก 2700์ฃผ๋ฅผ ๋งค์ํ๋ ค๊ณ ํ ๋, ๊ฐ์ฅ ์ ๋ ดํ ๋งค๋ ๋ฌผ๋๋ถํฐ ์ฐจ๋ก๋๋ก ์ฌ๋ค์ด๊ฒ ๋ฉ๋๋ค.
- ํ์ดํ๋ ๋งค๋ ํธ๊ฐ์ฐฝ์ ์์ฌ ์๋ 200, 400, 1100, 100, 900์ฃผ์ ๋ฌผ๋๋ค์ด ์ฐจ๋ก๋ก ์๊ฐ(๋งค์)๋๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค.
- ๋ง์ง๋ง ๊ณ์ฐ์์ 2700์ฃผ์ ์ฃผ๋ฌธ์ด ๋งค๋ ๋ฌผ๋๋ค๊ณผ ๋งค์นญ๋์ด ์ต์ข ์ ์ผ๋ก ์ฌ๋ ค๋ ์๋์ด '0'์ด ๋๋ฉฐ ์ฃผ๋ฌธ์ด ์๋ฃ๋์์์ ๋ํ๋ ๋๋ค.
์์ฝํ์๋ฉด, ์ด ๊ทธ๋ฆผ์ ์ฃผ์์ ๋งค๋ ๋ฌผ๋๊ณผ ๋งค์ ๋ฌผ๋์ด ๊ฐ๊ฒฉ๋ณ๋ก ์ด๋ป๊ฒ ์์ฌ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๋๋ ์ฃผ๋ฌธ์ด ๋ค์ด์์ ๋ ์ด๋ป๊ฒ ๊ฑฐ๋๊ฐ ์ฒด๊ฒฐ๋๋์ง๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์๋ฃ์ ๋๋ค.
์ด ์์ ์์ ์ ํ ์ฃผ์ 2,700์ฃผ์ ๋ํ ๋๋ ์์ฅ๊ฐ ๋งค์ ์ฃผ๋ฌธ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ ๊น? ์ต์ ๋งค๋ ํธ๊ฐ ํ์ ๋ชจ๋ ๋งค๋ ์ฃผ๋ฌธ๊ณผ ์ฒด๊ฒฐ๋ ํ์ ํธ๊ฐ 100.11 ํ์ ์ฒซ ๋ฒ์งธ ๋งค๋ ์ฃผ๋ฌธ๊ณผ ์ฒด๊ฒฐ๋๋ฉฐ ๊ฑฐ๋๊ฐ ๋๋๋ค. ์ด ๋๋ ์ฃผ๋ฌธ์ ์ฒด๊ฒฐ ๊ฒฐ๊ณผ๋ก ๋งค์/๋งค๋ ํธ๊ฐ ์คํ๋ ๋, ์ฆ ๋ ๊ฐ์ ๊ฐ๊ฒฉ ์ฐจ์ด๊ฐ ๋์ด์ง๊ณ ์ฃผ์ ๊ฐ๊ฒฉ์ ํ ๋จ๊ณ ์์นํ๋ค(์ต์ ๋งค๋ ํธ๊ฐ๋ 100.11์ผ๋ก ๋ฐ๋๋ค).
๋ค์ ์ฝ๋๋ ํธ๊ฐ ์ฐฝ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ๋ณด์ฌ ์ค๋ค.
class PriceLevel {
private Price limitPrice;
private long totalVolume;
private List<Order> orders;
}
class Book<Side> {
private Side side;
private Map<Price, PriceLevel> limitMap;
}
class OrderBook {
private Book<Buy> buyBook;
private Book<Sell> sellBook;
private PriceLevel bestBid;
private PriceLevel bestOffer;
private Map<OrderID, Order> orderMap;
}
์ด ์ฝ๋๋ ์์ ์ดํด๋ณธ ๋ชจ๋ ์ค๊ณ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ ์ ์์๊น? ์๋ฅผ ๋ค์ด, ์ง์ ๊ฐ ์ฃผ๋ฌธ์ ์ถ๊ฐ/์ทจ์ํ๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(1)์ธ๊ฐ? ์ผ๋ฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๋๋ต์ ‘์๋์’๋ค(private List<Order> orders).
๋ณด๋ค ํจ์จ์ ์ธ ํธ๊ฐ ์ฐฝ์ ๋ง๋ค๋ ค๋ฉด “orders”์ ์๋ฃ ๊ตฌ์กฐ๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ(doubly linked list)๋ก ๋ณ๊ฒฝํ์ฌ ๋ชจ๋ ์ญ์ ์ฐ์ฐ(์ฃผ๋ฌธ ์ทจ์๋ ์ฒด๊ฒฐ ์ฒ๋ฆฌ์ ํ์)์ด O(1)์ ์ฒ๋ฆฌ๋๋๋ก ํด์ผ ํ๋ค. ์ด๋ฐ ์ฐ์ฐ๋ค์ ์๊ฐ ๋ณต์ก๋๊ฐ ์ด๋ป๊ฒ O(1)๊ฐ ๋๋์ง ์์๋ณด์.
1. ์ ์ฃผ๋ฌธ์ ๋ฃ๋๋ค๋ ๊ฒ์ PriceLevel ๋ฆฌ์คํธ ๋ง์ง๋ง(tail)์ ์ Order๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ์ด ์ฐ์ฐ์ O(1)์ ์ฒ๋ฆฌ๋๋ค.
2. ์ฃผ๋ฌธ์ ์ฒด๊ฒฐํ๋ค๋ ๊ฒ์ PriceLevel ๋ฆฌ์คํธ์ ๋งจ ์(head)์ ์๋ Order๋ฅผ ์ญ์ ํ๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ์ด ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค.
3. ์ฃผ๋ฌธ์ ์ทจ์ํ๋ค๋ ๊ฒ์ ํธ๊ฐ ์ฐฝ, ์ฆ OrderBook์์ Order๋ฅผ ์ญ์ ํ๋ค๋ ๋ป์ด๋ค. OrderBook์ ํฌํจ๋์ด ์๋ ๋์(helper) ์๋ฃ ๊ตฌ์กฐ Map<OrderID, Order> orderMap์ ํ์ฉํ๋ฉด O(1) ์๊ฐ ๋ด์ ์ทจ์ํ ์ฃผ๋ฌธ์ ์ฐพ์ ์ ์๋ค. ์ฃผ๋ฌธ์ ์ฐพ์๋๋ผ๋ orders๊ฐ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์๋๋ผ๋ฉด ์ ์ฒด ๋ชฉ๋ก์ ์ํํ์ฌ ์ด์ ํฌ์ธํฐ๋ฅผ ์ฐพ์์ผ ์ฃผ๋ฌธ์ ์ญ์ ํ ์ ์์ผ๋ฏ๋ก O(n)์ ์๊ฐ์ด ๊ฑธ๋ ธ์ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๊ฒฌ๋ Order ์์ ์ด์ ์ฃผ๋ฌธ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์์ผ๋ฏ๋ก ์ ์ฒด ์ฃผ๋ฌธ ๋ชฉ๋ก์ ์ํํ์ง ์๊ณ ๋ ์ฃผ๋ฌธ์ ์ญ์ ํ ์ ์๋ค.
๊ทธ๋ฆผ 13.14๋ ์ด ์ธ ๊ฐ์ง ์ฐ์ฐ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ ์ค๋ค.

์ด 13.14๊ทธ๋ฆผ์ ํต์ฌ์ ์ฃผ๋ฌธ์ ์๋ก ๋ฃ๊ฑฐ๋, ์ฒด๊ฒฐํ๊ฑฐ๋, ์ทจ์ํ ๋ ์ ์ฒด ์ฃผ๋ฌธ ๋ชฉ๋ก์ ์ฒ์๋ถํฐ ๋ค์ง์ง ์๊ณ ๋ฐ๋ก ์ฐพ์๊ฐ๋๋ก ๋ง๋ ๊ตฌ์กฐ์์.
์ ์ฒด ๊ตฌ์กฐ๋ถํฐ ๋ณด๋ฉด
์ผ์ชฝ์ limitMap์ ๊ฐ๊ฒฉ๋ณ ์ฃผ๋ฌธ ๋ฌถ์์ ๊ด๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด:
- 100.08์์ ๊ฑธ๋ฆฐ ์ฃผ๋ฌธ๋ค
- 100.07์์ ๊ฑธ๋ฆฐ ์ฃผ๋ฌธ๋ค
- 100.06์์ ๊ฑธ๋ฆฐ ์ฃผ๋ฌธ๋ค
์ด๋ ๊ฒ ๊ฐ๊ฒฉ๋ง๋ค ํ๋์ PriceLevel์ด ์๊ณ , ๊ฐ ๊ฐ๊ฒฉ ์์๋ ์ฌ๋ฌ ์ฃผ๋ฌธ์ด ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅ๋ฉ๋๋ค.
์ฆ ๊ตฌ์กฐ๋ ๋๋ต ์ด๋ ๊ฒ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
100.08์ → [500๊ฐ ์ฃผ๋ฌธ] ↔ [600๊ฐ ์ฃผ๋ฌธ] ↔ [900๊ฐ ์ฃผ๋ฌธ]
100.07์ → [100๊ฐ ์ฃผ๋ฌธ] ↔ [700๊ฐ ์ฃผ๋ฌธ] ↔ [200๊ฐ ์ฃผ๋ฌธ]
100.06์ → [1100๊ฐ ์ฃผ๋ฌธ] ↔ [400๊ฐ ์ฃผ๋ฌธ] ↔ [300๊ฐ ์ฃผ๋ฌธ] ↔ [200๊ฐ ์ฃผ๋ฌธ]
1. ์๋ก์ด ๋งค์ ์ฃผ๋ฌธ์ ๋ฃ์ ๋
๊ทธ๋ฆผ์ โ ๋ฒ์ ๋๋ค.
์๋ก์ด ์ฃผ๋ฌธ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ค์ด์๋ค๊ณ ํด๋ณผ๊ฒ์.
๊ฐ๊ฒฉ: 100.07
์๋: 200
๋จผ์ limitMap์์ ๊ฐ๊ฒฉ์ด 100.07์ธ PriceLevel์ ๋ฐ๋ก ์ฐพ์ต๋๋ค.
๊ทธ๋ค์ ๊ทธ ๊ฐ๊ฒฉ์ ์ฃผ๋ฌธ ๋ชฉ๋ก ๋งจ ๋ค์ ์ ์ฃผ๋ฌธ์ ๋ถ์ ๋๋ค.
๊ธฐ์กด
[100๊ฐ] ↔ [700๊ฐ]
์ถ๊ฐ ํ
[100๊ฐ] ↔ [700๊ฐ] ↔ [200๊ฐ]
์ฌ๊ธฐ์ tail์ ๋ง์ง๋ง ์ฃผ๋ฌธ์ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ชฉ๋ก ์ ์ฒด๋ฅผ ์ํํ์ง ์๊ณ ๋ฐ๋ก ๋ค์ ๋ถ์ผ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ฃผ๋ฌธ ์ถ๊ฐ๊ฐ ๋น ๋ฆ ๋๋ค.
2. ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋์ ๋
๊ทธ๋ฆผ์ โก๋ฒ์ ๋๋ค.
100.08 ๊ฐ๊ฒฉ์ 500๊ฐ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋์๋ค๊ณ ํด๋ณผ๊ฒ์.
[500๊ฐ] ↔ [600๊ฐ] ↔ [900๊ฐ]
500๊ฐ ์ฃผ๋ฌธ์ ๋งจ ์์ ์๊ณ , head๊ฐ ์ด ์ฃผ๋ฌธ์ ๊ฐ๋ฆฌํค๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฒด๊ฒฐ ์์ง์ ์ฒซ ๋ฒ์งธ ์ฃผ๋ฌธ์ ๋ฐ๋ก ๊บผ๋ผ ์ ์์ต๋๋ค.
500๊ฐ ์ฃผ๋ฌธ์ด ์์ ํ ์ฒด๊ฒฐ๋๋ฉด ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค.
์ ๊ฑฐ ์
[500๊ฐ] ↔ [600๊ฐ] ↔ [900๊ฐ]
์ ๊ฑฐ ํ
[600๊ฐ] ↔ [900๊ฐ]
๊ทธ๋ฆฌ๊ณ head๋ ์ด์ 600๊ฐ ์ฃผ๋ฌธ์ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ๋ ์ฒซ ๋ฒ์งธ ์ฃผ๋ฌธ์ ๋ฐ๋ก ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
3. ์ฃผ๋ฌธ์ ์ทจ์ํ ๋
๊ทธ๋ฆผ์ โข๋ฒ์ ๋๋ค.
๋ค์ ์ฃผ๋ฌธ์ ์ทจ์ํ๋ค๊ณ ํด๋ณผ๊ฒ์.
๊ฐ๊ฒฉ: 100.06
์๋: 400
๋ฌธ์ ๋ ์ด ์ฃผ๋ฌธ์ด ๋ชฉ๋ก ์ค๊ฐ์ ์๋ค๋ ์ ์ ๋๋ค.
[1100๊ฐ] ↔ [400๊ฐ] ↔ [300๊ฐ] ↔ [200๊ฐ]
๋จ์ํ ๊ตฌ์กฐ๋ผ๋ฉด 1100๊ฐ ์ฃผ๋ฌธ๋ถํฐ ํ๋์ฉ ํ์ธํ๋ฉฐ 400๊ฐ ์ฃผ๋ฌธ์ ์ฐพ์์ผ ํฉ๋๋ค.
ํ์ง๋ง ๊ทธ๋ฆผ์์๋ ๋ณ๋์ orderMap์ ์ฌ์ฉํฉ๋๋ค.
HashMap<OrderID, Order> orderMap
์ด๊ณณ์๋ ์ฃผ๋ฌธ ID์ ์ค์ ์ฃผ๋ฌธ ๊ฐ์ฒด๊ฐ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
์ฃผ๋ฌธ ID → ํด๋น ์ฃผ๋ฌธ์ ์์น
๋ฐ๋ผ์ ์ทจ์ ๊ณผ์ ์ ๋ ๋จ๊ณ์ ๋๋ค.
Step 1: ์ฃผ๋ฌธ ID๋ก ์ฃผ๋ฌธ์ ๋ฐ๋ก ์ฐพ๊ธฐ
orderMap.get(orderId)
์ด๋ ๊ฒ ํ๋ฉด 400๊ฐ ์ฃผ๋ฌธ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์ฐพ์ต๋๋ค.
Step 2: ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ํด๋น ์ฃผ๋ฌธ ์ ๊ฑฐ
400๊ฐ ์ฃผ๋ฌธ์ ์ด์ ์ฃผ๋ฌธ๊ณผ ๋ค์ ์ฃผ๋ฌธ์ ์๊ณ ์์ต๋๋ค.
์ด์ ์ฃผ๋ฌธ: 1100๊ฐ
ํ์ฌ ์ฃผ๋ฌธ: 400๊ฐ
๋ค์ ์ฃผ๋ฌธ: 300๊ฐ
๋ฐ๋ผ์ 400๊ฐ ์ฃผ๋ฌธ์ ๋นผ๊ณ , 1100๊ฐ ์ฃผ๋ฌธ๊ณผ 300๊ฐ ์ฃผ๋ฌธ์ ๋ฐ๋ก ์ฐ๊ฒฐํฉ๋๋ค.
์ ๊ฑฐ ์
[1100๊ฐ] ↔ [400๊ฐ] ↔ [300๊ฐ]
์ ๊ฑฐ ํ
[1100๊ฐ] ↔ [300๊ฐ]
๋ชฉ๋ก ์ ์ฒด๋ฅผ ๊ฒ์ํ์ง ์์๋ ๋ฉ๋๋ค.
์ DoubleLinkedList๋ฅผ ์ฌ์ฉํ ๊น?
๊ฐ ์ฃผ๋ฌธ์ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
before: ์ด์ ์ฃผ๋ฌธ
after: ๋ค์ ์ฃผ๋ฌธ
๊ทธ๋์ ์ค๊ฐ ์ฃผ๋ฌธ์ ์ญ์ ํ ๋ ์์ชฝ ์ฃผ๋ฌธ์ ๋ฐ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์๋ค๋ฉด ์ด์ ๋ ธ๋๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฒ์๋ถํฐ ํ์ํด์ผ ํ ์ ์์ง๋ง, ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ด์ ๋ ธ๋์ ๋ค์ ๋ ธ๋๋ฅผ ๋ ๋ค ์๊ณ ์์ต๋๋ค.
์ O(1)์ด๋ผ๊ณ ํ๋์?
O(1)์ ์ฃผ๋ฌธ์ด 100๊ฐ๋ 100๋ง ๊ฐ๋ , ์ฒ๋ฆฌ์ ํ์ํ ํต์ฌ ๋จ๊ณ ์๊ฐ ๊ฑฐ์ ์ผ์ ํ๋ค๋ ๋ป์ ๋๋ค.
๊ฐ ์์ ์ ๋ค์์ฒ๋ผ ์ฒ๋ฆฌ๋ฉ๋๋ค.
| ๊ฐ๊ฒฉ ์ฐพ๊ธฐ | limitMap | ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ๋ก ์กฐํ |
| ์ ๊ท ์ฃผ๋ฌธ ์ถ๊ฐ | tail | ๋งจ ๋ค์ ๋ฐ๋ก ์ฐ๊ฒฐ |
| ์ฒด๊ฒฐ ์ฃผ๋ฌธ ์ ๊ฑฐ | head | ๋งจ ์ ์ฃผ๋ฌธ ๋ฐ๋ก ์ ๊ฑฐ |
| ์ทจ์ ์ฃผ๋ฌธ ์ฐพ๊ธฐ | orderMap | ์ฃผ๋ฌธ ID๋ก ๋ฐ๋ก ์กฐํ |
| ์ค๊ฐ ์ฃผ๋ฌธ ์ ๊ฑฐ | ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ | ์๋ค ๋ ธ๋๋ฅผ ๋ฐ๋ก ์ฐ๊ฒฐ |
์ฆ, ์ ์ฒด ์ฃผ๋ฌธ ๋ชฉ๋ก์ ๋งค๋ฒ ์ฒ์๋ถํฐ ํ์ง ์์ต๋๋ค.
ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด
์ด ์ค๊ณ๋ ๊ฐ๊ฒฉ์ผ๋ก ์ฃผ๋ฌธ ๊ทธ๋ฃน์ ๋ฐ๋ก ์ฐพ๊ณ , ์ฃผ๋ฌธ ID๋ก ๊ฐ๋ณ ์ฃผ๋ฌธ์ ๋ฐ๋ก ์ฐพ์ ๋ค, ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ์ฃผ๋ฌธ์ ๋น ๋ฅด๊ฒ ์ถ๊ฐ·์ฒด๊ฒฐ·์ญ์ ํ๋ ๊ตฌ์กฐ์ ๋๋ค.
๋ด ์ฐจํธ
๋ด ์ฐจํธ(candle chart)๋ ์์ฅ ๋ฐ์ดํฐ ํ๋ก์ธ์๊ฐ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ๋ ํธ๊ฐ ์ฐฝ๊ณผ ๋๋ถ์ด ์ฌ์ฉํ๋ ํต์ฌ ์๋ฃ ๊ตฌ์กฐ๋ค.
๋ด ์ฐจํธ๋ฅผ ๋ชจ๋ธ๋งํ๊ธฐ ์ํด์ Candlestick ํด๋์ค์ CandlestickChart ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. ํ๋์ ๋ด์ด ์ปค๋ฒํ๋ ์๊ฐ ๋ฒ์๊ฐ ๊ฒฝ๊ณผํ๋ฉด ๋ค์ ์ฃผ๊ธฐ(interval)๋ฅผ ์ปค๋ฒํ ์ Candlestick ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ CandlestickChart ๊ฐ์ฒด ๋ด๋ถ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค.
class Candlestick {
private long openPrice;
private long closePrice;
private long highPrice;
private long lowPrice;
private long volume;
private long timestamp;
private int interval;
}
class CandlestickChart {
private LinkedList<Candlestick> sticks;
}
๋ด ์ฐจํธ์์ ๋ง์ ์ข
๋ชฉ์ ๊ฐ๊ฒฉ ์ด๋ ฅ์ ๋ค์ํ ์๊ฐ ๊ฐ๊ฒฉ์ ์ฌ์ฉํด ์ถ์ ํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ด ํ์ํ๋ค. ์ด๋ป๊ฒ ์ต์ ํํ ์ ์์๊น? ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
1. ๋ฏธ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด ๋ ๋ง(ring) ๋ฒํผ์ ๋ด์ ๋ณด๊ดํ๋ฉด ์ ๊ฐ์ฒด ํ ๋น ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
2. ๋ฉ๋ชจ๋ฆฌ์ ๋๋ ๋ด์ ๊ฐ์๋ฅผ ์ ํํ๊ณ ๋๋จธ์ง๋ ๋์คํฌ์ ๋ณด๊ดํ๋ค.
์ด ์ต์ ํ ๋ฐฉ์์ ๋ํด์๋ “์์ฅ ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค” ์ ์์ ์์ธํ ์ดํด๋ณด๊ฒ ๋ค.
์์ฅ ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์๊ฐ ๋ถ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ ์์ฃผ ์นผ๋ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(๊ฐ๋ น KDB[15])์ ๋๋ค. ์์ฅ์ด ๋ง๊ฐ๋ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ ฅ ์ ์ง ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ ์ฅํ๋ค.
ํ๋ ๊ฑฐ๋์ ์์ธ ์ค๊ณ
์๋ง ๋ง์ ์ฌ๋์ด ๋๋ ์ ์์๊ฒ์ด๋ค. ์ผ๋ถ ๋ํ ๊ฑฐ๋์๋ ํ๋์ ๊ฑฐ๋ํ ์๋ฒ๋ก ๊ฑฐ์ ๋ชจ๋ ๊ฑธ ์ด์ํ๋ค.
๊ทน๋จ์ ์ด์ฌ ๋ณด์ด์ง๋ง ์ข์ ๊ตํ๋ค์ ์ป์ ์ ์๋ค.
ํ๋ ๊ฑฐ๋์ ์ฑ๋ฅ ~์ง์ฐ์๊ฐ = Sum(์ค์ ๊ฒฝ๋ก ์ปดํฌ๋ํธ ์คํ์๊ฐ)
์ง์ฐ์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ์
1. ์ค์ ๊ฒฝ๋ก ์คํ ์์ ์๋ฅผ ์ค์ด๊ฑฐ๋
2. ๊ฐ ์์ ์ ์์์๊ฐ์ ์ค์ด๋ ๊ฒ์ด๋ค. a. ๋คํธ์ํฌ ๋ฐ ๋์คํฌ ์ฌ์ฉ๋ ๊ฒฝ๊ฐ b. ๊ฐ์์ ์คํ ์๊ฐ ๊ฒฝ๊ฐ
์ค์ ๋งค๋งค ๊ฒฝ๋ก์๋ ๋ค์ ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋๋ค. ๊ฒ์ดํธ ์จ์ด -> ์ฃผ๋ฌธ ๊ด๋ฆฌ์ -> ์ํ์ -> ์ฒด๊ฒฐ์์ง
์ค์ ๊ฒฝ๋ก์ ๋ฐ๋์ ํ์ํ ์์๋ง ๋๋ค. ๋ก๊น ๋ ์ฌ์ง์ด ๋บ๋ค.
๊ฐ ์์ ์ ์์์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ์ผ๋ก, ๊ฐ๋ต์ ์ค๊ณ์์์ ํต์ฌ ๊ฒฝ๋ก์ ๊ตฌ์ฑ์์๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด์ ์ฐ๊ฒฐ๋ ๊ฐ๋ณ ์๋ฒ์์ ์คํ๋๋ค๊ณ ์ฌ์ ํ๋ค. ์๋ณต ๋คํธ์ํฌ ์ง์ฐ์๊ฐ์ ์ฝ 500micro sec์ด๋ค.
ํต์ ํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ผ๋ฉด ์ด ๋คํธ์ํฌ ์ง์ฐ์๊ฐ์ ํ ์๋ฆฟ์ ๋ฐ๋ฆฌ์ด ๊น์ง ๋์ด๋ ๊ฒ์ด๋ค.
์ํ์๋ ์ด๋ฒคํธ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ์ ์ฅ์์์ผ๋ก, ์์ฐจ์ ์ฐ๊ธฐ ์ฑ๋ฅ ์ด์ ์ ํ์ฉํด์ ํจ์จ ์ค๊ณ๋ฅผ ํด๋ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ์๊ฐ์ ์ฌ์ ํ ์์ญ ๋ฐ๋ฆฌ์ด ๋จ์์ผ ๊ฒ์ด๋ค. [16]
๋ฐ๋ผ์, ๋คํธ์ํฌ ๋ฐ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ์๊ฐ์ ๋ชจ๋ ๊ณ ๋ คํ๋ฉด ์ด end-to-end ์ง์ฐ์๊ฐ์ ์์ญ ๋ฐ๋ฆฌ์ด์ ๋ฌํ๋ค.
๊ฒฝ์์ ์์ ๋๊ฐ๊ธฐ ์ํด์ ๊ฐ ๊ฑฐ๋์๋ ์ฃผ๋ก ๋คํธ์ํฌ ๋ฐ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ ์๊ฐ์ ์ค์ด๊ฑฐ๋ ์์ ๋ ๋ฐฉ์์ ํตํด์ ์์ญ ๋ง์ดํฌ๋ก ์ด๋ก ์ค์๋ค.
๊ทธ ์ค๊ณ์์ ์์ฒด๋ ๋ชจ๋ ๊ฑธ ๋์ผ ์๋ฒ์ ๋ฐฐ์นํด์ ๋คํธ์ํฌ๋ฅผ ํตํ๋ ๊ตฌ๊ฐ์ ์์ ์์ ๋ ๊ฒ์ด๋ค.
๊ฐ์ ์๋ฒ ๋ด์ ์ปดํฌ๋ํธ๊ฐ ํต์ ์ ์ด๋ฒคํธ ์ ์ฅ์ mmapp[17] ์ ํตํ๋ค.

1. ๋ฌธ๋งฅ ์ ํ, ์ฆ ์ปจํ
์คํธ ์ค์์น(context switch)๊ฐ ์๋ค.[18] CPU 1์ด ์ฃผ๋ฌธ ๊ด๋ฆฌ์์ ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ ์ฒ๋ฆฌ์ ์จ์ ํ ํ ๋น๋๋ค.
2. ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ์ค๋ ๋๊ฐ ํ๋๋ฟ์ด๋ผ์ ๋ฝ์ ์ฌ์ฉํ ํ์๊ฐ ์๊ณ ์ ๊ธ ๊ฒฝํฉ(lock contention)๋ ์๋ค.
์ด ๋ ๊ฐ์ง ๋ชจ๋ p99 ์ง์ฐ ์๊ฐ ๊ฒฝ๊ฐ์ ๊ธฐ์ฌํ๋ค.
CPU๋ฅผ ๊ณ ์ ํ๋ ๋ฐฉ์์ ๋จ์ ์ ์ฝ๋ฉ์ด ๋ ๋ณต์กํด์ง๋ค๋ ๊ฒ์ด๋ค. ์์ง๋์ด๋ ๊ฐ ์์
์ด ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ ์ค๋ ๋๋ฅผ ๋๋ฌด ์ค๋ ์ ์ ํ์ง ์๋๋ก ๊ฐ ์์
์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ์คํ๊ฒ ๋ถ์ํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ ์์
์ ์ ๋ ์คํํ์ง ๋ชปํ ์ ์๋ค.
๋ค์์ผ๋ก, ๊ทธ๋ฆผ 13.15 ์ค์์ ‘mmap’์ด๋ผ๊ณ ํ์๋ ๊ธด ์ง์ฌ๊ฐํ ์ปดํฌ๋ํธ์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด์. ‘mmap’์ ํ์ผ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํํ๋ mmap(2)๋ผ๋ ์ด๋ฆ์ POSIX ํธํ UNIX ์์คํ
์ฝ(system call)์ ์ผ์ปซ๋๋ค.
mmap(2)์ ํ๋ก์ธ์ค ๊ฐ ๊ณ ์ฑ๋ฅ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋งคํํ ํ์ผ์ด /dev/shm์ ์์ ๋ ์ฑ๋ฅ ์ด์ ์ ๋์ฑ ์ปค์ง๋ค. /dev/shm์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ํ์ผ ์์คํ
์ด๋ค. dev/shm์ ์์นํ ํ์ผ์ mmap(2)์ ์ํํ๋ฉด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํด๋ ๋์คํฌ I/O๋ ๋ฐ์ํ์ง ์๋๋ค.
์ต์ ๊ฑฐ๋์๋ ์ด๋ฅผ ํ์ฉํ์ฌ ์ค์ ๊ฒฝ๋ก์์ ๊ฐ๋ฅํ ํ ๋์คํฌ ์ ๊ทผ์ด ์ผ์ด๋์ง ์๋๋ก ํ๋ค. ์๋ฒ์์ mmap(2)๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๊ฒฝ๋ก์ ๋์ธ ๊ตฌ์ฑ ์์๊ฐ ์๋ก ํต์ ํ ๋ ์ด์ฉํ ๋ฉ์์ง ๋ฒ์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค. ์ด ํต์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ๋ ๋์คํฌ์ ์ ๊ทผํ๋ ์ผ์ ์์ผ๋ฉฐ, ๋ฉ์์ง ์ ์ก์ ๋ง์ดํฌ๋ก์ด ๋ฏธ๋ง์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ ๊ฒ mmap(2)์ ํ์ฉํ์ฌ ๋ง๋ ์ด๋ฒคํธ ์ ์ฅ์์ ๋ค์์ ์ค๋ช
ํ ์ด๋ฒคํธ ์์ฑ ์ค๊ณ ํจ๋ฌ๋ค์์ ๊ฒฐํฉํ๋ฉด ๊ฑฐ๋์๋ ์๋ฒ์ ์ง์ฐ ์๊ฐ์ด ๋ฎ์ ๋ง์ดํฌ๋ก์๋น์ค๋ค์ ๊ตฌ์ถํ ์ ์๊ฒ ๋๋ค.
์ฐ์ ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ๋ถํฐ ์ดํด๋ณด์. ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ๋ ํฅ๋ฏธ๋ก์ด ๊ฐ๋
์ด๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ์ ์ฃผ๋ ์์
์คํ ๋ฉ์ปค๋์ฆ์ while ์ํ๋ฌธ์ ํตํด ์คํํ ์์
์ ๊ณ์ ํด๋ง(polling)ํ๋ ๊ฒ์ด๋ค. ์๊ฒฉํ ์ง์ฐ ์๊ฐ ์๊ฑด์ ๋ง์กฑํ๋ ค๋ฉด ๋ชฉ์ ๋ฌ์ฑ์ ๊ฐ์ฅ ์ค์ํ ์์
๋ง ์ด ์ํ๋ฌธ ์์์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์ด ๋ฉ์ปค๋์ฆ์ ๋ชฉํ๋ ๊ฐ ๊ตฌ์ฑ ์์์ ์คํ ์๊ฐ์ ์ค์ฌ ์ ์ฒด์ ์ธ ์คํ ์๊ฐ์ด ์์ธก ๊ฐ๋ฅํ๋๋ก(๊ฐ๋ น p99 ์ง์ฐ ์๊ฐ์ ๋ฎ์ถ์ด์) ๋ณด์ฅํ๋ ๊ฒ์ด๋ค. ๋ค์ด์ด๊ทธ๋จ์ ๊ฐ ์์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ํ๋ธ๋ค. ์ปดํฌ๋ํธ๋ ์๋ฒ์ ํ๋ก์ธ์ค์ด๋ค. CPU ํจ์จ์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ(์ฃผ ์ฒ๋ฆฌ ๋ฃจํ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค)๋ ๋จ์ผ ์ค๋ ๋๋ก ๊ตฌํํ๋ฉฐ, ํน์ CPU ์ฝ์ด์ ๊ณ ์ ์ํจ๋ค. ์ฃผ๋ฌธ ๊ด๋ฆฌ์๋ฅผ ์๋ก ๋ค๋ฉด ๊ทธ๋ฆผ 13.16์ ๋ค์ด์ด๊ทธ๋จ๊ณผ ๊ฐ๋ค.
์ด ๋ค์ด์ด๊ทธ๋จ์์ ์ฃผ๋ฌธ ๊ด๋ฆฌ์์ ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ๋ CPU 1์ ๊ณ ์ ๋์ด ์๋ค. ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ๋ฅผ CPU์ ๊ณ ์ ํ๋ฉด ์๋นํ ์ด์ ์ด ์๋ค:
์ด์ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์. ์ข
์ ์ ์ดํด๋ณธ ๊ฐ๋ต์ ์ค๊ณ์์์๋ ํต์ฌ ๊ฒฝ๋ก์ ๊ตฌ์ฑ์์๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๊ฐ๋ณ ์๋ฒ์์ ์คํ๋๋ค๊ณ ๊ฐ์ ํ์๋ค. ์๋ณต ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ์ฝ 500๋ง์ดํฌ๋ก์ด๋ค. ํต์ฌ ๊ฒฝ๋ก์ ๋คํธ์ํฌ๋ฅผ ํตํด ํต์ ํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ผ๋ฉด ์ด ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ํ ์๋ฆฟ์ ๋ฐ๋ฆฌ์ด๊น์ง ๋์ด๋๋ค. ๋ํ ์ํ์๋ ์ด๋ฒคํธ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ์ด๋ฒคํธ ์ ์ฅ์๋ค. ์์ฐจ์ ์ฐ๊ธฐ์ ์ฑ๋ฅ ์ด์ ์ ํ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์ค๊ณํ๋ค ํด๋ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ ์๊ฐ์ ์ฌ์ ํ ์์ญ ๋ฐ๋ฆฌ์ด ๋จ์๋ค. ๋คํธ์ํฌ ๋ฐ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ ์๊ฐ์ ๋ํด ์์ธํ ์๊ณ ์ถ๋ค๋ฉด [16]์ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
๋คํธ์ํฌ ๋ฐ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ ์๊ฐ์ ๋ชจ๋ ๊ณ ๋ คํ๋ฉด ์ด ๋จ๋๋จ(end-to-end) ์ง์ฐ ์๊ฐ์ ์์ญ ๋ฐ๋ฆฌ์ด์ ๋ฌํ๋ค. ๊ฑฐ๋์ ์ด์ฐฝ๊ธฐ์๋ ์ด ์ ๋๋ ๋๋ผ์ด ๊ฐ์ด์์ง๋ง, ๋ชจ๋ ๊ฑฐ๋์๊ฐ ์ง์ฐ ์๊ฐ์ ๊ทน๋๋ก ๋ฎ์ถ๋ ๊ฒฝ์์ ๋์๋ฉด์ ๋ ์ด์ ์ถฉ๋ถํ์ง ์๊ฒ ๋์๋ค.
๊ฒฝ์์์ ์์ ๋๊ฐ๊ธฐ ์ํด ๊ฑฐ๋์๋ ์ฃผ๋ก ๋คํธ์ํฌ ๋ฐ ๋์คํฌ ์ก์ธ์ค ์ง์ฐ ์๊ฐ์ ์ค์ด๊ฑฐ๋ ์์ ๋ ๋ฐฉ์์ ํตํด ์ค์ ๊ฒฝ๋ก์ ๋จ๋๋จ ์ง์ฐ ์๊ฐ์ ์์ญ ๋ง์ดํฌ๋ก์ด๋ก ์ค์๋ค. ์ค๋ ์๊ฐ ๋์ ๊ฒ์ฆ๋ ๊ทธ ์ค๊ณ์์ ์์ฒด๋, ๋ชจ๋ ๊ฒ์ ๋์ผํ ์๋ฒ์ ๋ฐฐ์นํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํ๋ ๊ตฌ๊ฐ์ ์์ ๋ ๊ฒ์ด๋ค. ๊ฐ์ ์๋ฒ ๋ด ์ปดํฌ๋ํธ ๊ฐ ํต์ ์ ์ด๋ฒคํธ ์ ์ฅ์์ธ mmap[17]์ ํตํ๋ค(์์ธํ ๋ด์ฉ์ ๊ณง ์ค๋ช
ํ๊ฒ ๋ค).
๊ทธ๋ฆผ 13.15๋ ๋ชจ๋ ๊ตฌ์ฑ์์๋ฅผ ๋จ์ผ ์๋ฒ์ ๋ฐฐ์นํ์ฌ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ๋ฌ์ฑํ๋ ์ค๊ณ์์ด๋ค.
์ด๋ฒคํธ ์์ฑ์ ๊ฐ๋
์ ์ดํดํ๊ธฐ ์ด๋ ต์ง ์๋ค. ์ ํต์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์งํ๋ค. ์ด๋ฐ ๊ตฌ์กฐ์์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ์ ์ถ์ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ฌ ์ํ๋ง ์ ์งํ ๋ฟ, ํ์ฌ ์ํ๋ฅผ ์ด๋ํ ์ด๋ฒคํธ์ ๊ธฐ๋ก์ ์๋ค.


์ด๋ฒคํธ ์์ฑ ์ํคํ ์ฒ๋ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๋ ๋์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ชจ๋ ์ด๋ฒคํธ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ(immutable) ๋ก๊ทธ๋ฅผ ์ ์งํ๋ค. ์ด ๋ก๊ทธ๋ฅผ ์ ๋์ ์ง์ค์ ์์ฒ์ผ๋ก ์ผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ 13.17์ ๋ ์ํคํ ์ฒ์ ์ฐจ์ด์ ์ ๋ณด์ฌ ์ค๋ค.

์ผ์ชฝ์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ค. ์ฃผ๋ฌธ ์ํ๋ฅผ ์ถ์ ํ์ง๋ง ํ์ฌ ์ํ์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ ํฌํจํ์ง ์๋๋ค. ์ค๋ฅธ์ชฝ์ ์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ๋ฅผ ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ๋ค. ์ฃผ๋ฌธ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์ถ์ ํ๋ฏ๋ก, ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ์์๋๋ก ์ฌ์ํ๋ฉด ์ฃผ๋ฌธ ์ํ๋ฅผ ๋ณต๊ตฌํ ์ ์๋ค.


1๋ฒ ์ด๋ฏธ์ง: ์ฃผ๋ฌธ ๊ด๋ฆฌ์์ ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ ์ค๋ ๋
์ด ๊ทธ๋ฆผ์ ์ฆ๊ถ ์ฃผ๋ฌธ์ด ์ฃผ๋ฌธ ๊ด๋ฆฌ์ ๋ด๋ถ์์ ์ด๋ค ์ค๋ ๋๋ฅผ ๊ฑฐ์ณ ์ฒ๋ฆฌ๋๋์ง ๋ณด์ฌ์ค๋๋ค.
์ ์ฒด ํ๋ฆ์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ธ๋ถ์์ ์ฃผ๋ฌธ์ด ๋ค์ด์ค๋ฉด ๋คํธ์ํฌ ์ค๋ ๋๊ฐ ์ฃผ๋ฌธ์ ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ฆฌ ์ค๋ ๋์ ๋๊ธฐ๊ณ , ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ก ์ฃผ๋ฌธ ์ํ๋ฅผ ๊ฐฑ์ ํ ๋ค ๋ค์ ๋คํธ์ํฌ ์ค๋ ๋๋ฅผ ํตํด ๋ค์ ์์คํ ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
โ ์ฃผ๋ฌธ์ด ์์คํ ์ผ๋ก ๋ค์ด์ด
๋งจ ์์ ์ฃผ๋ฌธ์ ์ธ๋ถ์์ ๋ค์ด์ค๋ ์ฃผ๋ฌธ ์์ฒญ์ ๋๋ค.
์๋ฅผ ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฃผ๋ฌธ์ ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์ผ์ฑ์ ์ 10์ฃผ๋ฅผ 70,000์์ ๋งค์ํด ์ฃผ์ธ์.
์ด ์์ฒญ์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ฃผ๋ฌธ ๊ด๋ฆฌ์์๊ฒ ๋์ฐฉํฉ๋๋ค.
โก ์ ๋ ฅ ์ค๋ ๋ / Netloop๊ฐ ์ฃผ๋ฌธ์ ๋ฐ์
์ฒซ ๋ฒ์งธ๋ก ์ฃผ๋ฌธ์ ๋ฐ๋ ์ปดํฌ๋ํธ๊ฐ ์ ๋ ฅ ์ค๋ ๋ ๋๋ Netloop์ ๋๋ค.
Netloop๋ ์ฝ๊ฒ ๋งํ๋ฉด ๋ค์ ์ญํ ์ ํฉ๋๋ค.
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๊ฐ์ํจ
- ์๋ก์ด ์ฃผ๋ฌธ ๋ฉ์์ง๊ฐ ๋์ฐฉํ๋์ง ํ์ธํจ
- ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
- ์ฝ์ ์ฃผ๋ฌธ์ ์ค์ ์ ๋ฌด ์ฒ๋ฆฌ ์ค๋ ๋์ ๋๊น
์ฆ, ์ ๋ ฅ ์ค๋ ๋๋ ์ฃผ๋ฌธ ๋ด์ฉ์ ๊น๊ฒ ํ๋จํ๋ ์ญํ ๋ณด๋ค ํ๋ฐฐ ์ ์ ์ฐฝ๊ตฌ์ ๊ฐ๊น์ต๋๋ค.
ํ๋ฐฐ ์ฐฝ๊ตฌ๊ฐ ๋ฌผ๊ฑด์ ๋ฐ์ ๋ค ์ค์ ๋ถ๋ฅ ๋ด๋น์์๊ฒ ๋๊ธฐ๋ ๊ฒ์ฒ๋ผ, ์ ๋ ฅ ์ค๋ ๋๋ ์ฃผ๋ฌธ์ ๋ฐ์ ๋ค ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋์ ์ ๋ฌํฉ๋๋ค.
โข ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํจ
์ ์ ์์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ์ฃผ๋ฌธ ๊ด๋ฆฌ์์ ํต์ฌ ์ฒ๋ฆฌ ๋ถ๋ถ์ ๋๋ค.
์ด ์ค๋ ๋๋ ์ ๋ ฅ๋ฐ์ ์ฃผ๋ฌธ์ ํ๋์ฉ ์์๋๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ฃผ๋ฌธ ํ์์ด ์ฌ๋ฐ๋ฅธ์ง ๊ฒ์ฌ
- ์ฃผ๋ฌธ ๊ฐ๋ฅ ์๋์ธ์ง ๊ฒ์ฌ
- ์ฃผ๋ฌธ ๋ฒํธ ์์ฑ
- ์ ๊ท ์ฃผ๋ฌธ ์ํ ์ ์ฅ
- ์ฒด๊ฒฐ ๋ฉ์์ง ์ฒ๋ฆฌ
- ์ทจ์·์ ์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ์ํ ๋ณ๊ฒฝ
- ๋ค์ ์์คํ ์ ์ ๋ฌํ ๋ฉ์์ง ์์ฑ
๊ทธ๋ฆผ ์์ ์ธ๋ก๋ก ์์ธ ์์ ์นธ๋ค์ ์ฒ๋ฆฌ ๋๊ธฐ ์ค์ธ ์์ ์ด๋ ์ด๋ฒคํธ๊ฐ ์์๋๋ก ์์ด๋ ๋ชจ์ต์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
์ฆ, ์ฃผ๋ฌธ๋ค์ด ์ค์ ์ ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ์์์๋ถํฐ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ์ ๋๋ค.
โฃ ์ฃผ๋ฌธ ์ํ๋ฅผ ๊ฐฑ์ ํจ
์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ฉด ์ค๋ฅธ์ชฝ์ ์ฃผ๋ฌธ ์ํ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ์ํ๋ ๋ค์์ฒ๋ผ ๋ฐ๋ ์ ์์ต๋๋ค.
์ ๊ท ์ฃผ๋ฌธ ์ ์
→ ๊ฑฐ๋์ ์ ์ก
→ ์ผ๋ถ ์ฒด๊ฒฐ
→ ์ ๋ ์ฒด๊ฒฐ
๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋ ์๋ ์์ต๋๋ค.
์ ๊ท ์ฃผ๋ฌธ ์ ์
→ ์ทจ์ ์์ฒญ
→ ์ทจ์ ์๋ฃ
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ๋จ์ํ ์ฃผ๋ฌธ์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ, ํ์ฌ ์ฃผ๋ฌธ์ด ์ด๋ค ์ํ์ธ์ง ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ๋๋ค.
์ฃผ๋ฌธ ์ํ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ฃผ๋ฌธ ๋ฒํธ
- ์ข ๋ชฉ
- ๋งค์ ๋๋ ๋งค๋
- ์ฃผ๋ฌธ ์๋
- ์ฃผ๋ฌธ ๊ฐ๊ฒฉ
- ์ฒด๊ฒฐ ์๋
- ๋ฏธ์ฒด๊ฒฐ ์๋
- ํ์ฌ ์ฃผ๋ฌธ ์ํ
- ๋ง์ง๋ง ๋ณ๊ฒฝ ์๊ฐ
โค ์ค๋ ๋๋ฅผ ํน์ CPU ์ฝ์ด์ ๊ณ ์ ํจ
๊ทธ๋ฆผ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ 1๋ฒ CPU ์ฝ์ด์ ๊ณ ์ ๋์ด ์์ต๋๋ค.
์ด๊ฒ์ CPU affinity, ์ฆ CPU ์ฝ์ด ๊ณ ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด์์ฒด์ ๋ ์ค๋ ๋๋ฅผ ์ฌ๋ฌ CPU ์ฝ์ด ์ฌ์ด์์ ์ด๋์ํฌ ์ ์์ต๋๋ค.
์ฒ์์๋ 1๋ฒ ์ฝ์ด์์ ์คํ
→ ์ ์ ํ 3๋ฒ ์ฝ์ด๋ก ์ด๋
→ ๋ค์ 5๋ฒ ์ฝ์ด๋ก ์ด๋
ํ์ง๋ง ์ด๊ณ ์ ์ฃผ๋ฌธ ์์คํ ์์๋ ์ด๋ฐ ์ด๋์ด ์ฑ๋ฅ์ ๋ถ์์ ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ค๋ ๋๊ฐ ๋ค๋ฅธ CPU ์ฝ์ด๋ก ์ด๋ํ๋ฉด ๊ธฐ์กด ์ฝ์ด์ ์ ์ฅ๋์ด ์๋ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ถ๋ฌ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ค๋ ๋๋ฅผ 1๋ฒ ์ฝ์ด์ ๊ณ ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์์ต๋๋ค.
- CPU ์บ์๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ
- ์ค๋ ๋ ์ด๋ ๋น์ฉ ๊ฐ์
- ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ง์ฐ์๊ฐ ๊ฐ์
- ์ฒ๋ฆฌ ์๊ฐ์ด ๋ ์ผ์ ํด์ง
- ๊ฐ์๊ธฐ ๋๋ ค์ง๋ ํ์ ๊ฐ์
์ฆ, ํ๊ท ์๋๋ง ๋น ๋ฅด๊ฒ ํ๋ ๊ฒ์ด ์๋๋ผ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๋๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
์ฆ๊ถ ์์คํ ์์๋ ํ๊ท 1ms๋ณด๋ค๋ ๋ค์์ฒ๋ผ ๋ค์ญ๋ ์ญํ ์๋ต์ด ๋ ์ํํ ์ ์์ต๋๋ค.
0.2ms → 0.3ms → 0.2ms → ๊ฐ์๊ธฐ 20ms
CPU ์ฝ์ด ๊ณ ์ ์ ์ด๋ฐ ์ง์ฐ์๊ฐ์ ๊ธ๊ฒฉํ ์ฆ๊ฐ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋๋ค.
โฅ ์ฒ๋ฆฌ๋ ์ฃผ๋ฌธ์ ๋ค์ Netloop๋ก ์ ๋ฌํจ
์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋๋ด๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์๋์ชฝ์ Netloop์ ์ ๋ฌํฉ๋๋ค.
๊ทธ๋ฆผ์๋ ์๋์ชฝ๋ ์ ๋ ฅ ์ค๋ ๋/Netloop๋ผ๊ณ ์ ํ ์์ง๋ง, ํ๋ฆ์์ผ๋ก๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ถ๋ก ๋ณด๋ด๋ ์ก์ ์ธก Netloop ๋๋ ๋คํธ์ํฌ ์ฒ๋ฆฌ ์์ญ์ผ๋ก ์ดํดํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ ์ ์์ต๋๋ค.
- ๊ฑฐ๋์๋ก ๋ณด๋ผ ์ ๊ท ์ฃผ๋ฌธ
- ์ฌ์ฉ์์๊ฒ ๋ณด๋ผ ์ฃผ๋ฌธ ์ ์ ๊ฒฐ๊ณผ
- ์ฒด๊ฒฐ ์์คํ ์ผ๋ก ๋ณด๋ผ ์ฃผ๋ฌธ ์ ๋ณด
- ๋ค๋ฅธ ๋ด๋ถ ์๋ฒ๋ก ๋ณด๋ผ ์ํ ๋ณ๊ฒฝ ์ด๋ฒคํธ
โฆ ์ฃผ๋ฌธ์ด ๋ค์ ์์คํ ์ผ๋ก ๋๊ฐ
๋ง์ง๋ง์ผ๋ก ์ฒ๋ฆฌ๋ ์ฃผ๋ฌธ ๋ฉ์์ง๊ฐ ์ฃผ๋ฌธ ๊ด๋ฆฌ์ ๋ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ธ๋ถ ์ฃผ๋ฌธ ๋์ฐฉ
→ ์
๋ ฅ Netloop๊ฐ ๋ฉ์์ง๋ฅผ ์์
→ ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ ์ค๋ ๋์ ์ ๋ฌ
→ ์ฃผ๋ฌธ ๊ฒ์ฆ ๋ฐ ์ํ ๋ณ๊ฒฝ
→ ์ฃผ๋ฌธ ์ํ ์ ์ฅ
→ ์ก์ Netloop๋ก ์ ๋ฌ
→ ๊ฑฐ๋์ ๋๋ ๋ค๋ฅธ ์์คํ
์ผ๋ก ์ ์ก
์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ํต์ฌ ์ด์
์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋ ํ๋๊ฐ ์ฃผ๋ฌธ ์ํ๋ฅผ ์์๋๋ก ๋ณ๊ฒฝํ๋ฉด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๊ฐ์ ์ฃผ๋ฌธ์ ์์ ํ๋ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ฒ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ถฉ๋์ด ์๊ธธ ์ ์์ต๋๋ค.
์ค๋ ๋ A: ์ฃผ๋ฌธ์ ์ฒด๊ฒฐ ์ํ๋ก ๋ณ๊ฒฝ
์ค๋ ๋ B: ๊ฐ์ ์ฃผ๋ฌธ์ ์ทจ์ ์ํ๋ก ๋ณ๊ฒฝ
๋ ์์ ์ด ๋์์ ์คํ๋๋ฉด ์ด๋ค ์ํ๊ฐ ์ต์ข ์ํ์ธ์ง ๊ผฌ์ผ ์ ์์ต๋๋ค.
๋ฐ๋ฉด ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๋ค์์ฒ๋ผ ๋ช ํํด์ง๋๋ค.
1๋ฒ: ์ฒด๊ฒฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ
2๋ฒ: ์ทจ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
๋ฐ๋ผ์ ์ด ๊ตฌ์กฐ๋ ๋ค์์ ๋ชฉํ๋ก ํฉ๋๋ค.
๋คํธ์ํฌ ์ ์ถ๋ ฅ๊ณผ ์ ๋ฌด ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ์ค์ํ ์ฃผ๋ฌธ ์ํ ๋ณ๊ฒฝ์ ํ๋์ ์ค๋ ๋์์ ์์๋๋ก ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ค.
2๋ฒ ์ด๋ฏธ์ง: ๋น ์ด๋ฒคํธ ์์ฑ๊ณผ ์ด๋ฒคํธ ์์ฑ ๋น๊ต
์ด ๊ทธ๋ฆผ์ ์ฃผ๋ฌธ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋น๊ตํฉ๋๋ค.
์ผ์ชฝ์ ๋น ์ด๋ฒคํธ ์์ฑ, ์ค๋ฅธ์ชฝ์ ์ด๋ฒคํธ ์์ฑ์ ๋๋ค.
์์์์๋ ์ฃผ๋ฌธ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ณํฉ๋๋ค.
Order V1: ์ ๊ท ์ฃผ๋ฌธ
→ OrderFilledEvent ๋ฐ์
→ Order V2: ์ฒด๊ฒฐ๋ ์ฃผ๋ฌธ
์ฆ, ์ฒ์์๋ ์ ๊ท ์ํ์๋ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ ์ด๋ฒคํธ๋ฅผ ๋ง๋ ์ฒด๊ฒฐ ์ํ๋ก ๋ณ๊ฒฝ๋ ์ํฉ์ ๋๋ค.
์ผ์ชฝ: ๋น ์ด๋ฒคํธ ์์ฑ ์ํคํ ์ฒ
๋น ์ด๋ฒคํธ ์์ฑ์์๋ ์ฃผ๋ฌธ ์ํ๋ฅผ ํ ์ด๋ธ์ ๊ฐ์ผ๋ก ์ง์ ์ ์ฅํฉ๋๋ค.
๊ทธ๋ฆผ์ ์ฃผ๋ฌธ ํ ์ด๋ธ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋์ด ์์ต๋๋ค.
| V1 | ์ ๊ท |
| V2 | ์ฒด๊ฒฐ |
์ฝ๊ฒ ๋งํ๋ฉด ์ฃผ๋ฌธ ์ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.
์ฃผ๋ฌธ์ด ์ฒ์ ์ ์๋๋ฉด ๋ค์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
V1 = ์ ๊ท
๋์ค์ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋๋ฉด ๋ค์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
V2 = ์ฒด๊ฒฐ
์ค์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๊ณผ๊ฑฐ ๋ฒ์ ์ ๋ชจ๋ ๋จ๊ธฐ์ง ์๊ณ ํ์ฌ ํ์ ์ง์ ์์ ํ๊ธฐ๋ ํฉ๋๋ค.
๋ณ๊ฒฝ ์ : ์ฃผ๋ฌธ ์ํ = ์ ๊ท
๋ณ๊ฒฝ ํ: ์ฃผ๋ฌธ ์ํ = ์ฒด๊ฒฐ
์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ํ์ฌ ์ํ์ธ ์ฒด๊ฒฐ๋ง ๋จ์ต๋๋ค.
๋น ์ด๋ฒคํธ ์์ฑ์ ๊ด์
๋น ์ด๋ฒคํธ ์์ฑ์ ๋ค์ ์ง๋ฌธ์ ๋ตํ๋ ๋ฐฉ์์ ๋๋ค.
์ด ์ฃผ๋ฌธ์ ์ง๊ธ ์ด๋ค ์ํ์ธ๊ฐ?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํ๋ฉด ํ์ฌ ์ฃผ๋ฌธ ์ํ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ ์์ต๋๋ค.
์ฃผ๋ฌธ๋ฒํธ: 12345
ํ์ฌ ์ํ: ์ฒด๊ฒฐ
ํ์ง๋ง ํ์ฌ ์ํ๊ฐ ์ ๊ทธ๋ ๊ฒ ๋์๋์ง ์์ธํ ๊ณผ์ ์ ๋ณ๋ ๋ก๊ทธ๊ฐ ์๋ค๋ฉด ์๊ธฐ ์ด๋ ต์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ์ํ๊ฐ ์ฒด๊ฒฐ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ง๋ง ๋ค์ ๋ด์ฉ์ ๋ฐ๋ก ์๊ธฐ ์ด๋ ต์ต๋๋ค.
- ์ธ์ ์ ๊ท ์ฃผ๋ฌธ์ด ์์ฑ๋์๋๊ฐ
- ์ด๋ค ์ฒด๊ฒฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋๊ฐ
- ๋๊ฐ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋๊ฐ
- ์ํ๊ฐ ์ด๋ค ์์๋ก ๋ฐ๋์๋๊ฐ
- ์ค๊ฐ์ ์ทจ์ ์์ฒญ์ด ์์๋๊ฐ
๋น ์ด๋ฒคํธ ์์ฑ์ ์ฅ์
๊ตฌ์กฐ๊ฐ ์๋์ ์ผ๋ก ๋จ์ํฉ๋๋ค.
- ํ์ฌ ์ํ ์กฐํ๊ฐ ์ฌ์
- ์ผ๋ฐ์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌํํ๊ธฐ ์ฌ์
- ๊ฐ๋ฐ์๊ฐ ์ดํดํ๊ธฐ ์ฌ์
- ์กฐํ ์ฟผ๋ฆฌ๊ฐ ๋จ์ํจ
- ์ ์ฅ ๋ฐ์ดํฐ๊ฐ ์๋์ ์ผ๋ก ์ ์
์๋ฅผ ๋ค์ด ๋ค์์ฒ๋ผ ๋ฐ๋ก ์กฐํํ ์ ์์ต๋๋ค.
SELECT order_status
FROM orders
WHERE order_id = 12345;
๋น ์ด๋ฒคํธ ์์ฑ์ ๋จ์
์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ์ ๊ณผ์ ์ ์ถ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๊ฐ ์๋ชป๋์ด ๋ค์๊ณผ ๊ฐ์ ์ํ๊ฐ ๋์๋ค๊ณ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
ํ์ฌ ์ฃผ๋ฌธ ์ํ = ์ทจ์ ์๋ฃ
ํ์ฌ ๊ฐ๋ง ์ ์ฅํ๋ค๋ฉด ๋ค์ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๋๊ฐ ์ทจ์ํ๋๊ฐ
- ๋ช ์์ ์ทจ์ ์์ฒญ์ด ๋ค์ด์๋๊ฐ
- ์ทจ์ ์ ์๋ ์ด๋ค ์ํ์๋๊ฐ
- ์ฒด๊ฒฐ ํ ์ทจ์๊ฐ ์๋ชป ์ ์ฉ๋ ๊ฒ์ ์๋๊ฐ
- ์ด๋ค ๋ฉ์์ง๊ฐ ์ํ ๋ณ๊ฒฝ์ ๋ฐ์์์ผฐ๋๊ฐ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ณ๋์ ์ด๋ ฅ ํ ์ด๋ธ์ด๋ ๊ฐ์ฌ ๋ก๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ค๋ฅธ์ชฝ: ์ด๋ฒคํธ ์์ฑ ์ํคํ ์ฒ
์ด๋ฒคํธ ์์ฑ์์๋ ์ฃผ๋ฌธ์ ํ์ฌ ์ํ๋ง ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ, ์ฃผ๋ฌธ์์ ๋ฐ์ํ ๋ชจ๋ ์ฌ๊ฑด์ ์๊ฐ ์์๋๋ก ์ ์ฅํฉ๋๋ค.
๊ทธ๋ฆผ์ ์ด๋ฒคํธ ๋ก๊ทธ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ก๋์ด ์์ต๋๋ค.
| 100 | NewOrderEvent |
| 101 | OrderFilledEvent |
๋ป์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
100๋ฒ ์ด๋ฒคํธ: ์ ๊ท ์ฃผ๋ฌธ์ด ๋ง๋ค์ด์ง
101๋ฒ ์ด๋ฒคํธ: ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋จ
ํ์ฌ ์ํ๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ์ด๋ฒคํธ๋ฅผ ์ฒ์๋ถํฐ ์์๋๋ก ์ ์ฉํฉ๋๋ค.
์ด๊ธฐ ์ํ: ์ฃผ๋ฌธ ์์
100๋ฒ NewOrderEvent ์ ์ฉ
→ ์ฃผ๋ฌธ ์ํ = ์ ๊ท
101๋ฒ OrderFilledEvent ์ ์ฉ
→ ์ฃผ๋ฌธ ์ํ = ์ฒด๊ฒฐ
์ต์ข ์ ์ผ๋ก Order V2, ์ฆ ์ฒด๊ฒฐ ์ํ๊ฐ ๋ง๋ค์ด์ง๋๋ค.
์ด๋ฒคํธ ์์ฑ์์๋ ์ด๋ฒคํธ๊ฐ ์๋ณธ ๋ฐ์ดํฐ์
์ผ๋ฐ์ ์ธ ๋ฐฉ์์์๋ ํ์ฌ ์ฃผ๋ฌธ ์ํ๊ฐ ๊ฐ์ฅ ์ค์ํ ์๋ณธ์ ๋๋ค.
ํ์ฌ ์ํ = ์ฒด๊ฒฐ
ํ์ง๋ง ์ด๋ฒคํธ ์์ฑ์์๋ ์ด๋ฒคํธ ๊ธฐ๋ก ์์ฒด๊ฐ ์๋ณธ์ ๋๋ค.
์ ๊ท ์ฃผ๋ฌธ ์ด๋ฒคํธ ๋ฐ์
→ ์ฃผ๋ฌธ ์ฒด๊ฒฐ ์ด๋ฒคํธ ๋ฐ์
ํ์ฌ ์ํ๋ ์ด ์ด๋ฒคํธ๋ค์ ๊ณ์ฐํ์ฌ ๋ง๋ค์ด๋ธ ๊ฒฐ๊ณผ์ ๋๋ค.
์ฝ๊ฒ ๋น์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ํ ์ ์ฅ
์ํ ํต์ฅ์ ํ์ฌ ์์ก๋ง ์ ์ด๋๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
ํ์ฌ ์์ก: 100๋ง ์
์ด๋ฒคํธ ์์ฑ
๋ชจ๋ ์ ์ถ๊ธ ๋ด์ญ์ ์ ์ฅํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
+300๋ง ์ ์
๊ธ
-100๋ง ์ ์ถ๊ธ
-100๋ง ์ ์ถ๊ธ
= ํ์ฌ ์์ก 100๋ง ์
์ด๋ฒคํธ ์์ฑ์์๋ ํ์ฌ ์์ก๋ณด๋ค๋ ์ ์ถ๊ธ ๋ด์ญ ์ ์ฒด๊ฐ ์๋ณธ ๋ฐ์ดํฐ์ ๋๋ค.
์ด๋ฒคํธ ์์ ๋ฒํธ์ ์๋ฏธ
๊ทธ๋ฆผ์ 100, 101์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ฅผ ๋ํ๋ ๋๋ค.
100: ์ ๊ท ์ฃผ๋ฌธ
101: ์ฃผ๋ฌธ ์ฒด๊ฒฐ
์์ ๋ฒํธ๊ฐ ์ค์ํ ์ด์ ๋ ์ด๋ฒคํธ ์ ์ฉ ์์๊ฐ ๋ฌ๋ผ์ง๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฌ๋ฐ๋ฅธ ์์:
์ ๊ท ์ฃผ๋ฌธ ์์ฑ
→ ์ฃผ๋ฌธ ์ฒด๊ฒฐ
์๋ชป๋ ์์:
์ฃผ๋ฌธ ์ฒด๊ฒฐ
→ ์ ๊ท ์ฃผ๋ฌธ ์์ฑ
์์ง ์กด์ฌํ์ง ์๋ ์ฃผ๋ฌธ์ ๋จผ์ ์ฒด๊ฒฐํ ์๋ ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ์์๋ฅผ ์ ํํ๊ฒ ๋ณด์ฅํด์ผ ํฉ๋๋ค.
์ด๋ฒคํธ๋ฅผ ๋ค์ ์ฌ์ํ ์ ์์
์ด๋ฒคํธ ์์ฑ์ ๊ฐ์ฅ ํฐ ํน์ง์ ์ ์ฅ๋ ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ฝ์ด ํ์ฌ ์ํ๋ฅผ ์ฌ๊ตฌ์ฑํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์ด๋ฅผ ์ด๋ฒคํธ ๋ฆฌํ๋ ์ด ๋๋ ์ฌ์์ด๋ผ๊ณ ํฉ๋๋ค.
NewOrderEvent
→ OrderFilledEvent
→ ํ์ฌ ์ํ: ์ฒด๊ฒฐ
์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ์ํ ํ ์ด๋ธ์ด ์์๋๋๋ผ๋ ์ด๋ฒคํธ ๋ก๊ทธ๊ฐ ๋จ์ ์๋ค๋ฉด ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ ์ฉํ์ฌ ์ํ๋ฅผ ๋ณต์ํ ์ ์์ต๋๋ค.
๋ ํน์ ์์ ์ ์ํ๋ ์ฌํํ ์ ์์ต๋๋ค.
100๋ฒ ์ด๋ฒคํธ๊น์ง๋ง ์ ์ฉ
์ฃผ๋ฌธ ์ํ = ์ ๊ท
101๋ฒ ์ด๋ฒคํธ๊น์ง ์ ์ฉ
์ฃผ๋ฌธ ์ํ = ์ฒด๊ฒฐ
๋ฐ๋ผ์ ๋ค์ ์ง๋ฌธ์๋ ๋ตํ ์ ์์ต๋๋ค.
10์ 30๋ถ ๋น์ ์ด ์ฃผ๋ฌธ์ ์ด๋ค ์ํ์๋๊ฐ?
์ด๋ฒคํธ ์์ฑ์ ์ฅ์
1. ๋ชจ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํ ์ ์์
์ด๋ค ์ฌ๊ฑด ๋๋ฌธ์ ์ฃผ๋ฌธ ์ํ๊ฐ ๋ฐ๋์๋์ง ์ ์ ์์ต๋๋ค.
์ ๊ท ์ฃผ๋ฌธ ์์ฑ
→ ์ฃผ๋ฌธ ์ ์
→ ๋ถ๋ถ ์ฒด๊ฒฐ
→ ์ถ๊ฐ ์ฒด๊ฒฐ
→ ์ ๋ ์ฒด๊ฒฐ
2. ๊ฐ์ฌ์ ์ฅ์ ๋ถ์์ ์ ๋ฆฌํจ
๊ธ์ต ์์คํ ์์๋ ๋ค์ ์ง๋ฌธ์ ์ ํํ ๋ตํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์ฃผ๋ฌธ์ด ์ธ์ ์์ฑ๋์๋๊ฐ
- ๊ฑฐ๋์์์ ์ด๋ค ์๋ต์ด ์๋๊ฐ
- ์ด๋ค ์์๋ก ์ํ๊ฐ ๋ฐ๋์๋๊ฐ
- ์ค๋ณต ์ฒด๊ฒฐ ์ฒ๋ฆฌ๊ฐ ์์๋๊ฐ
- ์๋ชป๋ ์ด๋ฒคํธ๊ฐ ์ ์ฉ๋์๋๊ฐ
์ด๋ฒคํธ ๋ก๊ทธ๊ฐ ์์ผ๋ฉด ์์ธ์ ์ถ์ ํ๊ธฐ ์ฝ์ต๋๋ค.
3. ๊ณผ๊ฑฐ ์ํ๋ฅผ ๋ณต์ํ ์ ์์
ํน์ ์์ ๊น์ง ์ด๋ฒคํธ๋ฅผ ์ฌ์ํ๋ฉด ๊ทธ ์์ ์ ์ฃผ๋ฌธ ์ํ๋ฅผ ์ ์ ์์ต๋๋ค.
4. ์๋ก์ด ๊ธฐ๋ฅ์ ๊ธฐ์กด ์ด๋ฒคํธ๋ฅผ ํ์ฉํ ์ ์์
์ฒ์์๋ ์ฃผ๋ฌธ ์ฒ๋ฆฌ๋ง ํ๋๋ผ๋, ๋์ค์ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ด์ฉํด ๋ค์ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ค์๊ฐ ์ฃผ๋ฌธ ๋ชจ๋ํฐ๋ง
- ๊ฑฐ๋ ํต๊ณ
- ์ด์ ๊ฑฐ๋ ํ์ง
- ๊ณ ๊ฐ ์๋ฆผ
- ๋ฆฌ์คํฌ ๊ด๋ฆฌ
- ๊ฐ์ฌ ์์คํ
- ๊ฑฐ๋ ์ฌํ ์์คํ
์ด๋ฒคํธ ์์ฑ์ ๋จ์
์ด๋ฒคํธ ์์ฑ์ด ํญ์ ๋ ์ข์ ๊ฒ์ ์๋๋๋ค. ๊ตฌ์กฐ๊ฐ ํจ์ฌ ๋ณต์กํด์ง๋๋ค.
1. ํ์ฌ ์ํ๋ฅผ ์ป์ผ๋ ค๋ฉด ์ด๋ฒคํธ๋ฅผ ๊ณ์ฐํด์ผ ํจ
์ด๋ฒคํธ๊ฐ ์๋ฐฑ๋ง ๊ฐ๋ผ๋ฉด ๋งค๋ฒ ์ฒ์๋ถํฐ ์ฌ์ํ๋ ๊ฒ์ ๋๋ฆฝ๋๋ค.
๊ทธ๋์ ์ค์ ๋ก๋ ์ค๊ฐ ์ํ์ธ ์ค๋ ์ท์ ์ ์ฅํฉ๋๋ค.
1๋ฒ๋ถํฐ 10,000๋ฒ ์ด๋ฒคํธ๊น์ง ๊ณ์ฐํ ์ํ ์ ์ฅ
→ ์ดํ์๋ 10,001๋ฒ ์ด๋ฒคํธ๋ถํฐ ์ ์ฉ
2. ์ด๋ฒคํธ๋ฅผ ์ฝ๊ฒ ์์ ํ๊ฑฐ๋ ์ญ์ ํ๋ฉด ์ ๋จ
์ด๋ฏธ ๋ฐ์ํ ์ด๋ฒคํธ๋ ๊ณผ๊ฑฐ ์ฌ์ค์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ผ์ ๊ธฐ์กด ์ด๋ฒคํธ๋ฅผ ์ง์ ์์ ํ๊ธฐ๋ณด๋ค ์๋ก์ด ๋ณด์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์๋ชป๋ ์ด๋ฒคํธ ์ญ์
๋ณด๋ค๋ ๋ค์์ฒ๋ผ ์ฒ๋ฆฌํฉ๋๋ค.
์๋ชป๋ ์ฒด๊ฒฐ ์ด๋ฒคํธ
→ ์ฒด๊ฒฐ ์ ์ ์ด๋ฒคํธ ์ถ๊ฐ
3. ์ด๋ฒคํธ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํ์ํจ
๊ณผ๊ฑฐ์๋ ๋ค์ ํ์์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ ์ ์์ต๋๋ค.
{
"orderId": 123,
"price": 70000
}
๋์ค์๋ ํ๋๊ฐ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
{
"orderId": 123,
"price": 70000,
"quantity": 10,
"market": "KOSPI"
}
๊ณผ๊ฑฐ ์ด๋ฒคํธ์ ์๋ก์ด ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ ์ฝ์ ์ ์๋๋ก ๋ฒ์ ํธํ์ฑ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
4. ์ค๋ณต ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ฃผ์ํด์ผ ํจ
๋์ผํ ์ฒด๊ฒฐ ์ด๋ฒคํธ๊ฐ ๋คํธ์ํฌ ๋ฌธ์ ๋ก ๋ ๋ฒ ์ ๋ฌ๋ ์ ์์ต๋๋ค.
OrderFilledEvent 101 ์์
OrderFilledEvent 101 ๋ค์ ์์
์ด๋ฅผ ๋ ๋ฒ ์ฒ๋ฆฌํ๋ฉด ์ฒด๊ฒฐ ์๋์ด ์ค๋ณต ๋ฐ์๋ ์ ์์ผ๋ฏ๋ก ์ด๋ฒคํธ ID๋ฅผ ํ์ธํด ํ ๋ฒ๋ง ์ ์ฉํ๋ ๋ฉฑ๋ฑ์ฑ ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
๋ ๋ฐฉ์์ ํต์ฌ ์ฐจ์ด
| ์ ์ฅ ๋์ | ํ์ฌ ์ํ ๋๋ ์ํ ๋ฒ์ | ๋ฐ์ํ ๋ชจ๋ ์ด๋ฒคํธ |
| ํต์ฌ ์ง๋ฌธ | ์ง๊ธ ์ํ๊ฐ ๋ฌด์์ธ๊ฐ | ์ด๋ค ์ฌ๊ฑด์ ๊ฑฐ์ณ ์ง๊ธ ์ํ๊ฐ ๋์๋๊ฐ |
| ํ์ฌ ์ํ ์กฐํ | ๊ฐ๋จํ๊ณ ๋น ๋ฆ | ์ด๋ฒคํธ ์ฌ์ ๋๋ ๋ณ๋ ์กฐํ ๋ชจ๋ธ ํ์ |
| ๊ณผ๊ฑฐ ์ด๋ ฅ | ๋ณ๋ ์ด๋ ฅ ํ ์ด๋ธ ํ์ | ์ด๋ฒคํธ ๋ก๊ทธ์ ์์ฐ์ค๋ฝ๊ฒ ์กด์ฌ |
| ์ฅ์ ๋ถ์ | ์๋์ ์ผ๋ก ์ด๋ ค์ | ์์ธ ์ถ์ ์ ์ ๋ฆฌ |
| ๊ณผ๊ฑฐ ์ํ ๋ณต์ | ์ด๋ ค์ | ๊ฐ๋ฅ |
| ๊ตฌํ ๋์ด๋ | ๋น๊ต์ ๋ฎ์ | ๋์ |
| ๋ฐ์ดํฐ ์ | ๋น๊ต์ ์ ์ | ๊ณ์ ์ฆ๊ฐ |
| ์ ํฉํ ์์คํ | ๋จ์ CRUD ์๋น์ค | ๊ธ์ต·๊ฒฐ์ ·์ฃผ๋ฌธ·๊ฐ์ฌ ์ค์ฌ ์์คํ |
๋ ์ด๋ฏธ์ง๋ฅผ ์ฐ๊ฒฐํด์ ์ดํดํ๊ธฐ
์ฒซ ๋ฒ์งธ ๊ทธ๋ฆผ์ ์ฃผ๋ฌธ ์ด๋ฒคํธ๋ฅผ ์ด๋ค ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ๋๊ฐ๋ฅผ ์ค๋ช ํ๊ณ , ๋ ๋ฒ์งธ ๊ทธ๋ฆผ์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋๊ฐ๋ฅผ ์ค๋ช ํฉ๋๋ค.
๋ ๊ทธ๋ฆผ์ ํฉ์น๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค.
1. ๋คํธ์ํฌ์์ ์ ๊ท ์ฃผ๋ฌธ์ด ๋ค์ด์ด
2. ์
๋ ฅ Netloop๊ฐ ์ฃผ๋ฌธ์ ์์ ํจ
3. ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํ ์ค๋ ๋๊ฐ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํจ
4. NewOrderEvent๋ฅผ ์์ฑํจ
5. ์ด๋ฒคํธ ๋ก๊ทธ์ ์ ์ฅํจ
6. ์ฃผ๋ฌธ ์ํ๋ฅผ '์ ๊ท'๋ก ๊ตฌ์ฑํจ
7. ์ฒด๊ฒฐ ๋ฉ์์ง๊ฐ ๋ค์ด์ด
8. OrderFilledEvent๋ฅผ ์์ฑํจ
9. ์ด๋ฒคํธ ๋ก๊ทธ์ ์ ์ฅํจ
10. ์ฃผ๋ฌธ ์ํ๋ฅผ '์ฒด๊ฒฐ'๋ก ๊ฐฑ์ ํจ
๊ฒฐ๊ตญ ์ฒซ ๋ฒ์งธ ๊ทธ๋ฆผ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํ ์ค๋ ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ ์ ์์ต๋๋ค.
๋ค์ด์จ ์ฃผ๋ฌธ ์ด๋ฒคํธ๋ฅผ ์์๋๋ก ์ฒ๋ฆฌํ๊ณ , ์ฃผ๋ฌธ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ฉฐ, ์ด๋ฒคํธ ์์ฑ ๊ตฌ์กฐ๋ผ๋ฉด ๊ทธ ๋ณ๊ฒฝ ์์ธ์ด ๋๋ ์ด๋ฒคํธ๋ ์์๋๋ก ์ ์ฅํ๋ ํต์ฌ ์คํ ์ค๋ ๋์ ๋๋ค.
๊ฐ์ฅ ์ฝ๊ฒ ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๊ทธ๋ฆผ = ์ฃผ๋ฌธ์ ๋๊ฐ, ์ด๋ค ์์๋ก ์ฒ๋ฆฌํ๋๊ฐ
๋ ๋ฒ์งธ ๊ทธ๋ฆผ = ์ฃผ๋ฌธ์ ๋ณํ ๊ณผ์ ์ ์ด๋ป๊ฒ ๊ธฐ๋กํ๋๊ฐ
๊ทธ๋ฆผ 13.18์ mmap ์ด๋ฒคํธ ์ ์ฅ์๋ฅผ ๋ฉ์์ง ๋ฒ์ค๋ก ์ฌ์ฉํ๋ ์ด๋ฒคํธ ์์ฑ ์ค๊ณ์์ด๋ค. ์นดํ์นด์ ํ์ญ(Pub-Sub) ๋ชจ๋ธ๊ณผ ์์ฃผ ๋น์ทํ๋ค. ์ฌ์ค, ์ง์ฐ ์๊ฐ์ ๋ํ ์๊ฒฉํ ์๊ตฌ์ฌํญ๋ง ์์์ผ๋ฉด ์นดํ์นด๋ฅผ ์ฌ์ฉํ ์๋ ์์์ ๊ฒ์ด๋ค.
๋ค์ด์ด๊ทธ๋จ์์ ์ธ๋ถ ๋๋ฉ์ธ(external domain)์ “์ฆ๊ถ ๊ฑฐ๋ 101” ์ ์์ ์๊ฐํ FIX๋ฅผ ์ฌ์ฉํ์ฌ ๊ฑฐ๋ ๋๋ฉ์ธ(trading domain)๊ณผ ํต์ ํ๋ค.

• ๊ฒ์ดํธ์จ์ด๋ ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํ ์ธ์ฝ๋ฉ์ ์ํด FIX๋ฅผ SBE(FIX over Simple Binary Encoding)๋ก ๋ณํํ๊ณ , ๊ฐ ์ฃผ๋ฌธ์ ์ด๋ฒคํธ ์ ์ฅ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์ ์๋ ํ์์ NewOrderEvent ํํ๋ก ์ ์กํ๋ค(๋ค์ด์ด๊ทธ๋จ์์๋ ‘์ด๋ฒคํธ ์ ์ฅ์ ํญ๋ชฉ’ ๋ถ๋ถ์ ๋ณด๊ธฐ ๋ฐ๋๋ค).
• ์ฒด๊ฒฐ ์์ง์ ๋ด์ฅ๋ ์ฃผ๋ฌธ ๊ด๋ฆฌ์๋ ์ด๋ฒคํธ ์ ์ฅ์๋ก๋ถํฐ NewOrderEvent๋ฅผ ์์ ํ๋ฉด ์ ํจ์ฑ์ ๊ฒ์ฌํ ๋ค์ ๋ด๋ถ ์ฃผ๋ฌธ ์ํ์ ์ถ๊ฐํ๋ค. ๊ทธ ํ ํด๋น ์ฃผ๋ฌธ์ ์ฒ๋ฆฌ ๋ด๋น CPU ์ฝ์ด๋ก ์ ์ก๋๋ค.
• ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋๋ฉด OrderFilledEvent๊ฐ ์์ฑ๋์ด ์ด๋ฒคํธ ์ ์ฅ์๋ก ์ ์ก๋๋ค.
• ์์ฅ ๋ฐ์ดํฐ ํ๋ก์ธ์ ๋ฐ ๋ณด๊ณ ์๋น์ค ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์๋ ์ด๋ฒคํธ ์ ์ฅ์๋ฅผ ๊ตฌ๋
ํ๊ณ , ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ ์ ํ ์ฒ๋ฆฌํ๋ค.
์ด ์ค๊ณ๋ ์์ ์ดํด๋ณธ ๊ฐ๋ต์ ์ค๊ณ์์ ๋์ฒด์ ์ผ๋ก ๋ถํฉํ์ง๋ง, ์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ์์ ๋ ํจ์จ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ์กฐ์ ํ ๋ถ๋ถ์ด ๋ช ๊ฐ์ง ์๋ค.
์ฒซ ๋ฒ์งธ ์ฐจ์ด๋ ์ฃผ๋ฌธ ๊ด๋ฆฌ์๋ค. ์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ์์ ์ฃผ๋ฌธ ๊ด๋ฆฌ์๋ ์ปดํฌ๋ํธ์ ๋ด์ฅ๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ์ฃผ๋ฌธ ์ํ๋ ๋ง์ ์ปดํฌ๋ํธ์ ์ค์ํ๋ฏ๋ก ์ด๋ฐ ์ค๊ณ๊ฐ ๋ง์ด ๋๋ค. ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ์ฃผ๋ฌธ ์ํ ์
๋ฐ์ดํธ ๋๋ ์ง์๋ฅผ ์ํด ์ค์ํ๋ ์ฃผ๋ฌธ ๊ด๋ฆฌ์๋ฅผ ์ด์ฉํ๋๋ก ํ ๊ฒฝ์ฐ, ์ง์ฐ ์๊ฐ์ ๊ธธ์ด์ง ์ ์๋ค. ๋ณด๊ณ ์๋น์ค์ฒ๋ผ ์ค์ ๊ฑฐ๋ ๊ฒฝ๋ก์ ์์ง ์์ ์ปดํฌ๋ํธ๋ ๋์ฑ ๊ทธ๋ ๋ค. ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ฃผ๋ฌธ ์ํ๋ฅผ ์์ฒด์ ์ผ๋ก ์ ์งํ๊ธฐ๋ ํ๊ฒ ์ผ๋ ์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ์ ํน์ฑ์ ๊ทธ ๋ชจ๋๋ ์ ๋ถ ๋์ผํ๋ฉฐ ์ฌํ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๋ ๋ค๋ฅธ ์ฃผ์ ์ฐจ์ด์ ์ ์ด ๋ค์ด์ด๊ทธ๋จ์์๋ ์ํ์๊ฐ ์๋ค๋ ์ ์ด๋ค. ์ด๋ป๊ฒ ๋ ๊ฒ์ผ๊น?
์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ๋ฅผ ๋ฐ๋ฅด๊ฒ ๋๋ฉด ๋ชจ๋ ๋ฉ์์ง๋ ๋์ผํ ์ด๋ฒคํธ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฒคํธ ์ ์ฅ์์ ๋ณด๊ด๋๋ ํญ๋ชฉ์๋ sequence ํ๋๊ฐ ์๋ค. ์ด ํ๋์ ๊ฐ์ ์ด๋ฒคํธ ์ ์ฅ์์ ์๋ ์ํ์๊ฐ ๋ฃ๋๋ค.
๊ฐ ์ด๋ฒคํธ ์ ์ฅ์์๋ ํ๋์ ์ํ์๋ง ์๋ค. ์ํ์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ผ๋ฉด ์ด๋ฒคํธ ์ ์ฅ์์ ์ฐ๋ ๊ถํ์ ๋๊ณ ๊ฒฝ์ํ๊ฒ ๋๋ฏ๋ก ์ข์ง ์๋ค. ๊ฑฐ๋์ ๊ฐ์ด ๋ฐ์ ์์คํ
์ ๊ฒฝ์ฐ์๋ ๋ฝ ๊ฒฝํฉ์ ๋ญ๋นํ ์๊ฐ์ด ์๋ค. ๋ฐ๋ผ์ ์ํ์๋ ์ด๋ฒคํธ ์ ์ฅ์์ ๋ณด๋ด๊ธฐ ์ ์ ์ด๋ฒคํธ๋ฅผ ์์๋๋ก ์ ๋ ฌํ๋ ์ ์ผํ ์ฐ๊ธฐ ์ฐ์ฐ ์ฃผ์ฒด๋ค. ๊ฐ๋ต์ ์ค๊ณ์์ ์ดํด๋ณธ ์ํ์๋ ๋ฉ์์ง ์ ์ฅ์ ์ญํ ๋ ํ์์ง๋ง ์ง๊ธ ์ดํด๋ณด๋ ์ํ์๋ ํ ๊ฐ์ง ๊ฐ๋จํ ์์
๋ง ์ํํ๋ฉฐ ์์ฃผ ๋น ๋ฅด๋ค. ๊ทธ๋ฆผ 13.19๋ ๋ฉ๋ชจ๋ฆฌ ๋งต(mmap) ํ๊ฒฝ์์์ ์ํ์ ์ค๊ณ๋ฅผ ๋ณด์ฌ ์ค๋ค.
์ด ์ํ์๋ ๊ฐ ์ปดํฌ๋ํธ์ ๊ณ ์ ํ ๋ง ๋ฒํผ์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์จ๋ค. ๊ฐ ์ด๋ฒคํธ์ ์์ ID๋ฅผ ์ฐ์ ๋ค์ ์ด๋ฒคํธ ์ ์ฅ์๋ก ๋ณด๋ธ๋ค. ์ฃผ ์ํ์๊ฐ ๋ค์ด๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด, ๋ฐฑ์
์ํ์๋ฅผ ๋๋ฉด ๊ฐ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
๊ณ ๊ฐ์ฉ์ฑ
๋ณธ ์ค๊ณ์์ 99.99%์ ๊ฐ์ฉ์ฑ์ ์ผ๋์ ๋๊ณ ์ค๊ณํ์๋ค. ๊ฑฐ๋์๊ฐ ๋ค์ด๋ ์ ์๋ ์๊ฐ์ ํ๋ฃจ์ 8.64์ด๋ฅผ ๋์ผ๋ฉด ์ ๋๋ค๋ ๋ป์ด๋ค. ๋ฐ๋ผ์ ์๋น์ค๊ฐ ๋ค์ด๋๋ฉด ์ฆ๊ฐ ๋ณต๊ตฌํด์ผ ํ๋ค.
๊ฐ์ฉ์ฑ์ ๋์ฌ์ผ ํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ ์ดํด๋ณด์์ผ ํ๋ค.
• ์ฒซ์งธ๋ก, ๊ฑฐ๋์ ์ํคํ
์ฒ์ ๋จ์ผ ์ฅ์ ์ง์ (SPOF)์ ์๋ณํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ์ฒด๊ฒฐ ์์ง์ ๋ฐ์ํ๋ ์ฅ์ ๋ ๊ฑฐ๋์์๋ ์ฌ์์ด๋ค. ๋ฐ๋ผ์ ์ฃผ ์ธ์คํด์ค๋ฅผ ๋ค์คํํด์ผ ํ๋ค.
• ๋์งธ, ์ฅ์ ๊ฐ์ง ๋ฐ ๋ฐฑ์
์ธ์คํด์ค๋ก์ ์ฅ์ ์กฐ์น ๊ฒฐ์ ์ด ๋นจ๋ผ์ผ ํ๋ค.
ํด๋ผ์ด์ธํธ ๊ฒ์ดํธ์จ์ด์ ๊ฐ์ ๋ฌด์ํ(stateless) ์๋น์ค์ ๊ฒฝ์ฐ, ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ฉด ์ฝ๊ฒ ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ฃผ๋ฌธ ๊ด๋ฆฌ์๋ ์ฒด๊ฒฐ ์์ง์ฒ๋ผ ์ํ๋ฅผ ์ ์ฅํ๋ ์ปดํฌ๋ํธ๋, ์ฌ๋ณธ ๊ฐ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ ์์ด์ผ ํ๋ค.
๊ทธ๋ฆผ 13.20์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ์ฌ๋ก๋ค. ์ฃผ ์ฒด๊ฒฐ ์์ง์ ์์ ์ฃผ ์ธ์คํด์ค์ด๊ณ , ๋ถ ์ฒด๊ฒฐ ์์ง์ ๋์ผํ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ์ง๋ง ์ด๋ฒคํธ ์ ์ฅ์๋ก ์ด๋ฒคํธ๋ฅผ ์ ์กํ์ง๋ ์๋๋ค. ์ฃผ ์ธ์คํด์ค๊ฐ ๋ค์ด๋๋ฉด ๋ถ ์ธ์คํด์ค๋ ์ฆ์ ์ฃผ ์ธ์คํด์ค ์ง์๋ฅผ ์น๊ณํ ํ ์ด๋ฒคํธ๋ฅผ ์ ์กํ๋ค. ๋ถ ์ธ์คํด์ค๊ฐ ๋ค์ด๋ ๊ฒฝ์ฐ, ์ผ๋จ ์ฌ์์ ํ๊ณ ๋์ ์ด๋ฒคํธ ์ ์ฅ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋ชจ๋ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ค. ์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ๋ ๊ฑฐ๋์์ ์ ํฉํ๋ค. ๊ทธ ๊ฒฐ์ ๋ก ์ (deterministic) ํน์ฑ ๋๋ฌธ์ ์ํ ๋ณต๊ตฌ๊ฐ ์ฝ๊ณ ์ ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ์ํคํ
์ฒ์์๋ ์ฃผ ์ฒด๊ฒฐ ์์ง์ ๋ฌธ์ ๋ฅผ ์๋ ๊ฐ์งํ ๋ฉ์ปค๋์ฆ์ด ํ์ํ๋ค. ํ๋์จ์ด์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ์ ์ธ์๋, ์ฒด๊ฒฐ ์์ง๊ณผ ๋ฐ๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์๋ ์๊ฐํด ๋ณผ ์ ์๋ค. ๋ฐ๋ ๋ฉ์์ง๋ฅผ ์๊ฐ ๋ด์ ๋ฐ์ง ๋ชปํ๋ฉด ์ฒด๊ฒฐ ์์ง์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ผ๋ก ํ๋จํ๋ ๊ฒ์ด๋ค.
์ด ์ฃผ/๋ถ ์ฒด๊ฒฐ ์์ง ์ค๊ณ์์ ๋ฌธ์ ์ ์ ๋จ์ผ ์๋ฒ ์์์๋ง ๋์ํ๋ค๋ ๊ฒ์ด๋ค. ๊ณ ๊ฐ์ฉ์ฑ์ ๋ฌ์ฑํ๋ ค๋ฉด ์ด ๊ฐ๋
์ ์ฌ๋ฌ ์๋ฒ ๋๋ ๋ฐ์ดํฐ ์ผํฐ ์ ๋ฐ์ผ๋ก ํ์ฅํด์ผ ํ๋ค. ์ฃผ/๋ถ ์ฒด๊ฒฐ ์์ง์ด ์๋๋ผ ์ฃผ/๋ถ ์๋ฒ์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ๋ป์ด๋ค. ์์ธ๋ฌ ์ฃผ ์๋ฒ์ ์ด๋ฒคํธ ์ ์ฅ์๋ ๋ชจ๋ ๋ถ ์๋ฒ๋ก ๋ณต์ ํด์ผ ํ๋ค. ์ด๋ฒคํธ ์ ์ฅ์๋ฅผ ์ฌ๋ฌ ์๋ฒ๋ก ๋ณต์ ํ๋ ๋ฐ๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์์ ์ UDP(reliable UDP)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๋ถ ์๋ฒ์ ์ด๋ฒคํธ ๋ฉ์์ง๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ธ๋ก๋์บ์คํธ(broadcast)ํ ์ ์๋ค.[19] ๊ทธ๋ฐ ์ฌ๋ก๋ก๋ [20]์์ ๋ค๋ฃจ๋ ์์ด๋ก (Aeron)์ ์ค๊ณ๋ฅผ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
๋ค์ ์ ์์๋ ์ฃผ/๋ถ ์ฒด๊ฒฐ ์์ง ๊ธฐ๋ฐ์ ์ค๊ณ์์ ๊ฐ์ ํ์ฌ ๊ฐ์ฉ์ฑ์ ๋ ๋์ด๋ ๋ฐฉ์์ ์ดํด๋ณด๊ฒ ๋ค.
๊ฒฐํจ ๋ด์ฑ
์์ ์ฃผ/๋ถ ์ค๊ณ์์ ๋น๊ต์ ๊ฐ๋จํ๋ค. ๋น๊ต์ ์ ์๋ํ์ง๋ง ๋ถ ์๋ฒ๊น์ง ์ ๋ถ ๋ค์ด๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ํ๋ฅ ์ ๋ฎ์ง๋ง ์น๋ช
์ ์ธ ์ํฉ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ด์ ๋๋นํด์ผ ํ๋ค.
์ด๋ ๋ํ ๊ธฐ์ ๊ธฐ์
์ด ์ง๋ฉดํ ๋ฌธ์ ๋ค. ์ด๋ฐ ๊ธฐ์
๋ค์ ํต์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ง์ญ์ ๋ฐ์ดํฐ์ผํฐ์ ๋ณต์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ด๋ฅผ ํตํด ์ง์ง์ด๋ ๋๊ท๋ชจ ์ ์ ๊ณผ ๊ฐ์ ์์ฐ์ฌํด์ ์ํ์ ์ํํ ์ ์๋ค. ๊ฒฐํจ ๋ด์ฑ(fault-tolerant) ์์คํ
์ ๋ง๋ค๋ ค๋ฉด ๋ง์ ์ง๋ฌธ์ ๋ตํด์ผ ํ๋ค.
1. ์ฃผ ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ์ธ์ , ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋ถ ์๋ฒ๋ก ์๋ ์ ํํ๋ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋?
2. ๋ถ ์๋ฒ ๊ฐ์ด๋ฐ ์๋ก์ด ๋ฆฌ๋๋ ์ด๋ป๊ฒ ์ ์ถํ๋๊ฐ?
3. ๋ณต๊ตฌ ์๊ฐ ๋ชฉํ(Recovery Time Objective, RTO)๋ ์ผ๋ง์ธ๊ฐ?
4. ์ด๋ค ๊ธฐ๋ฅ์ ๋ณต๊ตฌํด์ผ ํ๋๊ฐ(Recovery Point Objective, RPO)? ์์คํ
์ด ์ฑ๋ฅ ์ ํ ์ํ๋ก๋ ๋์ํ ์ ์๋๊ฐ?
์ด ์ง๋ฌธ์ ํ๋์ฉ ๋ตํด ๋ณด์.
๋จผ์ , ‘์ฅ์ ๊ฐ ์๊ฒผ๋ค๋ ๊ฒ’, ์ฆ ๋ค์ด๋์๋ค๋ ๊ฒ์ด ์ค์ ๋ก ๋ฌด์์ ์๋ฏธํ๋์ง ์ดํดํด์ผ ํ๋ค. ์๊ฐ๋งํผ ๊ฐ๋จํ์ง ์์ ๋ฌธ์ ๋ค. ๋ค์๊ณผ ๊ฐ์ ์ํฉ๋ค์ ๊ณ ๋ คํด๋ณด์.
1. ์์คํ
์์ ์๋ชป๋ ๊ฒฝ๋ณด๋ฅผ ์ ์กํ๋ฉด ๋ถํ์ํ ์ฅ์ ๊ทน๋ณต ์ ์ฐจ, ์ฆ ๋ถ ์์คํ
์ผ๋ก์ ์๋ ์ ํ์ด ๋ฐ์ํ ์ ์๋ค.
2. ์ฝ๋์ ๋ฒ๊ทธ๋ก ์ธํด ์ฃผ ์๋ฒ๊ฐ ๋ค์ด๋์๋ค๋ฉด ๋ถ ์๋ฒ๋ก ์๋ ์ ํ๋๋๋ผ๋ ๊ฐ์ ๋ฒ๊ทธ ๋๋ฌธ์ ๋ถ ์๋ฒ๊น์ง ๋ค์ด๋ ์ ์๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋ ์ฃผ/๋ถ ์๋ฒ๊ฐ ์ค๋จ๋๋ฉด ์์คํ
์ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ ์ํ์ ๋น ์ง๋ค.
์ด๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ค. ๋ช ๊ฐ์ง ํด๊ฒฐ์ฑ
์ ์๊ฐํด ๋ณผ ์ ์๋ค. ์ ์์คํ
์ ์ฒ์ ์ถ์ํ ๋๋ ์๋์ผ๋ก ์ฅ์ ๋ณต๊ตฌ ์กฐ์น๋ฅผ ์ํํ๋ค. ์ถฉ๋ถํ ์๊ทธ๋, ์ด์ ๊ฒฝํ์ ์ถ์ ํ์ฌ ์์คํ
์ ์์ ์ด ์๊ธฐ๋ฉด ๊ทธ๋ ์๋์ผ๋ก ์ฅ์ ๋ฅผ ๊ฐ์งํ์ฌ ๋ณต๊ตฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๋์
ํ๋ ๊ฒ์ด๋ค. ์นด์ค์ค ์์ง๋์ด๋ง(chaos engineering)[21]์ ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ ๊น๋ค๋ก์ด ์ฌ๋ก๋ฅผ ์๋ฉด์ผ๋ก ์ด๋์ด๋ด๊ณ ์ด์ ๊ฒฝํ์ ๋น ๋ฅด๊ฒ ์ถ์ ํ๋ ๋ฐ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
์ด์ ์ฅ์ ๋ณต๊ตฌ ์กฐ์น๋ฅผ ์์ํ๋ค๋ ๊ฒฐ์ ์ ์๋์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ด๋ฆด ์ ์๊ฒ ๋์๋ค๊ณ ํ์. ์ด๋ค ์๋ฒ๊ฐ ์ฃผ ์๋ฒ ์ญํ ์ ์ธ๊ณ ๋ฐ์์ง๋ ์ด๋ป๊ฒ ์ ํ๋ฉด ์ข์๊น? ๋คํํ๋ ์ด๊ฒ์ ์ ์๋ ค์ง ๋ฌธ์ ๋ค. ์ค์ ์์ ๊ฒ์ฆ๋ ๋ฆฌ๋ ์ ์ถ ์๊ณ ๋ฆฌ์ฆ์ด ๋ง๋ค. ์ฌ๊ธฐ์๋ ๋ํํธ(Raft)๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ๋ค.[22]

์ผ์ชฝ์ “์ด๋ฒคํธ๋ฅผ ํ ์ค๋ก ์์๋๋ก ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ”, ์ค๋ฅธ์ชฝ์ “๊ทธ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋๊ฐ์ด ๋ณต์ ํ๋ ๋ฐฉ๋ฒ”์ ๋ณด์ฌ์ค์.
1. ์ผ์ชฝ ์ด๋ฏธ์ง: ์ํ์ ์ค๊ณ
ํต์ฌ์ ๊ฒ์ดํธ์จ์ด์ ์ฒด๊ฒฐ ์์ง์์ ๋ฐ์ํ ๋ฐ์ดํฐ๋ฅผ ์ํ์๊ฐ ํ๊ณณ์ ๋ชจ์ ์์๋ฅผ ์ ํ ๋ค ์ ์ฅํ๋ ๊ตฌ์กฐ์์.
โ ๊ฒ์ดํธ์จ์ด์ ์ฒด๊ฒฐ ์์ง์ด ๋ง ๋ฒํผ์ ๊ธฐ๋ก
๊ฒ์ดํธ์จ์ด๋ ์ธ๋ถ์์ ๋ค์ด์จ ์ฃผ๋ฌธ์ ๋ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๋งค์ ์ฃผ๋ฌธ์ ๋ณด๋ด๋ฉด ๊ฒ์ดํธ์จ์ด๋ ๊ทธ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๋ฐ๋ก ๋์คํฌ์ ์ ์ฅํ์ง ์๊ณ , ๋จผ์ ๋ง ๋ฒํผ์ ๋ฃ์ต๋๋ค.
์ฒด๊ฒฐ ์์ง๋ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์๊ธฐ ๋ง ๋ฒํผ์ ๋ฃ์ต๋๋ค.
๊ฒ์ดํธ์จ์ด → ๋ง ๋ฒํผ
์ฒด๊ฒฐ ์์ง → ๋ง ๋ฒํผ
๋ง ๋ฒํผ๋ ์ฝ๊ฒ ๋งํ๋ฉด ์์ฃผ ๋น ๋ฅธ ์์ ๋๊ธฐ ์ค์ด์์.
๋์คํฌ์ ๋ฐ๋ก ๊ธฐ๋กํ๋ ๊ฒ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ์ ๋จผ์ ๋ฃ๋ ๊ฒ์ด ํจ์ฌ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์, ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๋๋ฅผ ๋จ์ด๋จ๋ฆฌ์ง ์์ต๋๋ค.
โก ์ํ์๊ฐ ๋ ๋ง ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
์ํ์๋ ๊ฒ์ดํธ์จ์ด์ ์ฒด๊ฒฐ ์์ง์ ๋ง ๋ฒํผ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ทธ๋ฆผ์ ์๋ pull์ ์ํ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ์ง์ ๋ง ๋ฒํผ๋ฅผ ํ์ธํด์ ๊ฐ์ ธ์จ๋ค๋ ๋ป์ด์์.
์ํ์์ ๊ฐ์ฅ ์ค์ํ ์ญํ ์ ๊ฐ ์ด๋ฒคํธ์ ์์๋ฅผ ๋ถ์ด๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋์์ ์ด๋ฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๊ณ ํด๋ณผ๊ฒ์.
์ ๊ท ์ฃผ๋ฌธ ๋ฐ์
์ฃผ๋ฌธ ์ฒด๊ฒฐ ๋ฐ์
๋ค๋ฅธ ์ ๊ท ์ฃผ๋ฌธ ๋ฐ์
์ํ์๋ ์ด๋ฅผ ๋ค์์ฒ๋ผ ์ ๋ฆฌํฉ๋๋ค.
1๋ฒ ์ด๋ฒคํธ: ์ ๊ท ์ฃผ๋ฌธ
2๋ฒ ์ด๋ฒคํธ: ์ฃผ๋ฌธ ์ฒด๊ฒฐ
3๋ฒ ์ด๋ฒคํธ: ์ ๊ท ์ฃผ๋ฌธ
์ด๋ ๊ฒ ํด์ผ ๋์ค์ ์์คํ ์ด ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ฝ์ ๋๋ ์ ํํ ๊ฐ์ ์์๋ก ์ฌํํ ์ ์์ต๋๋ค.
โข ์ํ์๊ฐ ์ด๋ฒคํธ ์ ์ฅ์์ ๊ธฐ๋ก
์์๊ฐ ์ ํด์ง ์ด๋ฒคํธ๋ mmap ๊ธฐ๋ฐ ์ด๋ฒคํธ ์ ์ฅ์์ ์์๋๋ก ์ ์ฅ๋ฉ๋๋ค.
[1๋ฒ ์ด๋ฒคํธ][2๋ฒ ์ด๋ฒคํธ][3๋ฒ ์ด๋ฒคํธ][4๋ฒ ์ด๋ฒคํธ]...
์ฌ๊ธฐ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ธฐ๋ณด๋ค ์๋ก์ด ์ด๋ฒคํธ๋ฅผ ๋ค์ ๊ณ์ ๋ถ์ด๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
์ฆ, ์ํ์๋ ๋ค์ ์ญํ ์ ํด์.
์ฌ๋ฌ ๊ณณ์์ ๋์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ๋ชจ์์ ํ๋์ ์ ํํ ์์๋ก ์ ๋ฆฌํ๊ณ ์ ์ฅํ๋ค.
์ผ์ชฝ ์ด๋ฏธ์ง์ ํต์ฌ
์ํ์๊ฐ ์๋ค๋ฉด ๊ฒ์ดํธ์จ์ด์ ์ฒด๊ฒฐ ์์ง์ด ๋์์ ์ ์ฅํ๋ฉด์ ์ด๋ฒคํธ ์์๊ฐ ๋ค์์ผ ์ ์์ต๋๋ค.
์ํ์๋ฅผ ๋๋ฉด ๋ชจ๋ ์ด๋ฒคํธ๊ฐ ํ ์ค๋ก ์ ๋ฆฌ๋๊ธฐ ๋๋ฌธ์:
- ์ด๋ฒคํธ ์์๊ฐ ๋ช ํํด์ง๊ณ
- ๋์์ฑ ์ถฉ๋์ ์ค์ผ ์ ์์ผ๋ฉฐ
- ์ฅ์ ํ ์ํ๋ฅผ ๋ค์ ์ฌํํ๊ธฐ ์ฌ์์ง๋๋ค.
2. ์ค๋ฅธ์ชฝ ์ด๋ฏธ์ง: ๋ํํธ ํด๋ฌ์คํฐ์์ ์ด๋ฒคํธ ๋ณต์
์ค๋ฅธ์ชฝ์ ํ๋์ ์ด๋ฒคํธ ์ ์ฅ์์๋ง ๋ฐ์ดํฐ๋ฅผ ๋์ง ์๊ณ , ์ฌ๋ฌ ์๋ฒ์ ๋์ผํ ์ด๋ฒคํธ๋ฅผ ๋ณต์ฌํ๋ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
ํต์ฌ์ ์ฃผ ์๋ฒ๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๊ณ , ๊ทธ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ ๋ถ ์๋ฒ์ ๋๊ฐ์ด ๋ณต์ ํ๋ ๊ฒ์ด์์.
์ฃผ ์ฒด๊ฒฐ ์์ง๊ณผ ๋ถ ์ฒด๊ฒฐ ์์ง
๋งจ ์์๋ ๋ ์ข ๋ฅ์ ์ฒด๊ฒฐ ์์ง์ด ์์ต๋๋ค.
- ์ฃผ ์ฒด๊ฒฐ ์์ง: ์ค์ ๋ก ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ ์ค์ฌ ์๋ฒ
- ๋ถ ์ฒด๊ฒฐ ์์ง: ์ฃผ ์๋ฒ์ ์ฅ์ ๊ฐ ์๊ฒผ์ ๋ ๋์ ์ฒ๋ฆฌํ ์ ์๋ ๋๊ธฐ ์๋ฒ
์ฃผ ์ฒด๊ฒฐ ์์ง์ ํ์ฌ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๊ณ , ๋ถ ์ฒด๊ฒฐ ์์ง์ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌ๋ฐ์ ์ํ๋ฅผ ๋ง์ถฐ๋ก๋๋ค.
NewOrderEvent ํ๋ฆ
์ ๊ท ์ฃผ๋ฌธ์ด ์ด๋ฒคํธ ์ ์ฅ์์ ๊ธฐ๋ก๋๋ฉด NewOrderEvent๊ฐ ์ฃผ ์ฒด๊ฒฐ ์์ง์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ด๋ฒคํธ ์ ์ฅ์
→ NewOrderEvent
→ ์ฃผ ์ฒด๊ฒฐ ์์ง
์ฃผ ์ฒด๊ฒฐ ์์ง์ ์ด ์ด๋ฒคํธ๋ฅผ ๋ณด๊ณ ์ฃผ๋ฌธ์ฅ์ ์ ๊ท ์ฃผ๋ฌธ์ ์ถ๊ฐํฉ๋๋ค.
๋ถ ์ฒด๊ฒฐ ์์ง๋ ๊ฐ์ NewOrderEvent๋ฅผ ๋ฐ์ต๋๋ค.
๊ทธ๋์ ์ฃผ ์๋ฒ์ ๋ถ ์๋ฒ๊ฐ ๊ฐ์ ์ฃผ๋ฌธ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
์ฃผ ์ฒด๊ฒฐ ์์ง: ์ ๊ท ์ฃผ๋ฌธ ๋ฐ์
๋ถ ์ฒด๊ฒฐ ์์ง: ๋์ผํ ์ ๊ท ์ฃผ๋ฌธ ๋ฐ์
OrderFilledEvent ํ๋ฆ
์ฃผ ์ฒด๊ฒฐ ์์ง์์ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋๋ฉด OrderFilledEvent๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฃผ ์ฒด๊ฒฐ ์์ง
→ OrderFilledEvent
→ ์ด๋ฒคํธ ์ ์ฅ์
์ฆ, ์ฒด๊ฒฐ ๊ฒฐ๊ณผ๋ ๋ค์ ์ด๋ฒคํธ๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด ๋๋ถ์ ๋์ค์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ค ์ฃผ๋ฌธ์ด ๋ค์ด์๋์ง
์ธ์ ์ฒด๊ฒฐ๋์๋์ง
์ผ๋ง๋ ์ฒด๊ฒฐ๋์๋์ง
AppendEntries RPCs๋?
๊ฐ์ด๋ฐ์ ์๋ AppendEntries RPCs๋ ๋ํํธ์์ ์ฌ์ฉํ๋ ๋ณต์ ๋ฉ์์ง์ ๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด ์ฃผ ์๋ฒ๊ฐ ๋ค๋ฅธ ์๋ฒ์ ์ด๋ ๊ฒ ๋งํ๋ ๊ฑฐ์์.
“๋ด ์ด๋ฒคํธ ์ ์ฅ์์ ์ ์ด๋ฒคํธ๊ฐ ์๊ฒผ์ผ๋ ๋ํฌ ์ ์ฅ์์๋ ๋๊ฐ์ด ์ถ๊ฐํด.”
๊ทธ๋์ ์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ ์ ์ฅ์์ ๋ด์ฉ์ด ์๋ ์ฌ๋ฌ ์ด๋ฒคํธ ์ ์ฅ์๋ก ๋ณต์ ๋ฉ๋๋ค.
์ฃผ ์ ์ฅ์
โ→ ๋ถ ์ ์ฅ์ 1
โ→ ๋ถ ์ ์ฅ์ 2
โ→ ๋ถ ์ ์ฅ์ 3
โ→ ๋ถ ์ ์ฅ์ 4
๊ฐ ์๋ฒ์ ์ด๋ฒคํธ ์ ์ฅ์์๋ ๊ฐ์ ์์์ ์ด๋ฒคํธ๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค.
์ ์ฌ๋ฌ ๊ณณ์ ๋ณต์ ํ ๊น?
์ด๋ฒคํธ๋ฅผ ํ ์๋ฒ์๋ง ์ ์ฅํ๋ฉด ๊ทธ ์๋ฒ๊ฐ ๊ณ ์ฅ๋ฌ์ ๋ ์ฃผ๋ฌธ ๊ธฐ๋ก์ ์์ ์ ์์ต๋๋ค.
๋ฐ๋ฉด ์ฌ๋ฌ ์๋ฒ์ ๋ณต์ ํด๋๋ฉด:
- ์ฃผ ์๋ฒ๊ฐ ๊ณ ์ฅ๋๋ ๋ค๋ฅธ ์๋ฒ๊ฐ ์ด์ด๋ฐ์ ์ ์๊ณ
- ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๋ฉฐ
- ์ฅ์ ๋ณต๊ตฌ๊ฐ ๋นจ๋ผ์ง๋๋ค.
์ฆ, ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ์ฅ์ ๋์์ ์ํ ๊ตฌ์กฐ์์.
๋ ์ด๋ฏธ์ง๋ฅผ ํจ๊ป ์ดํดํ๋ฉด
์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๊ฒ์ดํธ์จ์ด์ ์ฒด๊ฒฐ ์์ง์์ ์ด๋ฒคํธ ๋ฐ์
2. ๋ง ๋ฒํผ์ ์์ ์ ์ฅ
3. ์ํ์๊ฐ ์ด๋ฒคํธ ์์๋ฅผ ๊ฒฐ์
4. ์ด๋ฒคํธ ์ ์ฅ์์ ๊ธฐ๋ก
5. ๋ํํธ๊ฐ ์ฌ๋ฌ ์๋ฒ์ ์ด๋ฒคํธ๋ฅผ ๋ณต์
6. ์ฃผ ์๋ฒ ์ฅ์ ์ ๋ถ ์๋ฒ๊ฐ ๋์ ๋์
ํ ๋ฌธ์ฅ์ฉ ์ ๋ฆฌํ๋ฉด
์ผ์ชฝ ์ด๋ฏธ์ง:
์ํ์๋ ์ฌ๋ฌ ๊ณณ์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ๋ชจ์ ์ ํํ ์์๋ฅผ ๋ถ์ธ ๋ค ์ด๋ฒคํธ ์ ์ฅ์์ ๊ธฐ๋กํฉ๋๋ค.
์ค๋ฅธ์ชฝ ์ด๋ฏธ์ง:
๋ํํธ๋ ์ ์ฅ๋ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋์ผํ๊ฒ ๋ณต์ ํด, ์๋ฒ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์์คํ
์ด ๊ณ์ ๋์ํ๋๋ก ํฉ๋๋ค.
๋ฆฌ๋ ์ ์ถ ๊ณผ์ ์ ๊ฐ๋จํ ์ดํด๋ณด์. ๋ฆฌ๋๋ ํ๋ก์ด์๊ฒ ๋ฐ๋ ๋ฉ์์ง(๊ทธ๋ฆผ 13.21์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ด์ฉ์ด ์๋ AppendEntries ํธ์ถ)๋ฅผ ๋ณด๋ธ๋ค. ์ผ์ ๊ธฐ๊ฐ ๋์ ๋ฐ๋ ๋ฉ์์ง๋ฅผ ๋ฐ์ง ๋ชปํ ํ๋ก์ด๋ ์ ๋ฆฌ๋๋ฅผ ์ ์ถํ๋ ์ ๊ฑฐ ํ์ด๋จธ๋ฅผ ์์ํ๋ค. ๊ฐ์ฅ ๋จผ์ ๊ทธ ํ์ด๋จธ๊ฐ ํ์์์๋ ํ๋ก์ด๋ ํ๋ณด๊ฐ ๋๊ณ , ๋ค๋ฅธ ๋๋จธ์ง ํ๋ก์ด์๊ฒ ํฌํ๋ฅผ ์์ฒญํ๋ค(RequestVote ํธ์ถ). ๊ทธ ํ๋ก์ด๊ฐ ๊ณผ๋ฐ์ ์ด์์ ํ๋ฅผ ๋ฐ์ผ๋ฉด ์๋ก์ด ๋ฆฌ๋๊ฐ ๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ก์ด์ ์๊ธฐ(term) ๊ฐ์ด ์ ๋
ธ๋๋ณด๋ค ์งง์ผ๋ฉด ๋ฆฌ๋๊ฐ ๋ ์ ์๋ค. ์ฌ๋ฌ ๋ช
์ ํ๋ก์ด๊ฐ ๋์์ ํ๋ณด๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ๋ถํ ํฌํ๋ผ๊ณ ํ๋ค. ์ด ๊ฒฝ์ฐ ๊ธฐ์กด ์ ๊ฑฐ์ ํ์์์์ ์ ์ธํ๊ณ ์๋ก์ด ์ ๊ฑฐ๋ฅผ ์์ํ๋ค. ‘์๊ธฐ’์ ๋ํ ์ค๋ช
์ ๊ทธ๋ฆผ 13.22๋ฅผ ์ฐธ์กฐํ๋ผ. ์๊ฐ ์ถ์ด ์ ์ ์ด์ ๊ธฐ๊ฐ๊ณผ ์ ๊ฑฐ ๊ธฐ๊ฐ์ ๋ํ๋ด๋ ์์ ๊ตฌ๊ฐ์ผ๋ก ๋ถํ ๋์ด ์์ผ๋ฉฐ, ์ด ๊ฐ ๊ตฌ๊ฐ์ด ์ด๋ค ๋ฆฌ๋์ ์๊ธฐ๋ค.

๋ค์์ผ๋ก ๋ณต๊ตฌ ์๊ฐ์ ์ดํด๋ณด์. ๋ณต๊ตฌ ์๊ฐ ๋ชฉํ(Recovery Time Objective, RTO)๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ค์ด๋์ด๋ ์ฌ์
์ ์ฌ๊ฐํ ํผํด๊ฐ ์๋ ์๊ฐ์ ์ต๋๊ฐ์ด๋ค. ์ฆ๊ถ ๊ฑฐ๋์์ ๊ฒฝ์ฐ, 2๋ฑ๊ธ(second-level) RTO๋ฅผ ๋ฌ์ฑํด์ผ ํ๋๋ฐ ๊ทธ๋ฌ๋ ค๋ฉด ์๋น์ค์ ์๋ ๋ณต๊ตฌ๊ฐ ๋ฐ๋์ ๊ฐ๋ฅํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ์ฐ์ ์์์ ๋ฐ๋ผ ์๋น์ค๋ฅผ ๋ถ๋ฅํ๊ณ ์ต์ ์๋น์ค ์์ค์ ์ ์งํ๊ธฐ ์ํ ์ฑ๋ฅ ์ ํ ์ ๋ต(degradation strategy)์ ์ ์ํ๋ค.
๋ง์ง๋ง์ผ๋ก ๋ฐ์ดํฐ ์์ค์ด ํ์ฉ๋ ์ ์๋ ๋ฒ์๋ฅผ ํ์
ํด์ผ ํ๋ค. ๋ณต๊ตฌ ์ง์ ๋ชฉํ(Recovery Point Objective, RPO)๋ ๋น์ฆ๋์ค์ ์ฌ๊ฐํ ํผํด๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์์ค๋ ์ ์๋ ๋ฐ์ดํฐ์ ์, ์ฆ ์์ค ํ์ฉ ๋ฒ์๋ฅผ ์๋ฏธํ๋ค. ์ค๋ฌด์์๋ ‘๋ฐ์ดํฐ๋ ์์ฃผ ๋ฐฑ์
ํด์ผ ํ๋ค’๋ ๊ฒ๊ณผ ๊ฐ์ ๋ป์ผ๋ก ๋ฐ์๋ค์ธ๋ค. ์ฆ๊ถ ๊ฑฐ๋์๋ ๋ฐ์ดํฐ ์์ค์ ์ฉ๋ฉํ ์ ์์ผ๋ฏ๋ก RPO๊ฐ ๊ฑฐ์ 0์ ๊ฐ๊น๋ค. ๋ํํธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ฌ๋ณธ์ ๋ง๋ค. ๋ชจ๋ ํด๋ฌ์คํฐ ๋
ธ๋๊ฐ ๊ฐ์ ์ํ๋ฅผ ๊ฐ๋๋ก ๋ณด์ฅํ ์๋ ์๋ค. ํ์ฌ ๋ฆฌ๋์ ์ฅ์ ๊ฐ ์๊ธฐ๋ฉด ์๋ก์ด ๋ฆฌ๋๊ฐ ์ค๋จ ์์ด ์์
์ ๊ณ์ํ ์ ์๋ค.
์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ
์ ์ ๋ฐฉํฅ์ ํ์ด, ์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ ์์ธํ ์ดํด๋ณด์. ๋ค์ ์์ฌ ์ฝ๋(pseudo code)๋ ์ฒด๊ฒฐ์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๊ฐ๋ต์ ์ผ๋ก ์ค๋ช
ํ๋ค.
return SUCCESS(MATCH_SUCCESS, order);
}
์ด ์์ฌ ์ฝ๋๋ FIFO(์ ์
์ ์ถ) ์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค. ํน์ ๊ฐ๊ฒฉ ์์ค์์ ๋จผ์ ๋ค์ด์จ ์ฃผ๋ฌธ์ด ๋จผ์ ์ฒด๊ฒฐ๋๊ณ , ๋ง์ง๋ง ์ฃผ๋ฌธ์ด ๊ฐ์ฅ ๋์ค์ ์ฒด๊ฒฐ๋๋ค.
์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ค. ์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ ๋ฌผ ๊ฑฐ๋์ ํํ ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, FIFO์ LMM(Lead Market Maker)์ ๊ฒฐํฉํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ, FIFO ๋๊ธฐ์ด๋ณด๋ค LMM์ ๋จผ์ ์ผ์ ์๋์ ํ ๋นํ๋ค. ๊ทธ ๋น์จ์ LMM ํ์ฌ๊ฐ ๊ฑฐ๋์์ ํ์ํ์ฌ ๊ฒฐ์ ํ๋ค. CME ์น์ฌ์ดํธ์ ๊ฐ๋ฉด ์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด๋ค ๊ฒ์ด ์๋์ง ํ์ธํ ์ ์๋ค.[24] ์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ค๋ฅธ ๋ง์ ์๋๋ฆฌ์ค์๋ ์ด์ฉ๋๋๋ฐ, ๋ํ์ ์ผ๋ก ๋คํฌ ํ(dark pool)์ด ์๋ค.[25]
๊ฒฐ์ ๋ก
๊ฒฐ์ ๋ก (determinism)์๋ ๊ธฐ๋ฅ์ ๊ฒฐ์ ๋ก (functional determinism)๊ณผ ์ง์ฐ ์๊ฐ ๊ฒฐ์ ๋ก (latency determinism)์ด ์๋ค. ๊ธฐ๋ฅ์ ๊ฒฐ์ ๋ก ์ ๋ํด์๋ ์์ ์ค๋ช
ํ ๋ฐ ์๋ค. ์ํ์๋ ์ด๋ฒคํธ ์์ฑ ์ํคํ
์ฒ๋ฅผ ๋์
ํจ์ผ๋ก์จ ์ด๋ฒคํธ๋ฅผ ๋์ผํ ์์๋ก ์ฌ์ํ๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋๋ก ๋ณด์ฅํ์๋๋ฐ, ๊ทธ๊ฒ์ด ๊ธฐ๋ฅ์ ๊ฒฐ์ ๋ก ์ด๋ค.

๊ธฐ๋ฅ์ ๊ฒฐ์ ๋ก ์์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ์ค์ ์๊ฐ์ ๋์ฒด๋ก ์ค์ํ์ง ์๋ค. ์ค์ํ ๊ฒ์ ์์๋ค. ๊ทธ๋ฆผ 13.23์์๋ ์๊ฐ ์ถ ์์ ๋ถ๊ท์นํ๊ฒ ๋์ด๋ ํ์์คํฌํ๋ค์ด ์ฐ์๋ ์ ๋ค๋ก ๋ณํ๋์๋๋ฐ, ๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ์๊ณผ ๋ณต๊ตฌ์ ์์๋๋ ์๊ฐ์ด ํฌ๊ฒ ์ค์ด๋ ๋ค.
์ง์ฐ ์๊ฐ ๊ฒฐ์ ๋ก ์ ๊ฐ ๊ฑฐ๋์ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ฑฐ์ ๊ฐ๋ค๋ ๋ป์ด๋ค. ์ฌ์
์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด๋ค. ์ด๋ฅผ ์ธก์ ํ๋ ์ํ์ ์ธ ๋ฐฉ๋ฒ์, 99๋ฒ ๋ฐฑ๋ถ์์ ์ง์ฐ ์๊ฐ(p99)์ด๋ 99.99๋ฒ ๋ฐฑ๋ถ์์ ์ง์ฐ ์๊ฐ์ ์ฌ๋ ๊ฒ์ด๋ค. ์ง์ฐ ์๊ฐ ๊ณ์ฐ์๋ HdrHistogram์ ํ์ฉํ ์ ์๋ค.[26] p99 ์ง์ฐ ์๊ฐ์ด ๋ฎ๋ค๋ ๊ฒ์ ๊ฑฐ๋์๊ฐ ๊ฑฐ์ ๋ชจ๋ ๊ฑฐ๋์ ์์ ์ ์ธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค๋ ๋ป์ด๋ค.
์ง์ฐ ์๊ฐ ๋ณ๋ ํญ์ด ์ปค์ง๋ฉด ์์ธ์ ์กฐ์ฌํด์ผ ํ๋ค. ์๋ฐ์ ๊ฒฝ์ฐ์๋ ์์ ์ง์ (safe points)์ด ์์ธ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํซ์คํ JVM์ Stop-the-World ์ฐ๋ ๊ธฐ ์์ง ์๊ณ ๋ฆฌ์ฆ์ด ๊ทธ ์ฌ๋ก๋ค.[27]
์ด๊ฒ์ผ๋ก ์ฃผ์ ๊ฑฐ๋ ๊ฒฝ๋ก์ ๋ํ ์์ธ ์ค๊ณ๋ ๋ง์น๋ค. ์ด๋ฒ ์ฅ์ ๋๋จธ์ง ์ง๋ฉด์์๋ ๊ฑฐ๋์์ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ์ธก๋ฉด์ ์์ธํ ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค.
์์ฅ ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค ์ต์ ํ
์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์์ ์ ์ ์๋ฏ์ด L3 ํธ๊ฐ ์ฐฝ/์ฃผ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด ์์ฅ์ ๋ ์ ํ์
ํ ์ ์๋ค. ๊ตฌ๊ธ ํ์ด๋ธ์ค(Google Finance) ์ฌ์ดํธ์ ๊ฐ๋ฉด ํ๋ฃจ์น ๋ด ์ฐจํธ ๋ฐ์ดํฐ๋ ๋ฌด๋ฃ๋ก ์ป์ ์ ์์ง๋ง ๋ ์์ธํ L2/L3 ํธ๊ฐ ์ฐฝ ๋ฐ์ดํฐ๋ฅผ ์ป์ผ๋ ค๋ฉด ๋์ด ๋ง์ด ๋ ๋ค. ๋ง์ ํค์ง ํ๋๊ฐ ๊ฑฐ๋์ ์ค์๊ฐ API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ธฐ๋กํ์ฌ ๋ด ์ฐจํธ๋ฅผ ๋น๋กฏํด ๊ธฐ์ ์ ๋ถ์์ ์ํ ๋ง์ ์ฐจํธ๋ฅผ ์์ฒด์ ์ผ๋ก ๊ตฌ์ถํ๋ค.
์์ฅ ๋ฐ์ดํฐ ๊ฒ์ ์๋น์ค(Market Data Publisher, MDP)๋ ์ฒด๊ฒฐ ์์ง์ ์ฒด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํธ๊ฐ ์ฐฝ๊ณผ ๋ด ์ฐจํธ๋ฅผ ์ฌ๊ตฌ์ถํ ๋ค์ ๊ตฌ๋
์์๊ฒ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์(publish)ํ๋ค.
ํธ๊ฐ ์ฐฝ ์ฌ๊ตฌ์ถ ๊ณผ์ ์ ์์ “์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ” ์ ์์ ๋ค๋ฃฌ ์์ฌ ์ฝ๋์ ์ ์ฌํ๋ค. MDP๋ ๋ค์ํ ์์ค์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ธ ๊ณ ๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ฏ ๋ ๋ฒจ์ L2 ๋ฐ์ดํฐ๋ง ๋ณผ ์ ์์ผ๋ฉฐ ์ด ๊ฐ ๋ ๋ฒจ์ ๋ณด๋ ค๋ฉด ์ถ๊ฐ ๋น์ฉ์ ์ง๋ถํด์ผ ํ๋ค. MDP์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฌดํ๋๋ก ํ์ฅํ ์ ์์ผ๋ฏ๋ก ๋ด ์ฐจํธ์๋ ์ํ์ ์ ๋์ด์ผ ํ๋ค. ๋ด ์ฐจํธ์ ๋ํด์๋ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ ์ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
๊ทธ๋ฆผ 13.24๋ MDP ์ค๊ณ๋ฅผ ๋ณด์ฌ ์ค๋ค.

์ด ์ค๊ณ์์ ๋ง ๋ฒํผ๋ฅผ ํ์ฉํ๋ค. ์ํ ๋ฒํผ(circular buffer)๋ผ๊ณ ๋ ํ๋ ๋ง ๋ฒํผ๋ ์๊ณผ ๋์ด ์ฐ๊ฒฐ๋ ๊ณ ์ ํฌ๊ธฐ ํ๋ค. ์ฌ๊ธฐ์ ์์ฐ์๋ ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ , ํ๋ ์ด์์ ์๋น์๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ธ๋ค. ๋ง ๋ฒํผ์ ๊ณต๊ฐ์ ์ฌ์ ์ ํ ๋น๋ ๊ฒ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์ญ์ ํ๋ ์ฐ์ฐ์ ํ์ ์๋ค๋ ๋ป์ด๋ค. ๋ํ ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ฝ์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ทธ ์ธ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค ๋ฐฉ๋ฒ๋ค์ ์๋ค. ์๋ฅผ ๋ค์ด ํจ๋ฉ(padding)์ ๋ง ๋ฒํผ์ ์์ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๊ฒ๊ณผ ๊ฐ์ ์บ์ ๋ผ์ธ(cache line)์ ์ค์ง ์๋๋ก ํ๋ค. ์์ธํ ๋ด์ฉ์ [28]์ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
์์ฅ ๋ฐ์ดํฐ์ ๊ณต์ ํ ๋ฐฐํฌ
๊ฑฐ๋์์์ ๋ค๋ฅธ ์ฌ๋๋ณด๋ค ์ง์ฐ ์๊ฐ์ด ๋ฎ๋ค๋ ๊ฒ์ ๋ฏธ๋๋ฅผ ์์ธกํ ์ ์๋ค๋ ๊ฒ์ด๋ ๊ฐ๋ค. ๊ท์ ๋ฅผ ๋ฐ๋ ๊ฑฐ๋์์ ๊ฒฝ์ฐ ๋ชจ๋ ์์ ์๊ฐ ๋์์ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์์ผ๊น? ์๋ฅผ ๋ค์ด MDP๋ ๋ฐ์ดํฐ ๊ตฌ๋
์ ๋ชฉ๋ก์ ๊ฐ๊ณ ์๋๋ฐ, ๊ตฌ๋
์ ์์๋ ๊ฒ์ ์๋น์ค์ ์ฐ๊ฒฐํ ์์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ฉฐ, ํญ์ ์ฒซ ๋ฒ์งธ ๊ตฌ๋
์๊ฐ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋๋ํ ๊ณ ๊ฐ๋ค์ ์์ฅ์ด ์ด๋ฆฌ๋ฉด ์ฒซ ๋ฒ์งธ ๊ตฌ๋
์๊ฐ ๋๊ธฐ ์ํด ๋ฌ๋ ค๋ค ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์์ ์ UDP๋ฅผ ์ฌ์ฉํ๋ ๋ฉํฐ์บ์คํธ(multicast)๋ ํ ๋ฒ์ ๋ง์ ์ฐธ๊ฐ์์๊ฒ ์
๋ฐ์ดํธ๋ฅผ ๋ธ๋ก๋์บ์คํธ ํ๊ธฐ ์ข์ ์๋ฃจ์
์ด๋ค. ๊ตฌ๋
์๊ฐ ์ฐ๊ฒฐํ๋ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๋ ๋์ , ๋ฌด์์ ์์๋ก ์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ๊ทธ ๊ฐ์ด๋ฐ ๋ฉํฐ์บ์คํธ ๋ฐฉ์์ ๋ํด ๋ ์์ธํ ์์๋ณด๋๋ก ํ์.
๋ฉํฐ์บ์คํธ
์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ ์ธ ๊ฐ์ง ์ ํ์ ํ๋กํ ์ฝ์ ํตํด ์ ์ก๋๋ค.
- ์ ๋์บ์คํธ(unicast): ํ๋์ ์ถ์ฒ์์ ํ๋์ ๋ชฉ์ ์ง๋ก๋ง ๋ณด๋ด๋ ์ ์ก ํ๋กํ ์ฝ์ด๋ค.
- ๋ธ๋ก๋์บ์คํธ(broadcast): ํ๋์ ์ถ์ฒ์์ ์ ์ฒด ํ์ ๋คํธ์ํฌ๋ก ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
- ๋ฉํฐ์บ์คํธ(multicast): ํ๋์ ์ถ์ฒ์์ ๋ค์ํ ํ์ ๋คํธ์ํฌ์์ ํธ์คํธ๋ค๋ก ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
๊ฑฐ๋์ ์ค๊ณ์ ๋ณดํธ์ ์ผ๋ก ์ด์ฉ๋๋ ๊ฒ์ ๋ฉํฐ์บ์คํธ๋ค. ๊ฐ์ ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน์ ์ํ ์์ ์๋ ์ด๋ก ์ ์ผ๋ก๋ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค. ๊ทธ๋ฌ๋ UDP๋ ์ ๋ขฐ์ฑ์ด ๋ฎ์ ํ๋กํ ์ฝ์ด๋ฉฐ ๊ทธ ๋ฐ์ดํฐ๊ทธ๋จ(datagram)์ ๋ชจ๋ ์์ ์์๊ฒ ๋๋ฌํ์ง ๋ชปํ ์๋ ์๋ค. ์ฌ์ ์ก์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ๊ถ๊ธํ๋ค๋ฉด [29]๋ฅผ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
์ฝ๋ก์ผ์ด์
์์ ๊ณต์ ์ฑ์ ๊ฐ์กฐํ๊ธฐ๋ ํ์์ผ๋, ๋ง์ ๊ฑฐ๋์๊ฐ ํค์ง ํ๋ ๋๋ ๋ธ๋ก์ปค์ ์๋ฒ๋ฅผ ๊ฑฐ๋์์ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ์ ๋ ์ ์๋๋ก ํ๋ ์ฝ๋ก์ผ์ด์
์๋น์ค(colocation service)๋ฅผ ์ ๊ณตํ๋ค. ์ฒด๊ฒฐ ์์ง์ ์ฃผ๋ฌธ์ ๋ฃ๋ ์ง์ฐ ์๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ก ๊ฒฝ๋ก ๊ธธ์ด์ ๋น๋กํ๋ค. ์ฝ๋ก์ผ์ด์
์๋น์ค๊ฐ ๊ณต์ ์ฑ์ ํผ์ํ๋ค๊ณ ๋ณด์ง๋ ์๋๋ค. ์ ๋ฃ VIP ์๋น์ค๋ก ๋ณธ๋ค.
๋คํธ์ํฌ ๋ณด์
๊ฑฐ๋์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ช ๊ฐ์ง ์ธํฐํ์ด์ค๋ฅผ ๊ณต๊ฐํ๊ณ ์์ผ๋ฏ๋ก DDoS ๊ณต๊ฒฉ์ ๋์ํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ถ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ด ํํ ์ฌ์ฉ๋๋ค.
๊ณต๊ฐ ์๋น์ค์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ณต๊ฐ ์๋น์ค์์ ๋ถ๋ฆฌํ์ฌ DDoS ๊ณต๊ฒฉ์ด ๊ฐ์ฅ ์ค์ํ ํด๋ผ์ด์ธํธ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ๋ค. ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ฝ๊ธฐ ์ ์ฉ ์ฌ๋ณธ์ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด ๋ฌธ์ ๋ฅผ ๊ฒฉ๋ฆฌํ๋ค.
์์ฃผ ์
๋ฐ์ดํธ๋์ง ์๋ ๋ฐ์ดํฐ๋ ์บ์ฑํ๋ค. ์บ์ฑ์ด ์ ๋์ด ์์ผ๋ฉด ๋๋ถ๋ถ์ ์ง์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๋๋์ค ๊ณต๊ฒฉ์ ๋๋นํด URL์ ๊ฐํํ๋ค. ์๋ฅผ ๋ค์ด https://my.website.com/data?from=123&to=456๊ณผ ๊ฐ์ URL์ ์ฌ์ฉํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ง์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ์ฌ ๋ค์ํ ์์ฒญ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค. https://my.website.com/data/recent์ ๊ฐ์ URL์ด ๋ ํจ๊ณผ์ ์ด๋ค. CDN ๋จ์์ ์บ์ํ ์๋ ์๋ค.
ํจ๊ณผ์ ์ธ ํ์ฉ/์ฐจ๋จ ๋ฆฌ์คํธ(safelist/blocklist) ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค. ๋ง์ ๋คํธ์ํฌ ๊ฒ์ดํธ์จ์ด ์ ํ์ด ์ด๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฒ๋ฆฌ์จ ์ ํ(rate limiting) ๊ธฐ๋ฅ์ ํ์ฉํ๋ค. DDoS ๊ณต๊ฒฉ ๋ฐฉ์ด์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ด๋ค.
4๋จ๊ณ: ๋ง๋ฌด๋ฆฌ
์ด ์ฅ์ ์ฝ๊ณ ๋๋ฉด, ์ฌ๋ฌ๋ถ์ ๋ํ ๊ฑฐ๋์๋ฅผ ์ํ ์ด์์ ์ธ ๋ฐฐํฌ ๋ชจ๋ธ์ ๋ชจ๋ ๊ฒ์ ํ๋์ ๊ฑฐ๋ํ ์๋ฒ ๋๋ ๋จ์ผ ํ๋ก์ธ์ค์ ๋ฐฐ์นํ๋ ๊ฒ์ด๋ผ๋ ๊ฒฐ๋ก ์ ๋๋ฌํ ๊ฒ์ด๋ค. ์ค์ ๋ก ์ผ๋ถ ๊ฑฐ๋์๋ ์ด๋ฐ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค.
์ต๊ทผ ์ํธํํ ์ฐ์
์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋ง์ ์ํธํํ ๊ฑฐ๋์๊ฐ ํด๋ผ์ฐ๋ ์ธํ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋ค.[30] ์ผ๋ถ ํ์ค์ํ ๊ธ์ต ํ๋ก์ ํธ๋ AMM(Automatic Market Making) ๊ฐ๋
์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์ฌ์ง์ด ํธ๊ฐ ์ฐฝ๋ ์๋ค.
ํด๋ผ์ฐ๋ ์ํ๊ณ๊ฐ ์ ๊ณตํ๋ ํธ๋ฆฌํจ์ ์ค๊ณ์ ๋ฐฉํฅ์ ๋ฐ๊พธ์์ ๋ฟ ์๋๋ผ ์
๊ณ ์ง์
๋ฌธํฑ๋ ๋ฎ์ถ๊ณ ์๋ค. ์ด๋ฐ ํ๋ฆ์ ๊ธ์ต์
์ ํ์ ์ ์ธ ์๋์ง๋ฅผ ๋ถ์ด๋ฃ์ ๊ฒ์ด๋ค.
์ด๋ฒ ์ฅ๋ ์ฑ๊ณต์ ์ผ๋ก ๋ง๋ฌด๋ฆฌํ ์ฌ๋ฌ๋ถ, ์ถํํ๋ค! ์ค์ค๋ก๋ฅผ ๋ง์๊ป ๊ฒฉ๋ คํ๋๋ก ํ์!
์ฐธ๊ณ ๋ฌธํ
[1] LMAX ๊ฑฐ๋์(LMAX exchange was famous for its open-source Disruptor). https://www.lmax.com/exchange
[2] ๊ฑฐ๋ ๊ณต์ ์ฑ(IEX attracts investors by “playing fair”, also is the “Flash Boys Exchange”). https://en.wikipedia.org/wiki/IEX
[3] NYSE ๊ฑฐ๋ ์ฒด๊ฒฐ ๊ท๋ชจ(NYSE matched volume). https://www.nyse.com/markets/us-equity-volumes
[4] HKEX ์ผ์ผ ๊ฑฐ๋ ๊ท๋ชจ(HKEX daily trading volume). https://www.hkex.com.hk/Market-Data/Statistics/Consolidated-Reports/Securities-Statistics-Archive/Trading_Value_Volume_And_Number_Of_Deals?sc_lang=en#select1=0
[5] ์ ์ธ๊ณ ๊ฑฐ๋์ ๊ท๋ชจ ์์(All of the World's Stock Exchanges by Size). http://money.visualcapitalist.com/all-of-the-worlds-stock-exchanges-by-size/
[6] DDoS ๊ณต๊ฒฉ(Denial of service attack). https://en.wikipedia.org/wiki/Denial-of-service_attack
[7] ์์ฅ ์ํฅ(Market impact). https://en.wikipedia.org/wiki/Market_impact
[8] FIX ํธ๋ ์ด๋ฉ(Fix trading). https://www.fixtrading.org/
[9] ์ด๋ฒคํธ ์์ฑ(Event Sourcing). https://martinfowler.com/eaaDev/EventSourcing.html
[10] CME ์ฝ๋ก์ผ์ด์
๋ฐ ๋ฐ์ดํฐ ์ผํฐ ์๋น์ค(CME Co-Location and Data Center Services). https://www.cmegroup.com/trading/colocation/co-location-services.html
[11] ๊ธฐ์ ์๊ฐ(Epoch). https://www.epoch101.com/
[12] ํธ๊ฐ ์ฐฝ(Order book). https://www.investopedia.com/terms/o/order-book.asp
[13] ํธ๊ฐ ์ฐฝ(Order book). https://en.wikipedia.org/wiki/Order_book
[14] ๊ณ ์ ์ง์ ๊ฐ ์ฃผ๋ฌธ ํธ๊ฐ ์ฐฝ ๊ตฌ์ถ๋ฒ(How to Build a Fast Limit Order Book). https://bit.ly/3ngMtEO
[15] kdb+์ q ์ธ์ด๋ฅผ ํตํ ๊ฐ๋ฐ(Developing with kdb+ and the q language). https://code.kx.com/q/
[16] ๋ชจ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์์ผ ํ๋ ์ง์ฐ ์๊ฐ ์์น(Latency Numbers Every Programmer Should Know). https://gist.github.com/jboner/2841832
[17] mmap. https://en.wikipedia.org/wiki/Memory_map
[18] ์ปจํ
์คํธ ์ค์์น(Context switch). https://bit.ly/3pva7A6
[19] ์์ ์ ์ธ UDP ํ๋กํ ์ฝ(Reliable User Datagram Protocol). https://en.wikipedia.org/wiki/Reliable_User_Datagram_Protocol
[20] ์์ด๋ก (Aeron). https://github.com/real-logic/aeron/wiki/Design-Overview
[21] ์นด์ค์ค ์์ง๋์ด๋ง(Chaos engineering). https://en.wikipedia.org/wiki/Chaos_engineering
[22] ๋ํํธ(Raft). https://raft.github.io/
[23] ์ดํด ์ค์ฌ์ ์ค๊ณ: ๋ํํธ์ ํฉ์ ์๊ณ ๋ฆฌ์ฆ(Designing for Understandability: the Raft Consensus Algorithm). https://raft.github.io/slides/uiuc2016.pdf
[24] ์ง์๋๊ณ ์๋ ์ฒด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก(Supported Matching Algorithms). https://bit.ly/3aYoCEo
[25] ๋คํฌ ํ(Dark pool). https://www.investopedia.com/terms/d/dark-pool.asp
[26] HdrHistogram: A High Dynamic Range Histogram. http://hdrhistogram.org/
[27] ํซ์คํ ๊ฐ์ ๋จธ์ (HotSpot virtual machine). https://en.wikipedia.org/wiki/HotSpot_(virtual_machine
[28] ์บ์ ๋ผ์ธ ํจ๋ฉ(Cache line padding). https://bit.ly/3lZTFWz
[29] NACK ๊ธฐ๋ฐ์ ์์ ์ ๋ฉํฐ์บ์คํธ(NACK-Oriented Reliable Multicast). https://en.wikipedia.org/wiki/NACK-Oriented_Reliable_Multicast
[30] AWS ์ฝ์ธ๋ฒ ์ด์ค ์ฌ๋ก ์ฐ๊ตฌ(AWS Coinbase Case Study.) https://aws.amazon.com/solutions/case-studies/coinbase/






'๐ฉโ๐ปDeveloper ๐ก > ๐พBack-end๐๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋์งํธ์ง๊ฐ (0) | 2026.06.21 |
|---|---|
| ๊ฒฐ์ ์์คํ (0) | 2026.06.21 |
| ์ค์๊ฐ ์์ํ (0) | 2026.06.21 |
| ์งํ ๋ชจ๋ํฐ๋ง (0) | 2026.06.21 |
| ๋ฉ์ธ์ง ํ (0) | 2026.06.21 |