๐Ÿ”ฅ_๊ณ ๋™์‹œ์„ฑ_ํ”„๋ ˆ์ž„์›Œํฌ_์„ ํƒ_๊ธฐ์ˆ _๊ฒฐ์ •[20260102233018]

๋ฐœํ–‰: (2026๋…„ 1์›” 3์ผ ์˜ค์ „ 08:30 GMT+9)
11 min read
์›๋ฌธ: Dev.to

Source: Dev.to

๋ฒˆ์—ญํ•  ํ…์ŠคํŠธ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฒˆ์—ญ์ด ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ˆ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ ๊ณผ์ œ

์šฐ๋ฆฌ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ „ํ˜•์ ์ธ ์„ฑ๋Šฅ ๊ณผ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค:

์‹œ๋‚˜๋ฆฌ์˜ค์„ค๋ช…
๐Ÿ›’ ํ”Œ๋ž˜์‹œ ์„ธ์ผ์ฃผ์š” ํ”„๋กœ๋ชจ์…˜(์˜ˆ: ๋“€์–ผโ€ฏ11) ๊ธฐ๊ฐ„ ๋™์•ˆ ์ œํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€๋Š” ์ดˆ๋‹น ์ˆ˜์‹ญ๋งŒ ๊ฑด์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋™์‹œ ์ฒ˜๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๊ทน์‹ฌํ•œ ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค.
๐Ÿ’ณ ๊ฒฐ์ œ ์‹œ์Šคํ…œ๊ฒฐ์ œ ์„œ๋น„์Šค๋Š” ๋งŽ์€ ์ˆ˜์˜ ์งง์€ ์ˆ˜๋ช… ์—ฐ๊ฒฐ์„ ๋ฐ›์œผ๋ฉฐ, ๊ฐ๊ฐ ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค.
๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ํ†ต๊ณ„์šฐ๋ฆฌ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋Š” ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

Source: โ€ฆ

๐Ÿ“Š ํ”„๋กœ๋•์…˜โ€‘ํ™˜๊ฒฝ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ ๋น„๊ต

๐Ÿ”“ Keepโ€‘Alive ํ™œ์„ฑํ™” (Longโ€‘Connection ์‹œ๋‚˜๋ฆฌ์˜ค)

Longโ€‘connection ํŠธ๋ž˜ํ”ฝ์€ ์ „์ฒด ๋ถ€ํ•˜์˜ **>โ€ฏ70โ€ฏ%**๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ํ‘œ๋Š” ์ œํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ ‘๊ทผ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•œ wrk ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

FrameworkQPSํ‰๊ท  ์ง€์—ฐ์‹œ๊ฐ„P99 ์ง€์—ฐ์‹œ๊ฐ„๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰CPU ์‚ฌ์šฉ๋ฅ 
Tokio340,130.921.22โ€ฏms5.96โ€ฏms128โ€ฏMB45โ€ฏ%
Hyperlane334,888.273.10โ€ฏms13.94โ€ฏms96โ€ฏMB42โ€ฏ%
Rocket298,945.311.42โ€ฏms6.67โ€ฏms156โ€ฏMB48โ€ฏ%
Rustโ€ฏStdโ€ฏLib291,218.961.64โ€ฏms8.62โ€ฏms84โ€ฏMB44โ€ฏ%
Gin242,570.161.67โ€ฏms4.67โ€ฏms112โ€ฏMB52โ€ฏ%
Goโ€ฏStdโ€ฏLib234,178.931.58โ€ฏms1.15โ€ฏms98โ€ฏMB49โ€ฏ%
Nodeโ€ฏStdโ€ฏLib139,412.132.58โ€ฏms837.62โ€ฏยตs186โ€ฏMB65โ€ฏ%

ab ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ โ€“ ๊ฒฐ์ œ ์š”์ฒญ (shortโ€‘connection)

