๐_๊ถ๊ทน์_์น_ํ๋ ์์ํฌ_์๋_๋๊ฒฐ[20251231195712]
Source: Dev.to
์์ ์ ๊ณต๋ Source ๋งํฌ ์ธ์ ๋ฒ์ญํ ํ
์คํธ๋ฅผ ์๋ ค์ฃผ์๋ฉด, ํด๋น ๋ด์ฉ์ ํ๊ตญ์ด๋ก ๋ฒ์ญํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
(์ฝ๋ ๋ธ๋ก์ด๋ URL์ ๊ทธ๋๋ก ์ ์งํ๊ณ , ๋งํฌ๋ค์ด ํ์๊ณผ ๊ธฐ์ ์ฉ์ด๋ ๊ทธ๋๋ก ๋ณด์กดํฉ๋๋ค.)
๐ ์๊ฐ
10๋ ๊ฒฝ๋ ฅ์ ํโ์คํ ์์ง๋์ด๋ก์, ๋๋ ์ด๊ธฐ jQuery ์๋๋ถํฐ ์ค๋๋ ๊ณ ์ฑ๋ฅ Rust ํ๋ ์์ํฌ์ ์ด๋ฅด๊ธฐ๊น์ง ์น ํ๋ ์์ํฌ์ ํฅ๋ง์ฑ์ ๋ฅผ ์ง์ผ๋ดค๋ค. 2024๋ ํ์ฌ, ์ฑ๋ฅ์ ๋ํ ๊ธฐ๋์น๋ ๊ทธ ์ด๋ ๋๋ณด๋ค ๋๋ค: ์ฌ์ฉ์๋ค์ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ, ์์ ํ๋ซํผ, ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ๋ฆฌ์ด ์์ค์ ์๋ต ์๊ฐ์ ์๊ตฌํ๋ค.
๋๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์น ํ๋ ์์ํฌ๋ค์ ๋์์ผ๋ก ํ ๋ฌ ๋์ ํฌ๊ด์ ์ธ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํํ๋ค. ํ ์คํธ ๋์์๋ Tokio, Rocket, Gin, Go์ Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Node.js ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ Hyperlane ํ๋ ์์ํฌ๊ฐ ํฌํจ๋๋ค.
ํ ์คํธ ํ๊ฒฝ
| Component | Specification |
|---|---|
| Server | Intel XeonโฏE5โ2686โฏv4 @โฏ2.30โฏGHz |
| Memory | 32โฏGB DDR4 |
| Network | Gigabit Ethernet |
| OS | Ubuntuโฏ20.04โฏLTS |
๐ ์ ์ฒด ์ฑ๋ฅ ๋น๊ต ๋ฐ์ดํฐ
๐ KeepโAlive ํ์ฑํ โ wrk ์คํธ๋ ์ค ํ
์คํธ
360 ๋์ ์ฐ๊ฒฐ, 60โฏ์ด ์ง์
| Framework | QPS | Latency | Transfer Rate | Ranking |
|---|---|---|---|---|
| Tokio | 340,130.92 | 1.22โฏms | 30.17โฏMB/s | ๐ฅ |
| Hyperlane | 334,888.27 | 3.10โฏms | 33.21โฏMB/s | ๐ฅ |
| Rocket | 298,945.31 | 1.42โฏms | 68.14โฏMB/s | ๐ฅ |
| Rust std lib | 291,218.96 | 1.64โฏms | 25.83โฏMB/s | 4๏ธโฃ |
| Gin | 242,570.16 | 1.67โฏms | 33.54โฏMB/s | 5๏ธโฃ |
| Go std lib | 234,178.93 | 1.58โฏms | 32.38โฏMB/s | 6๏ธโฃ |
| Node std lib | 139,412.13 | 2.58โฏms | 19.81โฏMB/s | 7๏ธโฃ |
๐ KeepโAlive ํ์ฑํ โ ab ์คํธ๋ ์ค ํ
์คํธ
1000 ๋์ ์ฐ๊ฒฐ, 1โฏM ์์ฒญ
| Framework | QPS | Latency | Transfer Rate | Ranking |
|---|---|---|---|---|
| Hyperlane | 316,211.63 | 3.162โฏms | 32,115.24โฏKB/s | ๐ฅ |
| Tokio | 308,596.26 | 3.240โฏms | 28,026.81โฏKB/s | ๐ฅ |
| Rocket | 267,931.52 | 3.732โฏms | 70,907.66โฏKB/s | ๐ฅ |
| Rust std lib | 260,514.56 | 3.839โฏms | 23,660.01โฏKB/s | 4๏ธโฃ |
| Go std lib | 226,550.34 | 4.414โฏms | 34,071.05โฏKB/s | 5๏ธโฃ |
| Gin | 224,296.16 | 4.458โฏms | 31,760.69โฏKB/s | 6๏ธโฃ |
| Node std lib | 85,357.18 | 11.715โฏms | 4,961.70โฏKB/s | 7๏ธโฃ |
๐ KeepโAlive ๋นํ์ฑํ โ wrk ์คํธ๋ ์ค ํ
์คํธ
| Framework | QPS | Latency | Transfer Rate | Ranking |
|---|---|---|---|---|
| Hyperlane | 51,031.27 | 3.51โฏms | 4.96โฏMB/s | ๐ฅ |
| Tokio | 49,555.87 | 3.64โฏms | 4.16โฏMB/s | ๐ฅ |
| Rocket | 49,345.76 | 3.70โฏms | 12.14โฏMB/s | ๐ฅ |
| Gin | 40,149.75 | 4.69โฏms | 5.36โฏMB/s | 4๏ธโฃ |
| Go std lib | 38,364.06 | 4.96โฏms | 5.12โฏMB/s | 5๏ธโฃ |
| Rust std lib | 30,142.55 | 13.39โฏms | 2.53โฏMB/s | 6๏ธโฃ |
| Node std lib | 28,286.96 | 4.76โฏms | 3.88โฏMB/s | 7๏ธโฃ |
๐ KeepโAlive ๋นํ์ฑํ โ ab ์คํธ๋ ์ค ํ
์คํธ
| Framework | QPS | Latency | Transfer Rate | Ranking |
|---|---|---|---|---|
| Tokio | 51,825.13 | 19.296โฏms | 4,453.72โฏKB/s | ๐ฅ |
| Hyperlane | 51,554.47 | 19.397โฏms | 5,387.04โฏKB/s | ๐ฅ |
| Rocket | 49,621.02 | 20.153โฏms | 11,969.13โฏKB/s | ๐ฅ |
| Go std lib | 47,915.20 | 20.870โฏms | 6,972.04โฏKB/s | 4๏ธโฃ |
| Gin | 47,081.05 | 21.240โฏms | 6,436.86โฏKB/s | 5๏ธโฃ |
| Node std lib | 44,763.11 | 22.340โฏms | 4,983.39โฏKB/s | 6๏ธโฃ |
| Rust std lib | 31,511.00 | 31.735โฏms | 2,707.98โฏKB/s | 7๏ธโฃ |
๐ฏ ๊น์ด ์๋ ์ฑ๋ฅ ๋ถ์
๐ KeepโAlive ํ์ฑํ
- Tokio๊ฐ
wrkํ ์คํธ์์ 340,130.92โฏQPS๋ก 1์๋ฅผ ์ฐจ์งํ์ต๋๋ค. - Hyperlane๋ 334,888.27โฏQPS(1.5โฏ% ๋๋ฆด ๋ฟ)๋ก ๊ทผ์ํ๊ฒ 2์์ด๋ฉฐ, ์ ์ก ์๋์์๋ Tokio๋ณด๋ค ์ฐ์ํฉ๋๋ค(33.21โฏMB/s ๋ 30.17โฏMB/s).
abํ ์คํธ์์ Hyperlane๊ฐ Tokio๋ฅผ ์์๋ฉฐ(316,211.63โฏQPS ๋ 308,596.26โฏQPS), ์ง์ ๋ถํ ํ์์ โ์ง์ ํ ์ฑ๋ฅ ์โ์ด ๋ฉ๋๋ค.
These results suggest that Hyperlaneโs internal dataโprocessing pipeline is exceptionally efficient, even when Tokioโs async runtime is highly optimized.
๐ KeepโAlive ๋นํ์ฑํ
- ์งง์ ์ฐ๊ฒฐ์ ์ฌ์ฉํ ๋, Hyperlane๊ฐ
wrkํ ์คํธ์์ 51,031.27โฏQPS๋ก ๋ค์ 1์๋ฅผ ์ฐจ์งํ๋ฉฐ Tokio๋ฅผ ์์ญ๋๋ค. abํ ์คํธ์์๋ ๊ฒฉ์ฐจ๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค: Tokio(51,825.13โฏQPS) ๋ Hyperlane(51,554.47โฏQPS). ์ฐจ์ด๋ ์ผ๋ฐ์ ์ธ ์ธก์ ์ค์ฐจ ๋ฒ์ ๋ด์ ์์ด ๋ ํ๋ ์์ํฌ๊ฐ ์ฐ๊ฒฐ ๋ณ๋์ ๊ฑฐ์ ๋๋ฑํ๊ฒ ์ ์ฒ๋ฆฌํจ์ ๋ํ๋ ๋๋ค.
๐ป Code Implementation Comparison
๐ข Node.js Standard Library
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello');
});
server.listen(60000, '127.0.0.1');
๊ตฌํ์ ๊ฐ๊ฒฐํ์ง๋ง ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๋ชจ๋ธ์ ํ๊ณ๋ก ์ธํด ๋๊ท๋ชจ ๋์์ฑ ์ํฉ์์ ์ฝ๋ฐฑ ์ง์ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ํ์ด ๋ฐ์ํฉ๋๋ค. ํ ์คํธ์์๋ Node.js ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ ๋ถํ์์ 811,908๊ฐ์ ์คํจ ์์ฒญ์ ๊ธฐ๋กํ์ต๋๋ค.
๐น Go Standard Library
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":60000", nil)
}
Go์ ๊ณ ๋ฃจํด ๊ธฐ๋ฐ ๋์์ฑ์ ๊ฒฌ๊ณ ํ ๊ธฐ๋ณธ ์ฑ๋ฅ(โโฏ234โฏkโฏQPS)์ ์ ๊ณตํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ GC ํ๋์ ์ํ ์ฌ์ง๋ ์์ง ๋จ์ ์์ต๋๋ค.
๐ Rust Standard Library
use std::io::Write;
use std::net::TcpListener;
fn main() -> std::io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:60000")?;
for stream in listener.incoming() {
let mut stream = stream?;
stream.write_all(b"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello")?;
}
Ok(())
}
Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์ ์์ค ์ ์ด์ ์ ๋ก ์ฝ์คํธ ์ถ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ, KeepโAlive wrk ํ
์คํธ์์ 291,218โฏQPS๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
โก Hyperlane Framework (Rust) โ Sample Handler
use hyperlane::{Server, Request, Response};
async fn hello(_req: Request) -> Response {
Response::new("Hello".into())
}
#[tokio::main]
async fn main() {
let server = Server::bind("0.0.0.0:60000")
.await
.unwrap()
.route("/", hello);
server.run().await.unwrap();
}
Hyperlane์ Tokio ์์ ๊ตฌ์ถ๋์์ผ๋ฉฐ, ๊ณ ๋๋ก ์ต์ ํ๋ ์์ฒญ ๋ผ์ฐํฐ์ ์ ๋ก ๋ณต์ฌ I/O๋ฅผ ์ถ๊ฐํด ์ ์ก๋ฅ ์ด ๋ฐ์ด๋ ์ด์ ๋ฅผ ์ค๋ช ํฉ๋๋ค.
๐ ์์ฝ
- KeepโAlive๊ฐ ์ค์ โ ์ฐ๊ฒฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฌ์ฉํ๋ ํ๋ ์์ํฌ(Tokio, Hyperlane)๊ฐ ๊ณ ์ฒ๋ฆฌ๋
wrkํ ์คํธ์์ ์ฐ์ธํฉ๋๋ค. - ์ ์ก๋ฅ ์ ์จ๊ฒจ์ง ์งํ โ Hyperlane์ QPS๊ฐ ์ฝ๊ฐ ๋ฎ์์๋ ๋ถ๊ตฌํ๊ณ MB/s๊ฐ ๋ ๋์ ๋ฐ์ดํฐ ํ์ด๋ก๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ฐ์ํจ์ ๋ณด์ฌ์ค๋๋ค.
- ๋จ๊ธฐ ์ฐ๊ฒฐ์ ๊ฒฉ์ฐจ๋ฅผ ์ค์ โ KeepโAlive๋ฅผ ๋นํ์ฑํํ๋ฉด ์ฑ๋ฅ ์ฐจ์ด๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
- ์ธ์ด ์์ค ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ฌ์ ํ ๋ค์ฒ์ง โ ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ฒ(Node, Go, Rust)๋ ๋ชฉ์ ์ ๋ง๊ฒ ์ค๊ณ๋ ํ๋ ์์ํฌ์ ๋ค์ฒ์ง๋๋ค.
์ง์ฐ ์๊ฐ์ด ์ค์ํ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ค๋ฉด, Hyperlane(๋๋ ์ ์ฌํ๊ฒ ์ต์ ํ๋ 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);
}
}
Rust์ ์์ ๊ถ ์์คํ ๊ณผ ์ ๋กโ์ฝ์คํธ ์ถ์ํ๋ ์ค์ ๋ก ๋ฐ์ด๋ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ 291,218.96โฏQPS๋ฅผ ๋ฌ์ฑํ์ผ๋ฉฐ, ์ด๋ ์ด๋ฏธ ๋งค์ฐ ์ธ์์ ์ด์ง๋ง, ๊ณ ๋์์ฑ ์๋๋ฆฌ์ค์์๋ ์ฐ๊ฒฐ ๊ด๋ฆฌ์ ์์ง ์ต์ ํ ์ฌ์ง๊ฐ ์์ต๋๋ค.
๐ฏ Performance Optimization Strategy Analysis
๐ง Connection Management Optimization
๋น๊ต ํ ์คํธ๋ฅผ ํตํด ํต์ฌ ์ต์ ํ ํฌ์ธํธ๊ฐ ์ฐ๊ฒฐ ๊ด๋ฆฌ์์ด ๋๋ฌ๋ฌ์ต๋๋ค. Hyperlane์ ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ์ ๋ฐ์ด๋๋ฉฐ, ์ด๋ ๊ฐ๋ ฅํ KeepโAlive ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํฉ๋๋ค. ๊ธฐ์กด ํ๋ ์์ํฌ๋ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ๋ ๋๋์ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ GC ์๋ ฅ์ ์ฆ๊ฐ์ํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Hyperlane์ ๊ฐ์ฒด ํ ๊ธฐ์ ์ ์ฑํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค๋ฒํค๋๋ฅผ ํฌ๊ฒ ์ค์ ๋๋ค.
๐ Memory Management Optimization
Rust์ ์์ ๊ถ ๋ชจ๋ธ์ ๋ฐ์ด๋ ๊ธฐ๋ณธ ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ณต์กํ ๋ผ์ดํํ์ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. Hyperlane์ Rust ๋ชจ๋ธ์ ๋ง์ถคํ ๋ฉ๋ชจ๋ฆฌ ํ์ ๊ฒฐํฉํด ์ ๋กโ๋ณต์ฌ ๋ฐ์ดํฐ ์ ์ก์ ๊ตฌํํ๋ฉฐ, ํนํ ๋์ฉ๋ ํ์ผ ์ ์ก์ ํฐ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
โก Asynchronous Processing Optimization
Tokio๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์์ ์ข์ ์ฑ๋ฅ์ ๋ณด์ด์ง๋ง, ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ด ๊ทนํ ๋์์ฑ ์ํฉ์์ ๋ณ๋ชฉ์ด ๋ ์ ์์ต๋๋ค. Hyperlane์ ์์คํ ๋ถํ์ ๋ฐ๋ผ ์์ ํ ๋น์ ๋์ ์ผ๋ก ์กฐ์ ํ๋ ๋ณด๋ค ์ง๋ณด๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํด ๊ธ์ฆ ํธ๋ํฝ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํฅ์์ํต๋๋ค.
๐ฏ ์ค์ฉ์ ์ธ ์ ์ฉ ๊ถ์ฅ ์ฌํญ
๐ช ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ
- ๊ถ์ฅ ์ฌํญ: ํต์ฌ ๋น์ฆ๋์ค ์์คํ (์ํ ๊ฒ์, ์ถ์ฒ, ์ฃผ๋ฌธ ์ฒ๋ฆฌ)์ Hyperlane์ ์ฌ์ฉํ์ธ์.
- ์ ์ ์์ฐ: Nginx์ ๊ฐ์ ์ ์ฉ ์๋ฒ๋ฅผ ํตํด ์ ๊ณตํ์ญ์์ค.
๐ฌ ์์ ํ๋ซํผ
- ๊ถ์ฅ ์ฌํญ: Hyperlane์ผ๋ก ๋ฉ์์ง ํธ์ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๊ณ , ์ค์๊ฐ ์ ๋ฌ์ ์ํด Redis์ ๊ฐ์ ์ธโ๋ฉ๋ชจ๋ฆฌ ์คํ ์ด๋ฅผ ๊ฒฐํฉํ์ธ์.
- ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง: GraphQL ๋๋ ์ ์ฌ ๊ธฐ์ ์ ๊ณ ๋ คํ์ญ์์ค.
๐ข ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
- ๊ถ์ฅ ์ฌํญ: ํต์ฌ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํด Hyperlane์ ๋ฐฐํฌํ๊ณ , PostgreSQL๊ณผ ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ์ธ์.
- CPU ์ง์ฝ์ ์์ : Hyperlane์ ๋น๋๊ธฐ ๊ธฐ๋ฅ์ ํ์ฉํ์ญ์์ค.
๐ฎ ๋ฏธ๋ ๊ฐ๋ฐ ํธ๋ ๋
๐ ๊ทนํ ์ฑ๋ฅ
ํ๋ ์์ํฌ๋ ํ๋์จ์ด๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋ฐฑ๋ง ์์ค QPS์ ๋ง์ดํฌ๋ก์ด ์์ค ์ง์ฐ์ ๋ชฉํ๋ก ํ ๊ฒ์ ๋๋ค.
๐ง ๊ฐ๋ฐ ๊ฒฝํ ์ต์ ํ
์์ ์๋๋ฅผ ๋์ด, ๋ณด๋ค ํ๋ถํ ๋๋ฒ๊น , ๋ชจ๋ํฐ๋ง ๋ฐ IDE ํตํฉ์ด ํ์ค์ด ๋ ๊ฒ์ ๋๋ค.
๐ ํด๋ผ์ฐ๋โ๋ค์ดํฐ๋ธ ์ง์
๋ด์ฅํ ์ปจํ ์ด๋ํ, ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํท ๋ธ๋ ์ดํน ๋ฑ ๋ง์ดํฌ๋ก์๋น์ค ์นํ์ ์ธ ๊ธฐ๋ฅ์ด ์ ์ ๋ ์ผ๋ฐํ๋ ๊ฒ์ ๋๋ค.
๐ฏ ์์ฝ
ํ ์คํธ๋ฅผ ํตํด ํ๋ ์น ํ๋ ์์ํฌ์ ์ฑ๋ฅ ์ ์ฌ๋ ฅ์ด ์ฌํ์ธ๋์์ต๋๋ค. Hyperlane์ ๋ฑ์ฅ์ Rust๊ฐ ์น ๊ฐ๋ฐ์์ ์ด๋ค ์ญ๋์ ๋ฐํํ ์ ์๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ผ๋ถ ๋ฒค์น๋งํฌ์์๋ Tokio๊ฐ ์์์ง๋ง, Hyperlane์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์์ ๋ ์ฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋ ์์ํฌ๋ฅผ ์ ํํ ๋๋ ์์ํ ์งํ๋ฟ ์๋๋ผ ๊ฐ๋ฐ์ ๊ฒฝํ, ์ํ๊ณ, ์ปค๋ฎค๋ํฐ ์ง์ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. Hyperlane์ ์ด๋ฌํ ๋ชจ๋ ์ธก๋ฉด์์ ์ข์ ์ ์๋ฅผ ๋ฐ์ผ๋ฉฐ ์๋ํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์ ๋ฏธ๋๋ ์ ์ ๋ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ์ด์ ์ ๋ง์ถ ๊ฒ์ด๋ฉฐ, Hyperlane์ ๊ทธ ์ค์ฌ์์ ์ค์ํ ์ญํ ์ ํ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค.