์ฆ๊ถŒ๊ฑฐ๋ž˜์†Œ

2026. 6. 21. 01:01ยท๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก/๐Ÿ’พBack-end๐Ÿ•Š๏ธ

์ฆ๊ถŒ๊ฑฐ๋ž˜์†Œ์˜ ์ผ๋ถ€๋Š” ๊ธˆ์œต ์‚ฐ์—… ์ˆ˜์ง์  ์„ธ๋ถ„ํ™”์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ , ๊ธฐ์ˆ ์ธก๋ฉด์„ ๊ฐ•์กฐํ•˜๋ฉฐ[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 ๊ทธ๋ฆผ์€ ์ฆ๊ถŒ ์ฃผ๋ฌธ์ด ์ ‘์ˆ˜๋˜๊ณ  ์ฒด๊ฒฐ๋  ๋•Œ๊นŒ์ง€์˜ ์ „์ฒด ํ๋ฆ„์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ตฌ์กฐ๋„์˜ˆ์š”.

์‰ฝ๊ฒŒ ๋ณด๋ฉด ๋‹ค์Œ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž
    • ๋กœ๋นˆํ›„๋“œ, ๊ณจ๋“œ๋งŒ์‚ญ์Šค ๊ฐ™์€ ์ฆ๊ถŒ์‚ฌ ์•ฑ์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋งค์ˆ˜·๋งค๋„ ์ฃผ๋ฌธ์„ ๋ƒ…๋‹ˆ๋‹ค.
  2. ๋ธŒ๋กœ์ปค
    • ์‚ฌ์šฉ์ž์˜ ์ฃผ๋ฌธ์„ ๋ฐ›์•„ ๊ฑฐ๋ž˜์†Œ๋กœ ์ „๋‹ฌํ•  ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฑฐ๋ž˜์†Œ์—์„œ ๋ฐ›์€ ์ฒด๊ฒฐ ๊ฒฐ๊ณผ๋„ ๋‹ค์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ ๊ฒŒ์ดํŠธ์›จ์ด
    • ์ฆ๊ถŒ์‚ฌ์™€ ๊ฑฐ๋ž˜์†Œ ์‚ฌ์ด์˜ ์ถœ์ž…๊ตฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์™ธ๋ถ€์—์„œ ๋“ค์–ด์˜จ ์ฃผ๋ฌธ์„ ๊ฑฐ๋ž˜์†Œ ๋‚ด๋ถ€ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์™ธ๋ถ€๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ์ž
    • ์ฃผ๋ฌธ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
    • ์ฃผ๋ฌธ์ด ์ •์ƒ์ธ์ง€, ์ทจ์†Œ๋˜์—ˆ๋Š”์ง€, ์ผ๋ถ€ ์ฒด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋‚ด๋ถ€์˜ ์ง€๊ฐ‘์€ ์ฃผ๋ฌธ ๊ฐ€๋Šฅํ•œ ์ž๊ธˆ์ด๋‚˜ ๋ณด์œ  ์ˆ˜๋Ÿ‰์„ ํ™•์ธํ•˜๋Š” ์—ญํ• ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  5. ์ข…ํ•ฉ์  ์œ„ํ—˜ ์ ๊ฒ€
    • ์ฃผ๋ฌธ ๊ธˆ์•ก์ด ๋„ˆ๋ฌด ํฌ์ง€ ์•Š์€์ง€,
    • ๊ณ„์ขŒ์— ์ถฉ๋ถ„ํ•œ ๋ˆ์ด๋‚˜ ์ฃผ์‹์ด ์žˆ๋Š”์ง€,
    • ๋น„์ •์ƒ์ ์ธ ์ฃผ๋ฌธ์€ ์•„๋‹Œ์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  6. ์‹œํ€€์„œ
    • ์—ฌ๋Ÿฌ ์ฃผ๋ฌธ์ด ๋™์‹œ์— ๋“ค์–ด์™€๋„ ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ๊ผฌ์ด์ง€ ์•Š๋„๋ก ์ˆœ์„œ๋ฅผ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฑฐ๋ž˜์˜ ๊ณต์ •์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค.
  7. ์ฒด๊ฒฐ ์—”์ง„
    • ์‹ค์ œ ๋งค์ˆ˜ ์ฃผ๋ฌธ๊ณผ ๋งค๋„ ์ฃผ๋ฌธ์„ ์„œ๋กœ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ€๊ฒฉ๊ณผ ์ˆ˜๋Ÿ‰์ด ๋งž์œผ๋ฉด ๊ฑฐ๋ž˜๊ฐ€ ์ฒด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  8. ํ˜ธ๊ฐ€์ฐฝ
    • ์•„์ง ์ฒด๊ฒฐ๋˜์ง€ ์•Š์€ ๋งค์ˆ˜·๋งค๋„ ์ฃผ๋ฌธ์„ ๊ฐ€๊ฒฉ๋ณ„๋กœ ์ •๋ฆฌํ•ด ๋‘” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด “10,000์›์— ์‚ฌ๊ณ  ์‹ถ๋‹ค”, “10,100์›์— ํŒ”๊ณ  ์‹ถ๋‹ค” ๊ฐ™์€ ์ฃผ๋ฌธ๋“ค์ด ์Œ“์ž…๋‹ˆ๋‹ค.
  9. ์‹œ์žฅ ๋ฐ์ดํ„ฐ ๊ฒŒ์‹œ ์„œ๋น„์Šค
    • ์ฒด๊ฒฐ๊ฐ€, ๋งค์ˆ˜·๋งค๋„ ํ˜ธ๊ฐ€, ๊ฑฐ๋ž˜๋Ÿ‰ ๊ฐ™์€ ์‹œ์žฅ ์ •๋ณด๋ฅผ ์™ธ๋ถ€์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  10. ๋ฐ์ดํ„ฐ ์„œ๋น„์Šค
  • ์‹œ์žฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋ธŒ๋กœ์ปค๋‚˜ ์ฆ๊ถŒ์‚ฌ์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์ด ์ •๋ณด๋ฅผ ์•ฑ์—์„œ ์‹ค์‹œ๊ฐ„ ์‹œ์„ธ๋กœ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  1. ๋ณด๊ณ  ์„œ๋น„์Šค์™€ 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์˜ ํ˜ธ๊ฐ€ ์ฐฝ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ฃผ๋ฌธ์ด ์–ด๋–ป๊ฒŒ ์ง‘ํ–‰๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

  1. ์œ„์ชฝ ๋ฐ•์Šค (๋งค๋„ ํ˜ธ๊ฐ€ ์ฐฝ, ๋นจ๊ฐ„์ƒ‰ ๊ณ„์—ด): ์ฃผ์‹์„ ํŒ”๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ฃผ๋ฌธ ํ˜„ํ™ฉ์ž…๋‹ˆ๋‹ค.
    • ๊ฐ€๊ฒฉ: 100.10๋ถ€ํ„ฐ 100.13๊นŒ์ง€ ํŒ”๊ณ  ์‹ถ์€ ๊ฐ€๊ฒฉ๋“ค์ด ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ˆ˜๋Ÿ‰: ๊ฐ ๊ฐ€๊ฒฉ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฃผ์‹ ๋ฌผ๋Ÿ‰์ด ์Œ“์—ฌ ์žˆ๋Š”์ง€ ์‚ฌ๊ฐํ˜• ๋ธ”๋ก์˜ ๊ฐœ์ˆ˜๋กœ ์‹œ๊ฐํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๊ฒฉ์ด ๋‚ฎ์„์ˆ˜๋ก (100.10) ๋งค์ˆ˜์ž๊ฐ€ ๋จผ์ € ์ฑ„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— '๋งค๋„ ์ฃผ๋ฌธ ๊นŠ์ด'๊ฐ€ ์–•๊ณ , ๊ฐ€๊ฒฉ์ด ๋†’์„์ˆ˜๋ก (100.13) ๊นŠ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์•„๋ž˜์ชฝ ๋ฐ•์Šค (๋งค์ˆ˜ ํ˜ธ๊ฐ€ ์ฐฝ, ํŒŒ๋ž€์ƒ‰ ๊ณ„์—ด): ์ฃผ์‹์„ ์‚ฌ๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ฃผ๋ฌธ ํ˜„ํ™ฉ์ž…๋‹ˆ๋‹ค.
    • ํŒ”๋ ค๋Š” ๊ฐ€๊ฒฉ๋ณด๋‹ค ๋‚ฎ์€ 100.05๋ถ€ํ„ฐ 100.08๊นŒ์ง€์˜ ๊ฐ€๊ฒฉ๋“ค์ด ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ€์žฅ ๋†’์€ ๊ฐ€๊ฒฉ์ธ 100.08์ด '์ตœ๊ณ  ๋งค์ˆ˜ ์ฃผ๋ฌธ'์ด๋ฉฐ, ๊ฐ€๊ฒฉ์ด ๋‚ฎ์•„์งˆ์ˆ˜๋ก ๋” ๋งŽ์€ ์ฃผ๋ฌธ์ด ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ธ”๋ก์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  3. ํ™”์‚ดํ‘œ์™€ ์•„๋ž˜ ๊ณ„์‚ฐ์‹: ์‹ค์ œ ๊ฑฐ๋ž˜๊ฐ€ ์ฒด๊ฒฐ๋˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‹œ์žฅ๊ฐ€๋กœ 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
'๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก/๐Ÿ’พBack-end๐Ÿ•Š๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋””์ง€ํ„ธ์ง€๊ฐ‘
  • ๊ฒฐ์ œ์‹œ์Šคํ…œ
  • ์‹ค์‹œ๊ฐ„ ์ˆœ์œ„ํ‘œ
  • ์ง€ํ‘œ ๋ชจ๋‹ˆํ„ฐ๋ง
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
Quantitative Research Engineer & Quantitative Strategist | Multimodal Alpha (Price/News/On-chain) | Regime-aware, Cost-included Backtests | Remote-first ์—ฐ๋ฆฌ์˜ ๋‚œ ๋จธ๋‹ˆ๐Ÿ’ฐ๊ฐ€ ์ข‹์•„๐Ÿ’™๐Ÿฅณ ์ถฉ๋งŒํ•˜๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์ฆ๊ฒ๊ฒŒ ๐Ÿถ ๐Ÿฆซ ๐Ÿ’›
  • Eliana Lee
    Product & AI Engineer
    AboutMe ๋ชฉํ‘œ GitHub _yeonlee___ Eliana_Eden
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿค ๐Ÿ˜Ž ์•ˆ๋…•โ˜ƒ๏ธ๐Ÿ’ž (125)
      • ๐Ÿ’™ ๐Ÿค Diary๐Ÿฐ ๐ŸŽ€ ๐Ÿงธ (37)
        • ๐Ÿ—ฝ๋ฏธ๊ตญ DS & CS ๋ฐ•์‚ฌ ์ด๋ฏผ๐Ÿ‹ (26)
        • ๐Ÿ›ซ์—ฌํ–‰ ์ด์•ผ๊ธฐ (1)
        • ๐Ÿ“’์˜ค๋Š˜ ์ด์•ผ๊ธฐ๐Ÿ’’๐Ÿซง๐ŸŒค๏ธ (6)
        • ๐Ÿฐโ˜˜๏ธ๐Ÿป‍โ„๏ธ๊ฐ•์•„์ง€ ์œก์•„ (0)
      • ๐ŸฌActuary๐Ÿคธ‍โ™€๏ธโœจ (1)
      • ๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก (65)
        • โš’๏ธ์‚ฝ์งˆ ๊ธฐ๋ก๊ธฐ๐Ÿ“[TIL] (6)
        • ๐Ÿ–ผ๏ธFront-end๐ŸŽจ (3)
        • ๐Ÿ’พBack-end๐Ÿ•Š๏ธ (29)
        • ๐Ÿคน‍โ™€๏ธAlgorithm & Coding Test๐Ÿ’ƒ (9)
        • ๐Ÿ—ปData๐Ÿ”๏ธ (1)
        • ๐Ÿ“Project๐Ÿ• (9)
      • ๐Ÿ’ฐ๊ฒฝ์ œ์  ์ž์œ  ๋‹ฌ์„ฑโœŒ๏ธ๐ŸคŸ (9)
        • ๐Ÿ“ŠQuant๐Ÿ“ˆ๐Ÿ‘ (5)
        • ๐Ÿฐ๐Ÿ›’๐Ÿฅ‡ (1)
        • ๐Ÿ’Ž ํˆฌ์ž ์‹ค์ „ ๊ฒฝํ—˜ โ˜บ๏ธ (1)
        • ๐Ÿ… Bitcoin 15๊ฐœ ๋ชจ์œผ๊ธฐ : 2040๋…„ 200์–ต+ (0)
        • ๐ŸŒŽ๋ฏธ๊ตญ ์‹œ์žฅ๐Ÿฆ (0)
      • ๐ŸŒค๏ธCloud๐ŸŒค๏ธโ˜๏ธ (2)
        • AWS (1)
        • Kubernetes (0)
        • Google Cloud Professional (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • git
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ฐ€์„ํ•™๊ธฐ
    ๋ฏธ๊ตญ์œ ํ•™
    ์‹œ์นด๊ณ 
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    Java
    CS
    ์‹œ์นด๊ณ ๋Œ€ํ•™๊ต
    ์‹œ์นด๊ณ ๋Œ€
    ๋ฏธ๊ตญ๋น„์ž
    AWS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
์ฆ๊ถŒ๊ฑฐ๋ž˜์†Œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”