FrameworkQPSํ‰๊ท  ์ง€์—ฐ์‹œ๊ฐ„์˜ค๋ฅ˜ ๋น„์œจ์ฒ˜๋ฆฌ๋Ÿ‰์—ฐ๊ฒฐ ์„ค์ • ์‹œ๊ฐ„
Hyperlane316,211.633.162โ€ฏms0โ€ฏ%32,115.24โ€ฏKB/s0.3โ€ฏms
Tokio308,596.263.240โ€ฏms0โ€ฏ%28,026.81โ€ฏKB/s0.3โ€ฏms
Rocket267,931.523.732โ€ฏms0โ€ฏ%70,907.66โ€ฏKB/s0.2โ€ฏms
Rustโ€ฏStdโ€ฏLib260,514.563.839โ€ฏms0โ€ฏ%23,660.01โ€ฏKB/s21.2โ€ฏms
Goโ€ฏStdโ€ฏLib226,550.344.414โ€ฏms0โ€ฏ%34,071.05โ€ฏKB/s0.2โ€ฏms
Gin224,296.164.458โ€ฏms0โ€ฏ%31,760.69โ€ฏKB/s0.2โ€ฏms
Nodeโ€ฏStdโ€ฏLib85,357.1811.715โ€ฏms81.2โ€ฏ%4,961.70โ€ฏKB/s33.5โ€ฏms

๐Ÿ”’ Keepโ€‘Alive ๋น„ํ™œ์„ฑํ™” (Shortโ€‘Connection ์‹œ๋‚˜๋ฆฌ์˜ค)

Shortโ€‘connection ํŠธ๋ž˜ํ”ฝ์€ ์ „์ฒด ๋ถ€ํ•˜์˜ **โ‰ˆโ€ฏ30โ€ฏ%**๋ฅผ ์ฐจ์ง€ํ•˜์ง€๋งŒ ๊ฒฐ์ œ, ๋กœ๊ทธ์ธ ๋“ฑ์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

wrk ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ โ€“ ๋กœ๊ทธ์ธ ์š”์ฒญ

FrameworkQPSํ‰๊ท  ์ง€์—ฐ์‹œ๊ฐ„์—ฐ๊ฒฐ ์„ค์ • ์‹œ๊ฐ„๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์˜ค๋ฅ˜ ๋น„์œจ
Hyperlane51,031.273.51โ€ฏms0.8โ€ฏms64โ€ฏMB0โ€ฏ%
Tokio49,555.873.64โ€ฏms0.9โ€ฏms72โ€ฏMB0โ€ฏ%
Rocket49,345.763.70โ€ฏms1.1โ€ฏms88โ€ฏMB0โ€ฏ%
Gin40,149.754.69โ€ฏms1.3โ€ฏms76โ€ฏMB0โ€ฏ%
Goโ€ฏStdโ€ฏLib38,364.064.96โ€ฏms1.5โ€ฏms68โ€ฏMB0โ€ฏ%
Rustโ€ฏStdโ€ฏLib30,142.5513.39โ€ฏms39.09โ€ฏms56โ€ฏMB0โ€ฏ%
Nodeโ€ฏStdโ€ฏLib28,286.964.76โ€ฏms3.48โ€ฏms92โ€ฏMB0.1โ€ฏ%

ab ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ โ€“ ๊ฒฐ์ œ ์ฝœ๋ฐฑ

FrameworkQPSํ‰๊ท  ์ง€์—ฐ์‹œ๊ฐ„์˜ค๋ฅ˜ ๋น„์œจ์ฒ˜๋ฆฌ๋Ÿ‰์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ ๋น„์œจ
Tokio51,825.1319.296โ€ฏms0โ€ฏ%4,453.72โ€ฏKB/s0โ€ฏ%
Hyperlane51,554.4719.397โ€ฏms0โ€ฏ%5,387.04โ€ฏKB/s0โ€ฏ%
Rocket49,621.0220.153โ€ฏms0โ€ฏ%11,969.13โ€ฏKB/s0โ€ฏ%
Goโ€ฏStdโ€ฏLib47,915.2020.870โ€ฏms0โ€ฏ%6,972.04โ€ฏKB/s0โ€ฏ%
Gin47,081.0521.240โ€ฏms0โ€ฏ%6,436.86โ€ฏKB/s0โ€ฏ%
Nodeโ€ฏStdโ€ฏLib44,763.1122.340โ€ฏms0โ€ฏ%4,983.39โ€ฏKB/s0โ€ฏ%
Rustโ€ฏStdโ€ฏLib31,511.0031.735โ€ฏms0โ€ฏ%2,707.98โ€ฏKB/s0โ€ฏ%

