본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 24. 06:35

Show HN: 에이전트 모델 역전 (앱은 클라이언트로, 채팅은 서버로, 그리고 성찰)

요약

RAIL(Remote Agent Invocation Layer)은 기존 애플리케이션을 LLM과 연결하여 AI가 직접 메서드를 호출할 수 있게 만드는 범용 브리지 프로토콜입니다. 단 한 줄의 코드로 C#, C++, Python 등 다양한 언어의 앱을 에이전트 환경으로 전환할 수 있는 아키텍처를 제공합니다.

핵심 포인트

  • 단 한 줄의 코드로 기존 앱을 AI 제어 가능 상태로 전환
  • Named Pipe와 Native AOT를 활용한 언어 간 통신 구현
  • ReAct 에이전트 루프를 통한 다단계 추론 지원
  • C#, C++, Python, Node.js 등 다양한 환경 지원

RAIL (Remote Agent Invocation Layer) 프로토콜 - 프로젝트 아키텍처

어떤 애플리케이션이든 AI 제어가 가능하게 만드는 단 한 줄의 코드


1. RAIL이란 무엇인가?

RAIL은 모든 애플리케이션(C#, C++, Python, Node.js)을 모든 LLM(GPT, Claude, Gemini)에 연결하는 **범용 브리지 (universal bridge)**입니다. 애플리케이션을 새로 작성할 필요 없이, 단 한 줄의 코드만 추가하면 AI가 귀하의 메서드를 직접 호출할 수 있습니다.


2. 프로젝트 개요

프로젝트목적언어
RailOrchestrator메인 AI 애플리케이션 (UI + LLM 라우팅)C# / WPF
...

3. 프로젝트 상세 정보

RailOrchestrator

두뇌 (The Brain) - 사용자가 상호작용하는 메인 애플리케이션입니다.

  • WPF 데스크톱 애플리케이션 (.NET 9)
  • LLM (Gemini, OpenAI, Anthropic, Claude) 연결
  • 다단계 추론을 위한 ReAct 에이전트 루프 (agent loop)
  • 클라이언트 연결을 위한 Named Pipe 서버 호스팅
  • 에셋 (Chips) 및 도구 라우팅 관리

주요 파일:

  • Services/Host/HostService.cs - Named Pipe 서버
  • Services/LLMService.cs - LLM API 통합
  • Services/ReAct/ReActOrchestrator.cs - 에이전트 루프

RailBridge.Native

브리지 (The Bridge) - 언어 간 통신을 가능하게 하는 네이티브 DLL입니다.

  • C-ABI 호환성을 위해 Native AOT로 컴파일됨
  • 모든 언어에서 호출 가능한 함수 노출:
    • RAIL_Ignite() - 호스트에 연결
  • IPC를 위해 Named Pipes 사용

대상: Python, C++, Node.js, Rust, Go


RailSDK.Universal

** .NET SDK** - C# 애플리케이션을 위한 클라이언트 라이브러리입니다.

  • .NET Standard 2.0 (.NET Framework 4.6.1+와 호환)
  • 간단한 API: RailEngine.Ignite(this)
  • 리플렉션 (reflection)을 통한 메서드 자동 검색
  • 통신을 위해 RailBridge.dll 로드

사용법:

// App.xaml.cs 에서
RailEngine.Ignite(this);

RailSDK (RailFactory.Core)

툴킷 (The Toolkit) - 어셈블리 스캐닝 (assembly scanning) 및 매니페스트 생성.

포함 내용:

  • RuntimeRegistry - .NET / Native 바이너리 감지
  • AssemblyScanner - DLL에서 메서드 추출
  • CompositeManifest - 멀티 모듈 매니페스트 (manifest) 형식
  • DependencyAnalyzer - 프로젝트 의존성 분석
  • SolutionScanner - 전체 .sln 솔루션 스캔

사용처: RailStudio, RailOrchestrator


RailSDK-Cpp

C++ SDK - C++ 애플리케이션의 연결을 지원합니다.

  • CMake 기반 빌드 시스템
  • LoadLibrary를 통한 RailBridge.dll 로드
  • 콜백 (Callback) 기반 명령 실행
  • x64 및 x86 빌드 모두 지원

빌드 (Build):

build_x64.bat   # 64비트
build_x86.bat   # 32비트 (레거시 앱)

사용법 (Usage):

Rail::ignite("MyApp", manifestJson, onCommand);

RailSDK-Python

Python SDK - Python 스크립트의 연결을 지원합니다.

  • ctypes를 사용하여 RailBridge.dll 로드
  • 데코레이터 (Decorator) 기반 메서드 등록
  • 다른 SDK와 일치하는 단순한 API

사용법 (Usage):

from rail import RailEngine

engine = RailEngine()
...

RailSDK-Node (테스트되지 않음)

Node.js SDK - TypeScript/JavaScript 애플리케이션의 연결을 지원합니다.

  • 네이티브 브리지 (native bridge) 액세스를 위해 ffi-napi 사용
  • TypeScript 타입 포함
  • 프로미스 (Promise) 기반 API

사용법 (Usage):

import { RailEngine } from 'rail-sdk';
engine.ignite([new MyService()]);

RailStudio

시각적 도구 (Visual Tool) - 애플리케이션을 스캔하고 분석합니다.

  • EXE/DLL을 분석기로 전송
  • rail.manifest.json 자동 생성
  • 의존성 시각화
  • 솔루션 전체 스캔

사용 사례: Rail 통합을 위한 레거시 앱 준비


ConvertedProjectExample

SDK 통합을 보여주는 예제 애플리케이션입니다.

예제설명
AgentTest고객 데이터베이스가 포함된 간단한 WPF 앱
WorkflowDemo워크플로 자동화 예제

매니페스트 (Manifest) 여기에서 이 예제 애플리케이션을 위해 이미 생성된 모든 "rail.manifest.json"이 포함된 Manifest 폴더를 찾을 수 있습니다.


4. 개발자를 위한 SDK 요구 사항

애플리케이션을 AI 제어 가능 (AI-controllable) 상태로 전환할 때, 정확히 필요한 사항은 다음과 같습니다:

언어별 요구 사항

언어추가할 항목자동 포함 항목비고
C# (.NET)RailSDK.Universal.dllRailBridge.dll (자동 복사됨)참조 하나로 모든 기능 포함
...

C# 개발자: 참조 하나로 모든 것을 해결

RailSDK.Universal을 추가하면, 네이티브 브릿지 (native bridge)가 출력 디렉터리로 자동 복사됩니다:

📁 bin/Debug/net8.0/
├── YourApp.exe
├── RailSDK.Universal.dll   ← 이 참조를 추가합니다
...

추가 방법:

<PackageReference Include="RailSDK.Universal" Version="2.0.0" />

C++ 개발자: 두 가지 옵션

C++은 코드베이스에 따라 **두 가지 통합 모드 (integration modes)**를 제공합니다:

옵션 A: RTTR을 사용하는 현대적 C++ (자동 리플렉션 (Automatic Reflection))

새로운 애플리케이션 또는 C++17을 지원하는 코드베이스의 경우:

// RTTR 매크로를 사용하여 클래스를 등록합니다
RTTR_REGISTRATION {
    rttr::registration::class_<OrderManager>("OrderManager")
...

필요한 파일:

📁 YourApp/
├── YourApp.exe
├── rail_sdk.dll            ← C++ 래퍼 (RTTR 포함) 
...

옵션 B: 커스텀 디스패처 (Custom Dispatcher)를 사용하는 레거시 C++ (수동 라우팅 (Manual Routing))

C++17 또는 RTTR을 사용할 수 없는 레거시 애플리케이션 (예: 게임, 오래된 코드베이스)의 경우:

#define RAIL_NO_RTTR  // RTTR 비활성화

// 자체 명령 라우터 (command router)를 정의합니다
...

필요한 파일:

📁 YourApp/
├── YourApp.exe
├── rail_sdk.dll            ← C++ 래퍼 (RTTR 미포함)
...

실제 사례: Notepad++와 Doom은 코드베이스가 RTTR을 지원할 수 없었기 때문에 옵션 B (커스텀 디스패처)를 사용하여 통합되었습니다.


Python/Node.js 개발자

📁 YourProject/
├── main.py (또는 index.ts)
├── RailBridge.dll          ← 수동으로 복사
...

ctypes/ffi 호출을 대신 처리해 주는 래퍼 (wrapper) 패키지를 설치하세요.


5. 프로젝트가 연결되는 방식

<p align="center"> <img src="Docs/Architecture_overview.jpg" alt="아키텍처 개요" width="800"/> </p>

아키텍처 워크플로우 (Architecture Workflow)

<p align="center"> <img src="Docs/Architecture_workflow.png" alt="아키텍처 워크플로우" width="800"/> </p>
┌─────────────────────────────────────────────────────────────┐
│                    RailOrchestrator                       │
│                    (메인 AI 애플리케이션)                    │
...

의존성 흐름 (Dependency Flow):

RailOrchestrator
    └── uses → RailSDK (RailFactory.Core) for manifest parsing
    
...

6. 사용 예시 (Usage Examples)

예시 1: C# 앱을 AI 제어 가능하게 만들기

// 서비스를 생성합니다.
public class CustomerService
{
...

예시 2: C++ 애플리케이션 제어하기

// 콜백 함수를 정의합니다.
const char* OnCommand(const char* json) {
    auto cmd = ParseJson(json);
...

예시 3: Python 스크립트 통합

class DataProcessor:
    def analyze_data(self, file_path: str) -> dict:
        return {"rows": 1000, "status": "processed"}
...

예시 4: AI에게 실행 요청하기

앱을 연결한 후, 자연어로 질문합니다:

"john@example.com 이메일을 가진 John Smith라는 고객을 생성해줘"
→ AI가 CustomerService.CreateCustomer("John Smith", "john@example.com") 호출

...

빠른 시작 (Quick Start)

  1. RailOrchestrator 실행 - 메인 AI 인터페이스
  2. 앱 연결 - SDK를 추가하고 Ignite()를 호출합니다.
  3. AI에게 요청 - 자연어 명령이 코드를 실행합니다.

<p align="center"> <b>RAIL 프로토콜</b> - 레거시 애플리케이션과 AI 연결 (Bridging Legacy Applications and AI) </p>

AI 자동 생성 콘텐츠

본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0