LUMOS vs Codama: Solana의 스키마 생성 도구 이해

발행: (2025년 12월 18일 오전 08:00 GMT+9)
8 min read
원문: Dev.to

Source: Dev.to

LUMOS vs Codama 표지 이미지: Solana의 스키마 생성 도구 이해

LUMOS 프로필 이미지
RECTOR SOL

Solana에서 개발 중이신가요? 이런 생각을 해보셨을 겁니다:

“LUMOS와 Codama 중 어느 것을 사용해야 할까요?”

답변: 두 가지 모두. 서로 보완 관계이며 경쟁 관계가 아닙니다.

TL;DR

ToolWhat it doesWhen you use it
LUMOS데이터 스키마 정의 → Rust + TypeScript 코드 생성 (배포 전)온‑체인 프로그램을 작성할 때
Codama기존 프로그램 파싱 → 클라이언트 SDK 생성 (배포 후)프로그램을 배포한 후

이들은 서로 다른 계층에서 작동하며 함께 사용할 수 있습니다.

각 도구가 적용되는 위치

┌─────────────────────────────────────────────────────────────┐
│                   YOUR SOLANA PROGRAM                       │
│  ┌────────────────────────────────────────────────────────┐ │
│  │                                                        │ │
│  │   ┌──────────────────┐                                 │ │
│  │   │  Account Data    │ ◄── LUMOS generates this        │ │
│  │   │  (structs/enums)│     (data‑structure code)       │ │
│  │   └──────────────────┘                                 │ │
│  │                                                        │ │
│  │   ┌──────────────────┐                                 │ │
│  │   │  Instructions    │   (you write this manually     │ │
│  │   │  (program logic) │    or with Anchor)             │ │
│  │   └──────────────────┘                                 │ │
│  │                                                        │ │
│  └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

                              │ Codama parses program
                              │ and generates...

┌─────────────────────────────────────────────────────────────┐
│                        CLIENTS                              │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐         │
│  │   JS    │  │  Rust   │  │ Python  │  │  Dart   │         │
│  │ Client  │  │ Client  │  │ Client  │  │ Client  │         │
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘         │
│                                                             │
│  ◄── Codama generates these (SDK code to interact)          │
└─────────────────────────────────────────────────────────────┘

핵심 인사이트:
LUMOS는 프로그램 내부에 존재하는 코드를 생성합니다.
Codama는 프로그램 외부에 존재하는 코드를 생성하여, 프로그램과 상호작용할 수 있게 합니다.

Codama란?

Codama은 Solana 프로그램의 표준화된 설명을 생성하는 코드‑생성 프레임워크이며, Codama IDL을 중심으로 합니다.

핵심 워크플로우

Existing Program → Parse → Codama IDL → Generate Clients
        or
Anchor IDL      → Convert → Codama IDL → Generate Clients

Codama가 하는 일

  • 기존 Solana 프로그램 또는 Anchor IDL 파일을 파싱
  • 60개 이상의 노드 타입을 가진 통합 IDL 표현을 생성
  • 여러 언어(JS, Rust, Python, Dart)로 클라이언트 SDK 생성
  • 프로그램 인터페이스에 대한 문서와 도구 제공

주요 사용 사례: “배포된 Solana 프로그램이 있는데, 이제 클라이언트 라이브러리가 필요합니다.”

LUMOS란?

LUMOSRustTypeScript 전반에 걸쳐 보장된 타입 안전성을 제공하는 스키마‑우선 DSL로, 데이터 구조를 정의합니다.

핵심 워크플로우

.lumos Schema → Parse → IR → Generate Rust + TypeScript

LUMOS가 하는 일

  • 깨끗하고 Rust와 유사한 문법으로 데이터 구조를 정의할 수 있습니다
  • 적절한 Borsh 직렬화를 갖춘 Rust structs를 생성합니다
  • 일치하는 Borsh 스키마를 가진 TypeScript interfaces를 생성합니다
  • 온‑체인 코드와 오프‑체인 코드 간의 타입 안전성을 보장합니다
  • #[account] 속성을 통해 Anchor 통합을 지원합니다

주요 사용 사례: “데이터 타입에 대한 단일 진실의 원천을 원합니다.”

주요 차이점

1. 워크플로우 방향

항목LUMOSCodama
방향전방 (스키마 → 코드)역방향 (프로그램 → 클라이언트)
입력.lumos 스키마 파일기존 프로그램 또는 Anchor IDL
단계배포 전배포 후

2. 생성 내용

LUMOS – 데이터 구조 코드 (프로그램 내부에 들어감)

// Input: schema.lumos
#[solana]
#[account]
struct PlayerAccount {
    wallet: PublicKey,
    level: u16,
    experience: u64,
}
// Output: generated.rs (included in your program)
use anchor_lang::prelude::*;

#[account]
pub struct PlayerAccount {
    pub wallet: Pubkey,
    pub level: u16,
    pub experience: u64,
}

Codama – 클라이언트 SDK 코드 (프로그램을 외부에서 호출)

// Example: TypeScript client generated by Codama
await program.methods
  .createPlayer()
  .accounts({
    player: playerPda,
    authority: wallet.publicKey,
  })
  .rpc();

핵심 요약: 한 번 LUMOS를 사용해 온‑체인 데이터 모델을 작성하고, Codama가 컴파일된 프로그램(또는 해당 Anchor IDL)을 읽어 필요한 오프‑체인 SDK를 생성하도록 하세요. 두 도구를 함께 사용하면 Solana에서 풀스택, 타입‑안전 개발 경험을 제공합니다.

3. 기능 비교

기능LUMOSCodama
구조체 정의
열거형 정의
Borsh 직렬화
Instruction 빌더
오류 타입
CLI 생성
Go 지원
Ruby 지원
Dart 지원

각각을 언제 사용할까

LUMOS를 사용할 때

  • ✅ Solana 프로그램을 위한 새로운 데이터 구조 정의
  • ✅ Borsh와 함께 Rust + TypeScript 타입 동기화가 필요할 때
  • ✅ 새로운 프로그램을 구축하고 단일 진실 소스를 원할 때
  • ✅ 타입이 일치한다는 컴파일 타임 보장을 원할 때
  • ✅ Go 또는 Ruby 코드 생성이 필요할 때

Codama를 사용할 때

  • ✅ 기존/배포된 프로그램용 클라이언트를 구축할 때
  • ✅ 인스트럭션 빌더가 포함된 전체 SDK 생성이 필요할 때
  • ✅ Dart 지원 또는 Umi 프레임워크 통합을 원할 때
  • ✅ 프로그램에 대한 문서를 생성할 때
  • ✅ 프로그램 상호작용을 위한 CLI 도구가 필요할 때

함께 사용하기

다음은 일반적인 워크플로우입니다:

┌─────────────────────────────────────────────────────────────┐
│  PHASE 1: 데이터 구조 정의 (LUMOS)                           │
│                                                             │
│  schema.lumos → lumos generate → generated.rs + generated.ts│
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│  PHASE 2: 프로그램 빌드 (Anchor/Native)                     │
│                                                             │
│  프로그램에서 generated.rs를 사용하고 + 명령어 작성        │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│  PHASE 3: 배포 및 클라이언트 생성 (Codama)                    │
│                                                             │
│  프로그램 배포 → IDL 파싱 → 전체 클라이언트 SDK 생성          │
└─────────────────────────────────────────────────────────────┘

요약

측면LUMOSCodama
철학Schema‑firstIDL‑centric
방향Schema → CodeProgram → Clients
단계Pre‑deploymentPost‑deployment
초점Data structuresFull program interface

보완적인 도구입니다:

  • 개발 중에 데이터 스키마를 정의할 때 LUMOS를 사용하세요.
  • 배포용 클라이언트 라이브러리를 생성할 때 Codama를 사용하세요.

Get Started

LUMOS:

# Install LUMOS CLI
cargo install lumos-cli

# Generate from schema
lumos generate schema.lumos

Codama:

# Install Codama (example via npm)
npm install -g @codama/cli

# Generate clients from a deployed program
codama generate --program-id <PROGRAM_ID>

질문이 있나요? 아래 댓글에 남겨 주세요!

Back to Blog

관련 글

더 보기 »