๐ŸŽฏ ์‹ฌ์ธต ๊ธฐ์ˆ  ๋ถ„์„

๐Ÿš€ ๋ฉ”๋ชจ๋ฆฌโ€‘๊ด€๋ฆฌ ๋น„๊ต

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์ •์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

  • Hyperlane Framework โ€“ ๊ฐ์ฒดโ€‘ํ’€๋ง๊ณผ ์ œ๋กœโ€‘์นดํ”ผ ์„ค๊ณ„๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. 1โ€ฏMโ€‘๋™์‹œโ€‘์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์—์„œ 96โ€ฏMB๋งŒ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ๋ชจ๋“  ๊ฒฝ์Ÿ์‚ฌ๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค.
  • Node.js โ€“ V8 ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ˆˆ์— ๋„๋Š” ์ผ์‹œ ์ •์ง€๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ โ‰ˆโ€ฏ1โ€ฏGB์— ๋‹ฌํ•˜๋ฉด GC ์ผ์‹œ ์ •์ง€ ์‹œ๊ฐ„์ด 200โ€ฏms๋ฅผ ๋„˜์„ ์ˆ˜ ์žˆ์–ด ์‹ฌ๊ฐํ•œ ์ง€์—ฐ ์ŠคํŒŒ์ดํฌ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

โšก ์—ฐ๊ฒฐโ€‘๊ด€๋ฆฌ ํšจ์œจ์„ฑ

์‹œ๋‚˜๋ฆฌ์˜ค๊ด€์ฐฐ ๋‚ด์šฉ
๋‹จ๊ธฐโ€‘์—ฐ๊ฒฐHyperlane์˜ ์—ฐ๊ฒฐ ์„ค์ • ์‹œ๊ฐ„์€ 0.8โ€ฏms๋กœ, Rustโ€ฏStdโ€ฏLib์˜ 39.09โ€ฏms๋ณด๋‹ค ํ˜„์ €ํžˆ ๋‚ฎ์•„ TCPโ€‘์Šคํƒ ์ตœ์ ํ™”๊ฐ€ ์ ๊ทน์ ์ž„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
์žฅ๊ธฐโ€‘์—ฐ๊ฒฐTokio๊ฐ€ P99 ์ง€์—ฐ ์‹œ๊ฐ„ (5.96โ€ฏms) ์ตœ์ €์น˜๋ฅผ ๊ธฐ๋กํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ ์ฒ˜๋ฆฌ์— ๋›ฐ์–ด๋‚จ์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ Hyperlane๋ณด๋‹ค ๋†’์Šต๋‹ˆ๋‹ค.

๐Ÿ”ง CPUโ€‘์‚ฌ์šฉ ํšจ์œจ์„ฑ

  • Hyperlane Framework โ€“ ์žฅ๊ธฐโ€‘์—ฐ๊ฒฐ ๋ฐ ๋‹จ๊ธฐโ€‘์—ฐ๊ฒฐ ์›Œํฌ๋กœ๋“œ ๋ชจ๋‘์—์„œ **CPU ์‚ฌ์šฉ๋ฅ ์ด ๊ฐ€์žฅ ๋‚ฎ์Œ (โ‰ˆโ€ฏ42โ€ฏ%)**์„ ์ง€์†์ ์œผ๋กœ ๋ณด์—ฌ, CPU ์‚ฌ์ดํด๋‹น ์ž‘์—…๋Ÿ‰์ด ๊ฐ€์žฅ ๋†’์Šต๋‹ˆ๋‹ค.
  • ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ(Tokio, Rocket, Go ๋“ฑ)๋Š” 44โ€ฏ%โ€“55โ€ฏ% ๋ฒ”์œ„์— ๋จธ๋ฌด๋ฅด๊ณ , Node.js๊ฐ€ ๊ฐ€์žฅ ๋†’์€ **โ‰ˆโ€ฏ65โ€ฏ%**๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์š”์•ฝ

  • Hyperlane โ€“ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ๋น ๋ฅธ ์—ฐ๊ฒฐ ์„ค์ •, ์ตœ์†Œํ•œ์˜ CPU ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‘ ๊ฐ–์ถ˜ ์ตœ๊ณ ์˜ ๊ท ํ˜•์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ณ ๋™์‹œ์„ฑยท์žฅ๊ธฐ ์—ฐ๊ฒฐ ์›Œํฌ๋กœ๋“œ(์˜ˆ: ํ”Œ๋ž˜์‹œ ์„ธ์ผ ํŽ˜์ด์ง€)์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
  • Tokio โ€“ ์žฅ๊ธฐ ์—ฐ๊ฒฐ์—์„œ ์ง€์—ฐ ์‹œ๊ฐ„ ์•ˆ์ •์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, ๋‚ฎ์€ ๊ผฌ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„œ๋น„์Šค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • Node.js โ€“ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ธํ•œ ์ง€์—ฐ ๋ฐ ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ/CPU ์‚ฌ์šฉ๋Ÿ‰ ๋•Œ๋ฌธ์— ์ดˆ๊ณ ๋™์‹œ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Go์™€ Gin โ€“ ๊ดœ์ฐฎ์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ๊ณผ CPU ํ™œ์šฉ๋„ ๋ฉด์—์„œ Hyperlane์— ๋’ค์ฒ˜์ง‘๋‹ˆ๋‹ค.

ํ•ต์‹ฌ: ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด(์žฅ๊ธฐ vs. ๋‹จ๊ธฐ ์—ฐ๊ฒฐ)์„ ๊ธฐ์ค€์œผ๋กœ ์Šคํƒ์„ ์„ ํƒํ•˜๊ณ , ์ง€์—ฐ ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ, CPU ์ž์› ๊ฐ„์˜ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ณ ๋ คํ•˜์„ธ์š”.

Node.js CPU Issues

Node.js ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” V8 ์—”์ง„์˜ ์ธํ„ฐํ”„๋ฆฌํ…Œ์ด์…˜, ์‹คํ–‰ ๋ฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์˜ค๋ฒ„ํ—ค๋“œ ๋•Œ๋ฌธ์— CPU ์‚ฌ์šฉ๋Ÿ‰์ด **65โ€ฏ%**๊นŒ์ง€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋™์‹œ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์ด๋Š” ๊ณผ๋„ํ•œ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ ๊ตฌํ˜„ ์„ธ๋ถ€ ๋ถ„์„

๐Ÿข Node.js ๊ตฌํ˜„์˜ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ

const http = require('http');

const server = http.createServer((req, res) => {
  // This simple handler function actually has multiple performance issues
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello');
});

server.listen(60000, '127.0.0.1');

๋ฌธ์ œ ๋ถ„์„

๋ฌธ์ œ์„ค๋ช…
๋นˆ๋ฒˆํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์‘๋‹ต ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์˜ค๋ฒ„ํ—ค๋“œres.end()๊ฐ€ ๋‚ด๋ถ€ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ๋ฃจํ”„ ์ฐจ๋‹จ๋™๊ธฐ ์ž‘์—…์ด ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ ํ’€ ๋ถ€์กฑ๊ฐ ์—ฐ๊ฒฐ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿน Go ๊ตฌํ˜„์˜ ๋™์‹œ์„ฑ ์žฅ์ 

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello")
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":60000", nil)
}

์žฅ์  ๋ถ„์„

