리비전 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 }
r1 보기 역사 목록