리비전 diff
빈 문서 → r1 · 2026-07-19 22:21
본문 변경 비교
+368
-0
변경 0
기준: 새 문서
| 이전 | 이전 내용 | 현재 | 현재 내용 |
|---|---|---|---|
| 1 | [[인포박스]] | ||
| 2 | | Move 언어(Move Language) | | | ||
| 3 | |:---:|:---:| | ||
| 4 | | **분류** | 코인 용어 / 스마트 컨트랙트 언어 / 블록체인 개발 | | ||
| 5 | | **영문명** | Move | | ||
| 6 | | **수이 명칭** | Sui Move | | ||
| 7 | | **한 줄 요약** | 디지털 자산의 소유권, 이동, 저장, 권한을 안전하게 표현하기 위해 설계된 스마트 컨트랙트 프로그래밍 언어 | | ||
| 8 | | **관련 분야** | 블록체인, 스마트 컨트랙트, 수이, 앱토스, Move VM, 객체 모델, NFT, DeFi, 게임파이 | | ||
| 9 | | **초기 개발 배경** | Meta Libra / Diem 프로젝트 | | ||
| 10 | | **주요 사용 체인** | Sui, Aptos, Movement, Starcoin 등 | | ||
| 11 | | **수이에서의 역할** | Sui 스마트 컨트랙트 작성 언어 | | ||
| 12 | | **수이 기반 확장** | Sui Move | | ||
| 13 | | **핵심 개념** | 리소스, 모듈, 패키지, 객체, 소유권, 능력, 트랜잭션 | | ||
| 14 | | **대표 능력** | copy / drop / store / key | | ||
| 15 | | **수이 핵심 구조** | Object-centric Data Model | | ||
| 16 | | **수이 객체 유형** | 소유 객체 / 공유 객체 / 불변 객체 / 객체 소유 객체 / Party 객체 | | ||
| 17 | | **대표 활용 분야** | 토큰 발행, NFT, DeFi, 게임 아이템, DAO, RWA, 온체인 자산 관리 | | ||
| 18 | | **대표 실행 환경** | Move VM | | ||
| 19 | | **비교 언어** | Solidity, Rust, Cairo, Vyper | | ||
| 20 | | **공식 문서** | [Sui Move 문서](https://docs.sui.io/) | | ||
| 21 | | **Sui Move 소개** | [Move on Sui](https://www.sui.io/move) | | ||
| 22 | | **Move Book** | [The Move Book](https://move-book.com/) | | ||
| 23 | | **Sui Move 예제** | [Sui Move by Example](https://examples.sui-book.com/) | | ||
| 24 | | **Sui GitHub** | [Sui GitHub](https://github.com/MystenLabs/sui) | | ||
| 25 | | **Move GitHub** | [Move GitHub](https://github.com/move-language/move) | | ||
| 26 | | **Sui Explorer** | [Sui Explorer](https://suiexplorer.com/) | | ||
| 27 | | **X(트위터)** | [Sui 트위터](https://x.com/SuiNetwork) | | ||
| 28 | | **텔레그램** | [Sui 텔레그램](https://t.me/SuiNetwork) | | ||
| 29 | | **디스코드** | [Sui 디스코드](https://discord.gg/sui) | | ||
| 30 | [[/인포박스]] | ||
| 31 | |||
| 32 | ## 개요 | ||
| 33 | |||
| 34 | Move 언어는 블록체인에서 스마트 컨트랙트를 작성하기 위해 만들어진 프로그래밍 언어이다. | ||
| 35 | |||
| 36 | Move는 특히 디지털 자산을 안전하게 표현하는 데 초점을 맞춘다. | ||
| 37 | |||
| 38 | 일반적인 프로그래밍 언어에서는 숫자나 객체를 복사하거나 삭제하는 것이 자유로운 경우가 많다. | ||
| 39 | |||
| 40 | 하지만 블록체인에서 토큰, NFT, 게임 아이템, 담보 포지션 같은 자산이 마음대로 복사되거나 사라지면 심각한 문제가 발생한다. | ||
| 41 | |||
| 42 | Move는 이러한 문제를 줄이기 위해 자산을 일반 데이터가 아니라 특별한 리소스로 다룬다. | ||
| 43 | |||
| 44 | 즉 Move에서는 어떤 값이 복사될 수 있는지, 버려질 수 있는지, 저장될 수 있는지, 온체인 저장소의 핵심 자산이 될 수 있는지를 언어 차원에서 제한한다. | ||
| 45 | |||
| 46 | 이러한 구조는 블록체인 스마트 컨트랙트에서 자산 안전성을 높이는 데 도움이 된다. | ||
| 47 | |||
| 48 | Move는 처음 Meta의 Libra, 이후 Diem 프로젝트에서 개발되었다. | ||
| 49 | |||
| 50 | Diem은 글로벌 결제 네트워크를 목표로 했던 프로젝트였고, Move는 그 안에서 디지털 자산과 접근 권한을 안전하게 다루기 위한 언어로 설계되었다. | ||
| 51 | |||
| 52 | Diem 프로젝트는 종료되었지만, Move 언어는 이후 여러 블록체인에서 사용되었다. | ||
| 53 | |||
| 54 | 대표적으로 수이와 앱토스가 Move 계열 언어를 사용한다. | ||
| 55 | |||
| 56 | 수이에서는 Move를 그대로 사용하는 것이 아니라 수이의 객체 중심 구조에 맞게 확장한 Sui Move를 사용한다. | ||
| 57 | |||
| 58 | Sui Move는 수이 블록체인에서 스마트 컨트랙트, 토큰, NFT, 게임 아이템, DeFi 포지션, 온체인 앱을 만들 때 사용된다. | ||
| 59 | |||
| 60 | 수이에서 Move 언어를 이해할 때 중요한 개념은 다음과 같다. | ||
| 61 | |||
| 62 | - 리소스 | ||
| 63 | - 능력 | ||
| 64 | - 모듈 | ||
| 65 | - 패키지 | ||
| 66 | - 객체 | ||
| 67 | - UID와 ID | ||
| 68 | - 소유 객체 | ||
| 69 | - 공유 객체 | ||
| 70 | - 불변 객체 | ||
| 71 | - 객체가 소유한 객체 | ||
| 72 | - Programmable Transaction Block | ||
| 73 | - Sui Framework | ||
| 74 | |||
| 75 | Move 언어는 단순히 “수이에서 쓰는 코딩 언어”가 아니다. | ||
| 76 | |||
| 77 | 수이의 핵심 구조인 객체 모델, 병렬 실행, 자산 소유권, NFT, 게임 아이템, DeFi 시장이 모두 Sui Move와 깊게 연결된다. | ||
| 78 | |||
| 79 | ## Move 언어란 | ||
| 80 | |||
| 81 | Move 언어는 스마트 컨트랙트 개발을 위한 프로그래밍 언어이다. | ||
| 82 | |||
| 83 | 스마트 컨트랙트는 블록체인 위에서 실행되는 프로그램이다. | ||
| 84 | |||
| 85 | Move는 이러한 스마트 컨트랙트가 디지털 자산을 안전하게 다룰 수 있도록 설계되었다. | ||
| 86 | |||
| 87 | Move의 핵심 목표는 다음과 같다. | ||
| 88 | |||
| 89 | - 디지털 자산을 안전하게 표현 | ||
| 90 | - 토큰과 NFT의 임의 복사 방지 | ||
| 91 | - 자산의 소유권 이동을 명확하게 표현 | ||
| 92 | - 권한과 접근 제어를 코드로 안전하게 구현 | ||
| 93 | - 스마트 컨트랙트 오류를 줄이기 위한 타입 시스템 제공 | ||
| 94 | - 블록체인별 실행 환경에 맞게 확장 가능 | ||
| 95 | |||
| 96 | Move에서는 자산이 단순한 숫자가 아니라 특별한 값으로 취급된다. | ||
| 97 | |||
| 98 | 예를 들어 토큰이나 NFT는 마음대로 복사되거나 버려지면 안 된다. | ||
| 99 | |||
| 100 | Move는 이런 자산을 리소스처럼 다루며, 값의 복사·삭제·저장·전송 가능 여부를 언어 차원에서 제한한다. | ||
| 101 | |||
| 102 | 이 때문에 Move는 자산 지향 프로그래밍 언어라고 설명되기도 한다. | ||
| 103 | |||
| 104 | ## Sui Move란 | ||
| 105 | |||
| 106 | Sui Move는 수이 블록체인에서 사용하는 Move 언어의 변형이다. | ||
| 107 | |||
| 108 | 원래 Move는 계정 중심 모델을 기반으로 설계되었다. | ||
| 109 | |||
| 110 | 반면 수이는 객체 중심 데이터 모델을 사용한다. | ||
| 111 | |||
| 112 | 이 차이 때문에 수이는 Move를 수이의 구조에 맞게 확장했다. | ||
| 113 | |||
| 114 | Sui Move의 가장 큰 특징은 객체이다. | ||
| 115 | |||
| 116 | 수이에서는 온체인 자산과 데이터가 객체 단위로 관리된다. | ||
| 117 | |||
| 118 | 예를 들어 다음과 같은 것들이 모두 객체가 될 수 있다. | ||
| 119 | |||
| 120 | - SUI 코인 | ||
| 121 | - NFT | ||
| 122 | - 게임 아이템 | ||
| 123 | - 캐릭터 | ||
| 124 | - 티켓 | ||
| 125 | - 멤버십 | ||
| 126 | - DeFi 유동성 포지션 | ||
| 127 | - 대출 포지션 | ||
| 128 | - DAO 금고 | ||
| 129 | - 마켓플레이스 | ||
| 130 | - 오더북 | ||
| 131 | - 설정 객체 | ||
| 132 | |||
| 133 | Sui Move는 이러한 객체를 만들고, 전송하고, 수정하고, 공유하고, 조합하는 데 사용된다. | ||
| 134 | |||
| 135 | Sui Move는 일반 Move와 비교해 다음 점이 중요하다. | ||
| 136 | |||
| 137 | - 객체 중심 모델 사용 | ||
| 138 | - 객체마다 고유 ID 존재 | ||
| 139 | - 객체의 소유권이 명확하게 표현됨 | ||
| 140 | - 소유 객체와 공유 객체를 구분 | ||
| 141 | - 객체가 다른 객체를 소유할 수 있음 | ||
| 142 | - 트랜잭션에서 여러 객체를 입력값으로 사용 가능 | ||
| 143 | - 병렬 실행과 연결됨 | ||
| 144 | |||
| 145 | ## Move가 만들어진 배경 | ||
| 146 | |||
| 147 | Move는 Meta의 Libra 프로젝트에서 시작되었다. | ||
| 148 | |||
| 149 | Libra는 이후 Diem으로 이름이 변경되었다. | ||
| 150 | |||
| 151 | 이 프로젝트는 블록체인 기반 글로벌 결제 네트워크를 목표로 했다. | ||
| 152 | |||
| 153 | 결제 네트워크에서는 디지털 자산을 안전하게 다루는 것이 매우 중요하다. | ||
| 154 | |||
| 155 | 토큰이 마음대로 복사되거나, 잘못 삭제되거나, 권한 없는 사용자가 이동시킬 수 있으면 결제 시스템은 신뢰를 잃게 된다. | ||
| 156 | |||
| 157 | Move는 이러한 문제를 해결하기 위해 만들어졌다. | ||
| 158 | |||
| 159 | Move는 자산을 일반 데이터와 다르게 취급한다. | ||
| 160 | |||
| 161 | 자산은 복사할 수 있는지, 삭제할 수 있는지, 저장할 수 있는지, 글로벌 저장소의 핵심 값이 될 수 있는지를 명확히 제한한다. | ||
| 162 | |||
| 163 | 이러한 구조는 토큰과 NFT, 담보 자산, 게임 아이템 같은 디지털 자산을 다루는 데 적합하다. | ||
| 164 | |||
| 165 | Diem 프로젝트는 종료되었지만, Move 언어는 수이, 앱토스, 스타코인, 무브먼트 등 여러 프로젝트에서 계속 사용되고 있다. | ||
| 166 | |||
| 167 | ## 핵심 특징 | ||
| 168 | |||
| 169 | ### 1. 자산 지향 언어 | ||
| 170 | |||
| 171 | Move의 가장 큰 특징은 자산 지향성이다. | ||
| 172 | |||
| 173 | 일반적인 스마트 컨트랙트 언어에서는 토큰 잔액을 숫자로 저장하는 경우가 많다. | ||
| 174 | |||
| 175 | 예를 들어 어떤 주소가 100개의 토큰을 가지고 있다고 하면, 컨트랙트 내부에는 `주소 → 잔액` 형태의 기록이 있을 수 있다. | ||
| 176 | |||
| 177 | Move에서는 자산을 더 엄격하게 다룬다. | ||
| 178 | |||
| 179 | 자산은 마음대로 복사하거나 삭제할 수 없는 값으로 표현된다. | ||
| 180 | |||
| 181 | 이 구조는 다음 문제를 방지하는 데 도움이 된다. | ||
| 182 | |||
| 183 | - 토큰이 중복 발행되는 문제 | ||
| 184 | - NFT가 임의로 복사되는 문제 | ||
| 185 | - 자산이 실수로 삭제되는 문제 | ||
| 186 | - 권한 없는 사용자가 자산을 이동시키는 문제 | ||
| 187 | - 컨트랙트가 사용자 자산을 임의로 조작하는 문제 | ||
| 188 | |||
| 189 | ### 2. 리소스 모델 | ||
| 190 | |||
| 191 | Move의 리소스 모델은 자산을 특별한 값으로 다루는 방식이다. | ||
| 192 | |||
| 193 | 리소스는 일반 데이터처럼 자유롭게 복사하거나 버릴 수 없다. | ||
| 194 | |||
| 195 | 이 개념은 실제 세계의 물건과 비슷하다. | ||
| 196 | |||
| 197 | 예를 들어 지갑 속 1만 원권 지폐는 복사해서 두 장으로 만들 수 없다. | ||
| 198 | |||
| 199 | 또한 아무 이유 없이 사라지면 안 된다. | ||
| 200 | |||
| 201 | Move는 디지털 자산도 이와 비슷하게 다루려 한다. | ||
| 202 | |||
| 203 | 리소스 모델은 토큰, NFT, 담보, 권한 증서, 게임 아이템 같은 온체인 자산을 안전하게 표현하는 데 유리하다. | ||
| 204 | |||
| 205 | ### 3. 능력 시스템 | ||
| 206 | |||
| 207 | Move에는 능력이라는 개념이 있다. | ||
| 208 | |||
| 209 | 영문으로는 Ability라고 한다. | ||
| 210 | |||
| 211 | 능력은 어떤 타입의 값이 어떤 행동을 할 수 있는지를 정한다. | ||
| 212 | |||
| 213 | 대표적인 능력은 네 가지이다. | ||
| 214 | |||
| 215 | - copy | ||
| 216 | - drop | ||
| 217 | - store | ||
| 218 | - key | ||
| 219 | |||
| 220 | 이 네 가지 능력은 Move에서 자산을 안전하게 다루는 핵심 장치이다. | ||
| 221 | |||
| 222 | 값이 `copy` 능력을 가지면 복사할 수 있다. | ||
| 223 | |||
| 224 | 값이 `drop` 능력을 가지면 사용하지 않고 버릴 수 있다. | ||
| 225 | |||
| 226 | 값이 `store` 능력을 가지면 저장소 안에 저장될 수 있다. | ||
| 227 | |||
| 228 | 값이 `key` 능력을 가지면 온체인 저장소에서 핵심 객체나 리소스가 될 수 있다. | ||
| 229 | |||
| 230 | 수이에서는 `key` 능력을 가진 구조체가 객체로 사용된다. | ||
| 231 | |||
| 232 | ### 4. 모듈 기반 구조 | ||
| 233 | |||
| 234 | Move 코드는 모듈 단위로 구성된다. | ||
| 235 | |||
| 236 | 모듈은 함수, 구조체, 상수, 이벤트, 권한 로직을 담는 코드 단위이다. | ||
| 237 | |||
| 238 | 예를 들어 토큰을 만드는 모듈에는 다음 내용이 들어갈 수 있다. | ||
| 239 | |||
| 240 | - 토큰 타입 정의 | ||
| 241 | - 발행 함수 | ||
| 242 | - 소각 함수 | ||
| 243 | - 전송 함수 | ||
| 244 | - 관리자 권한 | ||
| 245 | - 이벤트 | ||
| 246 | - 초기화 로직 | ||
| 247 | |||
| 248 | Move에서는 특정 타입을 정의한 모듈이 그 타입의 핵심 권한을 관리한다. | ||
| 249 | |||
| 250 | 이 구조는 자산의 생성과 변경 권한을 명확히 하는 데 도움이 된다. | ||
| 251 | |||
| 252 | ### 5. 패키지 | ||
| 253 | |||
| 254 | 수이에서 Move 코드는 패키지 단위로 배포된다. | ||
| 255 | |||
| 256 | 패키지는 여러 모듈을 묶은 배포 단위이다. | ||
| 257 | |||
| 258 | 예를 들어 하나의 게임 프로젝트는 다음과 같은 모듈을 포함한 패키지를 배포할 수 있다. | ||
| 259 | |||
| 260 | - 캐릭터 모듈 | ||
| 261 | - 아이템 모듈 | ||
| 262 | - 전투 모듈 | ||
| 263 | - 마켓 모듈 | ||
| 264 | - 보상 모듈 | ||
| 265 | - 관리자 설정 모듈 | ||
| 266 | |||
| 267 | 패키지가 수이에 배포되면 온체인 패키지 객체가 된다. | ||
| 268 | |||
| 269 | 수이 공식 자료에서는 스마트 컨트랙트 패키지가 불변 객체로 존재한다고 설명한다. | ||
| 270 | |||
| 271 | 즉 배포된 패키지는 일반적으로 임의로 바뀌지 않는다. | ||
| 272 | |||
| 273 | 다만 수이는 패키지 업그레이드 기능도 제공하며, 업그레이드 권한과 정책에 따라 새 버전으로 발전할 수 있다. | ||
| 274 | |||
| 275 | ### 6. 객체 중심 모델 | ||
| 276 | |||
| 277 | Sui Move의 가장 중요한 차별점은 객체 중심 모델이다. | ||
| 278 | |||
| 279 | 수이에서 거의 모든 자산과 데이터는 객체로 표현된다. | ||
| 280 | |||
| 281 | 객체는 다음 요소를 가진다. | ||
| 282 | |||
| 283 | - 고유 ID | ||
| 284 | - 타입 | ||
| 285 | - 소유자 | ||
| 286 | - 버전 | ||
| 287 | - 데이터 | ||
| 288 | - 이전 트랜잭션 기록 | ||
| 289 | |||
| 290 | 이 구조는 NFT, 게임 아이템, 티켓, 멤버십, DeFi 포지션 같은 자산을 표현하기에 적합하다. | ||
| 291 | |||
| 292 | 예를 들어 게임 캐릭터 객체가 있고, 그 캐릭터 객체가 검, 방패, 지도 같은 아이템 객체를 소유할 수 있다. | ||
| 293 | |||
| 294 | 이런 구조는 게임과 디지털 자산을 표현하는 데 자연스럽다. | ||
| 295 | |||
| 296 | ### 7. 병렬 실행과 연결 | ||
| 297 | |||
| 298 | Sui Move의 객체 모델은 수이의 병렬 실행과 연결된다. | ||
| 299 | |||
| 300 | 서로 다른 객체를 사용하는 트랜잭션은 서로 충돌하지 않을 수 있다. | ||
| 301 | |||
| 302 | 예를 들어 다음 두 거래가 동시에 발생한다고 가정할 수 있다. | ||
| 303 | |||
| 304 | - A가 자신의 NFT를 B에게 전송 | ||
| 305 | - C가 자신의 게임 아이템을 업그레이드 | ||
| 306 | |||
| 307 | 두 거래가 서로 다른 객체만 사용한다면 같은 전역 상태를 기다릴 필요가 적다. | ||
| 308 | |||
| 309 | 수이는 이런 거래를 병렬로 처리할 수 있다. | ||
| 310 | |||
| 311 | 반면 DEX 유동성 풀처럼 여러 사용자가 동시에 접근하는 공유 객체는 합의와 순서 결정이 필요하다. | ||
| 312 | |||
| 313 | 따라서 Sui Move에서 객체를 어떻게 설계하느냐는 앱 성능과 직접 연결된다. | ||
| 314 | |||
| 315 | ## copy | ||
| 316 | |||
| 317 | copy는 값을 복사할 수 있는 능력이다. | ||
| 318 | |||
| 319 | 어떤 타입이 `copy` 능력을 가지면 그 값을 복사할 수 있다. | ||
| 320 | |||
| 321 | 예를 들어 숫자나 주소 같은 단순 값은 복사되어도 문제가 없다. | ||
| 322 | |||
| 323 | 하지만 토큰이나 NFT 같은 자산은 복사되면 안 된다. | ||
| 324 | |||
| 325 | 따라서 자산형 타입에는 보통 `copy` 능력을 주지 않는다. | ||
| 326 | |||
| 327 | copy 능력이 잘못 부여되면 자산이 중복될 수 있기 때문에, Move에서는 타입별 능력을 명확히 관리한다. | ||
| 328 | |||
| 329 | ## drop | ||
| 330 | |||
| 331 | drop은 값을 사용하지 않고 버릴 수 있는 능력이다. | ||
| 332 | |||
| 333 | 어떤 타입이 `drop` 능력을 가지면 해당 값을 사용하지 않아도 프로그램이 끝날 수 있다. | ||
| 334 | |||
| 335 | 일반 데이터는 버려도 문제가 없을 수 있다. | ||
| 336 | |||
| 337 | 하지만 토큰이나 NFT 같은 자산이 아무 처리 없이 버려지면 안 된다. | ||
| 338 | |||
| 339 | 그래서 자산형 타입에는 보통 `drop` 능력을 주지 않는다. | ||
| 340 | |||
| 341 | 이 구조는 중요한 자산이 실수로 사라지는 문제를 줄인다. | ||
| 342 | |||
| 343 | ## store | ||
| 344 | |||
| 345 | store는 값을 저장소 안에 저장할 수 있는 능력이다. | ||
| 346 | |||
| 347 | Sui Move에서 어떤 값이 객체 내부에 저장되려면 보통 `store` 능력이 필요하다. | ||
| 348 | |||
| 349 | store는 자산을 다른 객체 안에 넣거나, 온체인 상태로 보관하는 데 중요하다. | ||
| 350 | |||
| 351 | 예를 들어 게임 캐릭터 객체 안에 아이템 목록을 저장하거나, 금고 객체 안에 특정 데이터를 저장할 때 store 능력이 필요할 수 있다. | ||
| 352 | |||
| 353 | ## key | ||
| 354 | |||
| 355 | key는 온체인 저장소에서 핵심 객체가 될 수 있는 능력이다. | ||
| 356 | |||
| 357 | 수이에서는 `key` 능력을 가진 구조체가 객체가 될 수 있다. | ||
| 358 | |||
| 359 | Sui Move에서 객체를 만들려면 보통 `UID` 필드를 가진 구조체에 `key` 능력을 부여한다. | ||
| 360 | |||
| 361 | 예를 들어 다음과 같은 구조를 생각할 수 있다. | ||
| 362 | |||
| 363 | ```move | ||
| 364 | public struct Sword has key, store { | ||
| 365 | id: UID, | ||
| 366 | level: u64, | ||
| 367 | power: u64, | ||
| 368 | } |