์žฅ์ ์„ค๋ช…
๊ฐ€๋ฒผ์šด ๊ณ ๋ฃจํ‹ด์ˆ˜์ฒœ ๊ฐœ์˜ ๊ณ ๋ฃจํ‹ด์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด์žฅ๋œ ๋™์‹œ์„ฑ ์•ˆ์ „์„ฑ์ฑ„๋„์ด ๋ ˆ์ด์Šค ์กฐ๊ฑด์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ตœ์ ํ™”๋œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌnet/http๋Š” ์„ฑ๋Šฅ์— ๋งž๊ฒŒ ๊ณ ๋„๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์  ๋ถ„์„

๋‹จ์ ์„ค๋ช…
GC ์••๋ฐ•๋งŽ์€ ๋‹จ๋ช… ๊ฐ์ฒด๊ฐ€ GC ์ž‘์—…๋Ÿ‰์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณ ๋ฃจํ‹ด ์Šคํƒ์€ ๋น„๊ต์  ํฐ ํฌ๊ธฐ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋‚ด์žฅ๋œ ์—ฐ๊ฒฐ ํ’€์€ ์œ ์—ฐ์„ฑ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ Rust ๊ตฌํ˜„์˜ ์‹œ์Šคํ…œ ์ˆ˜์ค€ ์ตœ์ ํ™”

use std::io::prelude::*;
use std::net::{TcpListener, TcpStream};

fn handle_client(mut stream: TcpStream) {
    let response = "HTTP/1.1 200 OK\r\n\r\nHello";
    stream.write_all(response.as_bytes()).unwrap();
    stream.flush().unwrap();
}

fn main() {
    let listener = TcpListener::bind("127.0.0.1:60000").unwrap();

    for stream in listener.incoming() {
        let stream = stream.unwrap();
        handle_client(stream);
    }
}

์žฅ์  ๋ถ„์„

์žฅ์ ์„ค๋ช…
์ œ๋กœ ๋น„์šฉ ์ถ”์ƒํ™”์ปดํŒŒ์ผ ์‹œ ์ตœ์ ํ™”๊ฐ€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์—†์•ฑ๋‹ˆ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์†Œ์œ ๊ถŒ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์Šค๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
GC ์ •์ง€ ์—†์Œ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์—†์–ด ์•ˆ์ •์ ์ธ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์  ๋ถ„์„

๋‹จ์ ์„ค๋ช…
๊ฐœ๋ฐœ ๋ณต์žก์„ฑ๋ผ์ดํ”„ํƒ€์ž„ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ ์‹œ๊ฐ„๋ณต์žกํ•œ ์ œ๋„ค๋ฆญ์ด ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
์ƒํƒœ๊ณ„ ์„ฑ์ˆ™๋„Go๋‚˜ Node.js์— ๋น„ํ•ด ์ž‘์€ ์ƒํƒœ๊ณ„์ž…๋‹ˆ๋‹ค.

์œ„ ํ‘œ๋Š” ๊ณ ๋™์‹œ์„ฑ ์„œ๋ฒ„ ์ž‘์—…์— ๋Œ€ํ•œ Node.js, Go, Rust์˜ ์„ฑ๋Šฅ ํŠน์„ฑ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

Source: โ€ฆ

๐ŸŽฏ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ฐฐํฌ ๊ถŒ์žฅ ์‚ฌํ•ญ

๐Ÿช ์ „์ž์ƒ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

์šด์˜ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

1. ์•ก์„ธ์Šค ๋ ˆ์ด์–ด

  • Framework: Hyperlane
  • Connection pool: CPU ์ฝ”์–ด ์ˆ˜โ€ฏร—โ€ฏ2โ€“4
  • Keepโ€‘Alive: ์—ฐ๊ฒฐ ์„ค์ • ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ™œ์„ฑํ™”

2. ๋น„์ฆˆ๋‹ˆ์Šค ๋ ˆ์ด์–ด

  • Framework: Tokio (๋น„๋™๊ธฐ ์ž‘์—…)
  • Timeouts: ๊ฐ ์„œ๋น„์Šค ํ˜ธ์ถœ์— ํ•ฉ๋ฆฌ์ ์ธ ๊ฐ’ ์„ค์ •
  • Reliability: ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌํ˜„

3. ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ์œ„ํ•œ ์ปค๋„ฅ์…˜ ํ’€ ์‚ฌ์šฉ
  • ์ฝ๊ธฐโ€‘์“ฐ๊ธฐ ๋ถ„๋ฆฌ ์ ์šฉ
  • ์ฝ๊ธฐ/์“ฐ๊ธฐ ํŒจํ„ด์— ๋งž๋Š” ์บ์‹ฑ ์ „๋žต ์„ ํƒ

๐Ÿ’ณ ๊ฒฐ์ œ ์‹œ์Šคํ…œ ์ตœ์ ํ™”

์—ฐ๊ฒฐ ๊ด€๋ฆฌ

  • Hyperlane์˜ ๋‹จ๊ธฐ ์—ฐ๊ฒฐ ์ตœ์ ํ™” ์‚ฌ์šฉ
  • TCP Fast Open ํ™œ์„ฑํ™”
  • ๊ฐ€๋Šฅํ•œ ํ•œ ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

  • ๋ฐฑ์˜คํ”„๋ฅผ ํฌํ•จํ•œ ์žฌ์‹œ๋„ ๋กœ์ง ๊ตฌํ˜„
  • ์ ์ ˆํ•œ ํƒ€์ž„์•„์›ƒ ๊ฐ’ ์„ค์ •
  • ์‚ฌํ›„ ๋ถ„์„์„ ์œ„ํ•œ ์ƒ์„ธ ์˜ค๋ฅ˜ ์ •๋ณด ๋กœ๊ทธ ๊ธฐ๋ก

๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ

  • ์‹ค์‹œ๊ฐ„์œผ๋กœ QPS์™€ ๋ ˆ์ดํ„ด์‹œ ์ถ”์ 
  • ๋ช…ํ™•ํ•œ ์•Œ๋ฆผ ์ž„๊ณ„๊ฐ’ ์ •์˜ (์˜ˆ: ๋ ˆ์ดํ„ด์‹œโ€ฏ>โ€ฏ200โ€ฏms)
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

๐Ÿ”ฅ_๊ณ ๋™์‹œ์„ฑ_ํ”„๋ ˆ์ž„์›Œํฌ_์„ ํƒ_๊ธฐ์ˆ _๊ฒฐ์ •[20260102134534]

๐Ÿ“ˆ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ ๊ณผ์ œ ์šฐ๋ฆฌ eโ€‘commerce ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์ „ํ˜•์ ์ธ ์„ฑ๋Šฅ ๊ณผ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค: | Scenario | Description | |

๐Ÿ”ฅ_๊ณ ์„ฑ๋Šฅ_๋™์‹œ์„ฑ_ํ”„๋ ˆ์ž„์›Œํฌ_์„ ํƒ_๊ธฐ์ˆ _๊ฒฐ์ •[20251231184608]

๐Ÿ“ˆ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ ๋„์ „ ๊ณผ์ œ ์šฐ๋ฆฌ eโ€‘commerce ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์ „ํ˜•์ ์ธ ์„ฑ๋Šฅ ๊ณผ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค: ๐Ÿ›’ ํ”Œ๋ž˜์‹œโ€‘์„ธ์ผ ์‹œ๋‚˜๋ฆฌ์˜ค maj ๋™์•ˆ

๐Ÿ”ฅ_๊ณ ์„ฑ๋Šฅ_๋™์‹œ์„ฑ_ํ”„๋ ˆ์ž„์›Œํฌ_์„ ํƒ_๊ธฐ์ˆ _๊ฒฐ์ •[20260102150917]

ํ”„๋ ˆ์ž„์›Œํฌ ์„ฑ๋Šฅ ๋ถ„์„ โ€“ 10 Mโ€‘DAU ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์—์„œ 6๊ฐœ์›”๊ฐ„์˜ ์ŠคํŠธ๋ ˆ์Šคโ€‘ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์‹ค์ œ ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ.