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

๋ฐœํ–‰: (2025๋…„ 12์›” 30์ผ ์˜ค์ „ 01:59 GMT+9)
12 min read
์›๋ฌธ: Dev.to

Source: Dev.to

์†Œ๊ฐœ

์ˆ˜๋งŽ์€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ฌธ์ œ๋ฅผ ๊ฒช์–ด์˜จ ์‹œ๋‹ˆ์–ด ์—”์ง€๋‹ˆ์–ด๋กœ์„œ, ๊ณ ๋™์‹œ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ธฐ์ˆ  ์Šคํƒ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ์ €๋Š” ์ผ์ผ ํ™œ์„ฑ ์‚ฌ์šฉ์ž 1์ฒœ๋งŒ ๋ช…์„ ๋ณด์œ ํ•œ ๋Œ€ํ˜• ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ ์žฌ๊ตฌ์ถ• ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊ทนํ•œ ๋ถ€ํ•˜ ์ƒํ™ฉ์—์„œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„ฑ๋Šฅ์„ ์žฌ๊ณ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์šฐ๋ฆฌ ํŒ€์ด 6๊ฐœ์›”๊ฐ„ ์ˆ˜ํ–‰ํ•œ ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์„ฑ๋Šฅ ๋ถ„์„์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์„ฑ๋Šฅ ๊ณผ์ œ

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

1๏ธโƒฃ ์žฅ๊ธฐ ์—ฐ๊ฒฐ ์‹œ๋‚˜๋ฆฌ์˜ค โ€“ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ํŠธ๋ž˜ํ”ฝ

ํ”„๋ ˆ์ž„์›ŒํฌQPSํ‰๊ท  ์ง€์—ฐ ์‹œ๊ฐ„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โ€ฏms0.84โ€ฏms186โ€ฏMB65โ€ฏ%

2๏ธโƒฃ ์žฅ๊ธฐ ์—ฐ๊ฒฐ ์‹œ๋‚˜๋ฆฌ์˜ค โ€“ ์ƒ์„ธ ๋ฉ”ํŠธ๋ฆญ

FrameworkQPSAvg. LatencyError RateThroughputConn. Setup Time
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

3๏ธโƒฃ ๋‹จ๊ธฐ ์—ฐ๊ฒฐ ์‹œ๋‚˜๋ฆฌ์˜ค โ€“ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค (๊ฒฐ์ œ, ๋กœ๊ทธ์ธ)

ํ”„๋ ˆ์ž„์›ŒํฌQPSํ‰๊ท  ์ง€์—ฐ์‹œ๊ฐ„์—ฐ๊ฒฐ ์„ค์ • ์‹œ๊ฐ„๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์˜ค๋ฅ˜์œจ
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โ€ฏ%

4๏ธโƒฃ ์žฅ๊ธฐ ์—ฐ๊ฒฐ ์‹œ๋‚˜๋ฆฌ์˜ค โ€“ ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ ์ดˆ์ 

ํ”„๋ ˆ์ž„์›ŒํฌQPSํ‰๊ท  ์ง€์—ฐ์‹œ๊ฐ„์˜ค๋ฅ˜ ๋น„์œจ์ฒ˜๋ฆฌ๋Ÿ‰์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ ๋น„์œจ
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โ€ฏ%

5๏ธโƒฃ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ โ€“ ํ•ต์‹ฌ ์•ˆ์ •์„ฑ ์š”์†Œ

Hyperlane ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ด์ 

  • objectโ€‘pool + zeroโ€‘copy ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • 1โ€ฏM ๋™์‹œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋Š” โ‰ˆ96โ€ฏMB ์ˆ˜์ค€์„ ์œ ์ง€ํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ๋ชจ๋“  ๊ฒฝ์Ÿ์‚ฌ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ฎ์€ ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค.

Node.js ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ

  • V8 ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋†’์€ ๋ถ€ํ•˜์—์„œ ๋ˆˆ์— ๋„๋Š” ์ผ์‹œ ์ •์ง€๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 1โ€ฏGB์— ๋„๋‹ฌํ•˜๋ฉด GC ์ผ์‹œ ์ •์ง€ ์‹œ๊ฐ„์ด 200โ€ฏms๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์–ด ์‹ฌ๊ฐํ•œ ์ง€์—ฐ ๊ธ‰์ฆ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

6๏ธโƒฃ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ์ธ์‚ฌ์ดํŠธ

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

7๏ธโƒฃ CPU Utilization โ€“ Efficiency Matters

FrameworkCPU Usage
Hyperlane42โ€ฏ% (lowest)
Tokio45โ€ฏ%
Rocket48โ€ฏ%
Rust std lib44โ€ฏ%
Gin52โ€ฏ%
Go std lib49โ€ฏ%
Node std lib65โ€ฏ% (highest)

Hyperlane ์€ ๋™์ผํ•œ ์š”์ฒญ๋Ÿ‰์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ ์€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ๋น„์šฉ์„ ์ง์ ‘์ ์œผ๋กœ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Node.js ์˜ ๋†’์€ CPU ์‚ฌ์šฉ๋Ÿ‰์€ V8์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋นˆ๋ฒˆํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‚ฌ์ดํด ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

8๏ธโƒฃ ์‹ฌ์ธต ํƒ๊ตฌ โ€“ Node.js ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณ‘๋ชฉ ํ˜„์ƒ

// Minimal HTTP server (Node.js)
const http = require('http');

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

server.listen(60000, '127.0.0.1');

๋ฌธ์ œ ๋ถ„์„

IssueExplanation
Frequent memory allocation๋นˆ๋ฒˆํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
๋งค ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ServerResponse ๊ฐ์ฒด(๋ฐ ๊ด€๋ จ ๋ฒ„ํผ)๊ฐ€ ์ƒ์„ฑ๋˜์–ด GC์— ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค.
String concatenation overhead๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์˜ค๋ฒ„ํ—ค๋“œ
์•„์ฃผ ์ž‘์€ 'Hello' ํŽ˜์ด๋กœ๋“œ์กฐ์ฐจ๋„ ์ž„์‹œ ๋ฌธ์ž์—ด ํ• ๋‹น์„ ๊ฐ•์ œํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋™์‹œ์„ฑ์—์„œ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.
V8 GC pausesV8 GC ์ผ์‹œ ์ •์ง€
ํž™์ด ์ปค์ง์— ๋”ฐ๋ผ stopโ€‘theโ€‘world GC ์‚ฌ์ดํด์ด ๊ธธ์–ด์ ธ ์ง€์—ฐ์ด ๊ธ‰์ฆํ•ฉ๋‹ˆ๋‹ค(๋ฉ”๋ชจ๋ฆฌ โ‰ˆ1โ€ฏGB์ผ ๋•Œ >200โ€ฏms ๊ด€์ธก).
Singleโ€‘threaded event loop๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„
CPU ์ง‘์•ฝ ์ž‘์—…(์˜ˆ: ๋ฌด๊ฑฐ์šด JSON ํŒŒ์‹ฑ)์ด ๋ฃจํ”„๋ฅผ ์ฐจ๋‹จํ•ด ์‘๋‹ต ์‹œ๊ฐ„๊ณผ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

9๏ธโƒฃ ํ•ต์‹ฌ ์š”์•ฝ

InsightRecommendation
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ(Hyperlane, Rust ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋Š” ๋Œ€๊ทœ๋ชจ ์žฅ๊ธฐ ์—ฐ๊ฒฐ ์›Œํฌ๋กœ๋“œ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.์ง€์†์ ์ธ ์—ฐ๊ฒฐ์ด ํŠธ๋ž˜ํ”ฝ์„ ์ง€๋ฐฐํ•  ๋•Œ ์ด๋ฅผ ์„ ํ˜ธํ•˜์‹ญ์‹œ์˜ค.
์ €์ง€์—ฐ ๋‹จ๊ธฐ ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ๋Š” ์ตœ์ ํ™”๋œ TCP ์Šคํƒ๊ณผ ์š”์ฒญ๋‹น ์ตœ์†Œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.Hyperlane์˜ 0.8โ€ฏms ์„ค์ • ์‹œ๊ฐ„์€ ๊ฐ•๋ ฅํ•œ ๋ฒค์น˜๋งˆํฌ์ž…๋‹ˆ๋‹ค.
CPU ํšจ์œจ์„ฑ์€ ํ•˜๋“œ์›จ์–ด ๋น„์šฉ์„ ์ง์ ‘ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.Hyperlane์˜ 42โ€ฏ% CPU ์‚ฌ์šฉ๋Ÿ‰์€ ๊ฐ€์žฅ ๋น„์šฉ ํšจ์œจ์ ์ธ ์„ ํƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Node.js๋Š” ๊ณ ๋™์‹œ์„ฑยท๋ฉ”๋ชจ๋ฆฌ ์ง‘์•ฝ ์„œ๋น„์Šค์—์„œ ๋ณ‘๋ชฉ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ•ต์‹ฌ ๊ฒฝ๋กœ๋ฅผ ๋” ํšจ์œจ์ ์ธ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์˜คํ”„๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์ ๊ทน์ ์ธ ํ’€๋ง/์›Œ์ปค ์Šค๋ ˆ๋“œ ์ „๋žต์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.
Tokio๋Š” ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ์— ๋›ฐ์–ด๋‚˜๋ฉฐ(P99 ์ง€์—ฐ์‹œ๊ฐ„ ์ตœ์ €) Hyperlane๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.์ดˆ์ €์ง€์—ฐ ๊ผฌ๋ฆฌ ์ง€์—ฐ์ด ์ตœ์šฐ์„ ์ผ ๋•Œ Tokio๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
Go ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์šฉ๋Ÿ‰์œผ๋กœ ๊ท ํ˜• ์žกํžŒ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.ํŠนํžˆ ์ƒํƒœ๊ณ„ ์ง€์›์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ๋งŽ์€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ฒฌ๊ณ ํ•œ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

์œ„ ๋ฐ์ดํ„ฐ๋Š” ์ผ์ผ ํ™œ์„ฑ ์‚ฌ์šฉ์ž 1์ฒœ๋งŒ ๋ช…(10โ€ฏMโ€‘DAU) ๊ทœ๋ชจ์˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์—์„œ ์ง€์†์ ์ธ ๊ณ ๋ถ€ํ•˜ ์ƒํ™ฉ์—์„œ ์ธก์ •๋œ ์‹ค์ œ ์ƒ์‚ฐ ํ™˜๊ฒฝ์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, CPU ํšจ์œจ์„ฑ, ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ ํŠน์„ฑ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ชฉํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์šด์˜ ๋น„์šฉ ๋ชจ๋‘์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์‹ ์˜ ๊ณ ๋™์‹œ์„ฑ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ณด๋‹ค ์‹ฌ์ธต์ ์ธ ํ”„๋กœํŒŒ์ผ๋ง ๊ธฐ๋ฒ•์ด๋‚˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ์—ฐ๋ฝ ์ฃผ์„ธ์š”.

Node.js ๋ฌธ์ œ

  • res.end() ๋‚ด๋ถ€์—์„œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Event Loop ์ฐจ๋‹จ: ๋™๊ธฐ์‹ ์ž‘์—…์ด ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ํ’€ ๋ถ€์กฑ: ๊ฐ ์—ฐ๊ฒฐ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Go Language โ€“ ์žฅ์  ๋ฐ ๋‹จ์ 

Example Code

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)
}

