---
title: "Solana의 Cross-Program Invocation이란?"
description: "Cross-Program Invocation이 무엇인지, 어떻게 작동하는지, 그리고 일반적인 사용 사례를 알아보세요"
---

# Solana의 Cross-Program Invocation이란?

Solana에서 런타임 cross-program invocation은 더 효율적이고 유연한 [프로그램 개발](https://www.alchemy.com/docs/reference/solana-api-quickstart)을 가능하게 하며, 이는 플랫폼의 핵심 기능입니다. Cross Program Invocations \(CPIs\)는 Solana 블록체인 상의 프로그램이 다른 프로그램을 호출하여 그 코드를 실행할 수 있는 능력을 말합니다.

이 글에서는 Solana의 cross program invocations이 무엇인지, 구체적인 사용 사례는 무엇인지, 그리고 이를 Solana 프로그램에서 어떻게 사용할 수 있는지 설명합니다.

## **Cross-program invocations \(cpis\)이란 무엇인가?**

**런타임 cross-program invocation에서는 Solana의 한 프로그램이 다른 프로그램을 호출하고 데이터를 전달할 수 있으며, 이를 통해 복잡하고 모듈화된 스마트 컨트랙트 시스템을 구축할 수 있습니다.**

[Solana 런타임](https://docs.solana.com/developing/programming-model/runtime)은 이러한 cross-program invocations를 실행하기 위한 안전하고 탈중앙화된 환경을 제공합니다. Solana의 런타임은 호출된 프로그램이 올바르게 실행되고, 그 결과가 검증 가능한 방식으로 호출한 프로그램에 반환되도록 보장합니다. 이를 통해 Solana 블록체인에서 신뢰가 필요 없는(trustless) 탈중앙화 애플리케이션을 만들 수 있습니다.

## **Cross-program invocations의 사용 사례는 무엇인가?**

Cross-program invocations는 Solana 블록체인에서 다중 서명 트랜잭션, 토큰 전송, 상태 채널, [앱](https://www.alchemy.com/dapps/top/defi-dapps) 간 상호운용성, 새로운 트랜잭션 유형, 공통 기능 공유 등 다양한 사용 사례를 가능하게 합니다.

### **1. 다중 서명(Multisig) 트랜잭션**

다중 서명 프로그램은 블록체인에서 트랜잭션이 실행되기 전에 여러 당사자가 서명해야 하는 프로그램입니다. Cross-program invocations를 사용하면, 다른 프로그램이 multisig 프로그램을 호출하여 트랜잭션이 처리되기 전에 필요한 서명 수가 충족되었는지 확인할 수 있습니다.

### **2. 토큰 전송**

Solana에는 토큰과 관련된 모든 트랜잭션을 위한 [토큰 프로그램 및 계정](https://www.alchemy.com/overviews/solana-account-model)이 있습니다. 이러한 토큰 프로그램은 다른 프로그램에 의해 호출되어 한 계정에서 다른 계정으로 토큰을 전송할 수 있으며, 이를 통해 탈중앙화 거래소와 같은 애플리케이션을 만들 수 있습니다.

### **3. 상태 채널**

Solana 프로그램은 온체인에서 정산되는 오프체인 트랜잭션을 가능하게 하는 상태 채널을 구현하는 데 사용할 수 있습니다. 예를 들어, 프로그램은 간단한 블록체인 게임을 위한 상태 채널을 구현하는 데 사용될 수 있으며, 플레이어가 움직일 때 다른 프로그램이 상태 프로그램을 호출한 후 최종 상태를 온체인에서 정산합니다.

### **4. 앱 간 상호운용성**

Cross-program invocations는 앱들이 서로 통신하고 데이터를 공유할 수 있게 하여, Solana 네트워크 상의 다양한 앱 간에 더 원활한 상호작용을 가능하게 합니다.

### **5. 공통 기능 공유**

앱들은 cross-program invocations를 사용하여 암호화 함수나 데이터 저장소와 같은 공통 기능을 공유할 수 있습니다. 이를 통해 각 dApp이 구현해야 하는 코드의 양을 줄일 수 있고, [Solana 상에서 앱을 구축](https://www.alchemy.com/solana)하기가 더 쉬워집니다.

### **6. 새로운 트랜잭션 유형 지원**

Cross-program invocations는 앱 간의 새로운 유형의 상호작용을 가능하게 합니다. 예를 들어, 하나의 dApp이 다른 dApp으로부터 데이터를 요청하거나 다른 dApp에서 작업을 트리거하는 것이 가능해집니다.

[탈중앙화 거래소](https://www.alchemy.com/list-of/decentralized-exchanges-on-solana)처럼 여러 프로그램이 관련된 복잡한 비즈니스 로직을 적용하고 싶거나, 여러 프로그램의 서명이 필요한 multi-sig 지갑을 만들고 싶거나, 조합 가능하고 재사용 가능한 프로그램으로 확장성 있게 구축하고 싶다면, cross-program invocations를 구현하는 것이 가장 좋은 접근 방식입니다.

## **Cross-program invocations의 예시는 무엇인가?**

**Cross-program invocations는 multi-sig 지갑, NFT 마켓플레이스, 모듈형 프로그램 등 다양한 방식으로 사용될 수 있습니다.**

### **1. Solana multisig 지갑**

Cross-program invocations를 사용하면 트랜잭션을 실행하는 데 두 개의 서명이 필요한 [Snowflake와 같은 multi-sig 지갑](https://www.alchemy.com/dapps/snowflake)을 만들 수 있습니다. 이는 각 서명을 위한 프로그램 두 개를 만들어 구현할 수 있습니다.

트랜잭션이 시작되면, 첫 번째 프로그램이 1번째 서명을 확인하고, 두 번째 프로그램을 호출하여 2번째 서명을 확인하며, 두 서명이 모두 유효하면 트랜잭션이 실행됩니다.

### **2. Solana NFT 마켓플레이스**

Cross-program invocations는 대체 불가능 토큰(NFT)을 사고파는 [Solana NFT 마켓플레이스](https://www.alchemy.com/list-of/nft-marketplaces-on-solana) 개발에도 도움이 됩니다. 개발자는 마켓플레이스를 관리하는 프로그램 하나와, 마켓플레이스에서 거래되는 각 NFT 유형별 별도의 프로그램을 만들어 이를 구현할 수 있습니다. 마켓플레이스 프로그램은 해당 NFT 프로그램을 호출하여 NFT의 고유성과 소유권을 확인한 후, 모든 것이 유효하면 거래를 실행합니다.

### **3. 모듈형 프로그램**

Cross-program invocations는 여러 단계와 상호작용이 포함된 복잡한 프로그램을 만드는 데 직접적으로 도움이 됩니다. 이는 컨트랙트의 특정 단계나 측면을 각각 처리하는 여러 프로그램을 만들어 구현합니다. 그러면 메인 컨트랙트 프로그램이 필요에 따라 다른 프로그램들을 호출하여 컨트랙트의 여러 단계를 실행할 수 있습니다.

## **Cross-program invocations 실행 방법**

Solana에서 런타임 cross-program invocation을 구축하려면 작성, 컴파일, 배포, 호출의 단계를 거쳐야 합니다.

### **1단계: Solana 프로그램 작성**

먼저, 서로 호출할 수 있게 하려는 프로그램을 작성해야 합니다. 이러한 프로그램은 [native Rust](https://www.alchemy.com/overviews/solidity-vs-rust)로 Anchor 프레임워크를 사용하여 작성하거나, [Seahorse 프레임워크](https://www.alchemy.com/overviews/solana-seahorse)를 사용하여 Python으로 작성할 수 있습니다.

### **2단계: 프로그램을 wasm으로 컴파일**

프로그램을 작성한 후에는 적절한 컴파일러를 사용하여 Wasm으로 컴파일해야 합니다. 그러면 Solana 런타임이 실행할 수 있는 Wasm 바이너리가 생성됩니다.

### **3단계: 프로그램을 Solana에 배포**

다음으로, 컴파일된 Wasm 바이너리를 Solana 블록체인에 배포해야 합니다. 이는 [Solana 소프트웨어 개발 키트 \(SDK\)](https://docs.rs/solana-sdk/latest/solana_sdk/)의 일부로 제공되는 solana-deploy 커맨드라인 도구를 사용하여 수행할 수 있습니다.

### **4단계: 프로그램을 호출하는 트랜잭션 작성**

프로그램을 배포한 후에는 Solana SDK를 사용하여 프로그램 중 하나를 호출하고 데이터를 전달하는 트랜잭션을 작성할 수 있습니다. 이 트랜잭션은 Solana 블록체인에 제출되어 런타임 환경에 의해 검증되고 실행됩니다.

호출된 프로그램이 실행되면, 다른 프로그램을 호출하는 것을 포함하여 Wasm 런타임 내에서 가능한 모든 연산을 수행할 수 있습니다. 연산 결과는 호출한 프로그램에 반환되어 Solana 블록체인에 저장될 수 있습니다.

전반적으로, Solana에서 런타임 cross-program invocations를 구축하는 것은 프로그램을 작성하고, Wasm으로 컴파일하고, 블록체인에 배포하고, Solana SDK를 사용하여 프로그램 간에 호출하고 데이터를 전달하는 과정을 포함합니다. 이를 통해 Solana 플랫폼에서 복잡하고 모듈화된 스마트 컨트랙트 시스템을 만들 수 있습니다.

**참고:** [Solana 프로그램 임대료](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs)는 존재하는 프로그램 수에 따라 달라집니다.

### **간단한 구현 예시**

예를 들어, Solana에 _program1_과 _program2_라는 두 개의 프로그램이 있고, _program2_에서 _program1_의 _process_data_ 함수를 호출하고 싶다고 가정해봅시다.

**다음과 같이 할 수 있습니다:**

_program1_에서, 입력 데이터를 매개변수로 받아 출력 데이터를 반환하는 새로운 함수 _process_data_interface_를 추가합니다:

_program2_에서, _program1_의 _process_data_interface_를 호출하여 입력 데이터를 전달하고 출력 데이터를 받는 코드를 추가합니다:

그런 다음 필요에 따라 _program2_에서 출력 데이터를 사용할 수 있습니다.

**참고**: 이는 간단한 예시일 뿐이며, 실제 구현은 작업 중인 특정 프로그램과 함수에 따라 달라집니다. 오류 처리, 적절한 권한 부여 등을 위해 추가 코드가 필요할 수 있습니다.

## **Solana 런타임 cross program invocations 시작하기**

Solana에는 런타임 Cross Program Invocations라는 핵심 기능이 있으며, 이를 통해 플랫폼에서 실행되는 스마트 컨트랙트가 다른 프로그램을 안전하고 탈중앙화된 방식으로 호출할 수 있습니다. Solana에서는 모든 프로그램이 블록체인 상에 고유한 주소를 가지며, CPI는 실행하고자 하는 프로그램의 주소를 호출함으로써 이루어집니다. 이를 통해 프로그램들이 서로 상호작용할 수 있으며, Solana 블록체인에서 복잡한 프로그램 기능이 가능해집니다.

전반적으로, Solana 런타임 CPI는 복잡하고 강력한 탈중앙화 애플리케이션을 만들 수 있게 해주므로, [Solana 개발자 역량](https://www.alchemy.com/overviews/learn-solana-development)의 중요한 부분입니다.

Solana 개발과 CPI로의 여정을 시작하고 싶다면, 지금 [Alchemy 계정](https://dashboard.alchemy.com/signup/?a=cross-program-invocation)에 가입하세요!