์žฅ์  ๋ถ„์„

  • Lightweight Goroutines: ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ณ ๋ฃจํ‹ด์„ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Builtโ€‘in Concurrency Safety: ์ฑ„๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋ ˆ์ด์Šค ์ปจ๋””์…˜์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • Optimized Standard Library: net/http ํŒจํ‚ค์ง€๋Š” ๅ……ๅˆ† optimized ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๋‹จ์  ๋ถ„์„

  • GC Pressure: ๅคง้‡ shortโ€‘lived objects๊ฐ€ GC ๋ถ€ํ•˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
  • Memory Usage: ๊ณ ๋ฃจํ‹ด ์Šคํƒ์€ ์ดˆ๊ธฐ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • Connection Management: ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฐ๊ฒฐ ํ’€ ๊ตฌํ˜„์ด ์ถฉ๋ถ„ํžˆ ์œ ์—ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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(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);
    }
}

์žฅ์  ๋ถ„์„

  • Zeroโ€‘cost Abstractions: ์ปดํŒŒ์ผ ํƒ€์ž„ ์ตœ์ ํ™”, ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์Œ.
  • Memory Safety: ์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€.
  • No GC Pauses: ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•œ ์„ฑ๋Šฅ ๋ณ€๋™์ด ์—†์Œ.

๋‹จ์  ๋ถ„์„

  • Development Complexity: ๋ผ์ดํ”„ํƒ€์ž„ ๊ด€๋ฆฌ๋กœ ๊ฐœ๋ฐœ ๋‚œ์ด๋„ ์ƒ์Šน.
  • Compilation Time: ๋ณต์žกํ•œ ์ œ๋„ค๋ฆญ์œผ๋กœ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์ฆ๊ฐ€.
  • Ecosystem: Go์™€ Node.js์— ๋น„ํ•ด ์ƒํƒœ๊ณ„๊ฐ€ ๋œ ์„ฑ์ˆ™ํ•จ.

ํ”„๋กœ๋•์…˜ ์ˆ˜์ค€ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜ (์ถ”์ฒœ)

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

  • Hyperlane ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ํ’€ ํฌ๊ธฐ๋ฅผ CPU ์ฝ”์–ด ์ˆ˜ ร— 2โ€“4 ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์„ค์ • ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด Keepโ€‘Alive๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

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

  • ๋น„๋™๊ธฐ ์ž‘์—…์„ ์œ„ํ•ด Tokio ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ฉ๋ฆฌ์ ์ธ ํƒ€์ž„์•„์›ƒ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • circuitโ€‘breaker ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

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

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ ํ’€์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • readโ€‘write separation์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ฉ๋ฆฌ์ ์ธ ์บ์‹ฑ ์ „๋žต์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

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

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

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

๐Ÿ’ก ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ์˜ ๋„์ „ ๊ณผ์ œ ์šฐ๋ฆฌ eโ€‘commerce ํ”Œ๋žซํผ ์žฌ๊ตฌ์ถ• ํ”„๋กœ์ ํŠธ์—์„œ ์ผ์ผ ํ™œ์„ฑ ์‚ฌ์šฉ์ž ์•ฝ 1,000๋งŒ ๋ช…์„ ๋Œ€์ƒ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ „ํ˜•์ ์ธ โ€ฆ

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

๐Ÿ“Š Productionโ€‘Environment Performance Analysis ์„ ์ž„ ์—”์ง€๋‹ˆ์–ด๋กœ์„œ ์ˆ˜๋งŽ์€ ํ”„๋กœ๋•์…˜ ๊ณผ์ œ์— ์ง๋ฉดํ•ด ๋ณธ ๋‚˜๋Š” ์˜ฌ๋ฐ”๋ฅธ โ€ฆ ์„ ํƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค.