개발없이 클레이 제너러티브 NFT 발행하기(0) — Klay-Gacha-Machine

이은강
5 min readFeb 27, 2022

전 글에서 말씀드렸던 대로, 개발 없이도 클레이튼 기반의 제너러티브 NFT를 발행하기 위한 Klay-Gacha-Machine툴을 개발했다.

특별히 코딩스킬 없이 발행준비를 마칠 수는 있지만, 그렇다고 마우스 클릭 하나로 가능한 것은 아직 아니니, 그에 대한 설명을 제공드려보겠다.

그 전에!

일단 NFT에 대한 설명(아니 자질구레하게 논 펀저블 토큰의 정의는 어쩌고…하는건 아니고…아니 조금만…)과 NFT 발행 과정에 대해서 먼저 설명드릴테니 큰 줄기를 먼저 보시고 충분한 이해를 선행하길 바란다.

  • NFT는 딱 한개만 발행하는 토큰이다(안읽어도 됨)

새삼스럽지만 NFT에 대해서 조금 생각해보자.

NFT는 왜 태어난걸까?

토큰은 엄연히 코인과 구분된다. 코인은 자체 메인넷을 가진, 그러니까 ‘메인넷’이라고 불리는 자체적인 블록체인 서버 위에서 돌아가지만, 토큰은 메인넷 없이 다른 코인의 메인넷 위에 만들어진, 그러니까 ERC20과 같은 표준의 더부살이 가상화폐이다. 현재는 위상이 높은 많은 코인들이 한 때에는 이더리움이나 비트코인의 블록체인 위에 만들어진 토큰에 불과했으며, 이후 메인넷을 만들어 코인으로 거듭난 것이다.

처음에 토큰을 만들던 사람들은 100만개, 1억개, 10억개 등 발행량을 저마다 가져가면서 이 토큰으로 서비스 생태계를 만들었겠지만, 어느 순간에 어떤 누군가가 이런 생각을 했었을 것이다.

딱 한개만 발행하면 어떻게 될까?

이더리움은 블록단위로, 솔라나는 시간단위로 각 트랜잭션을 구분하고, 이 트랜잭션 중 어떤 것들은 토큰의 탄생을 위해 쓰인다. 그러니 각 토큰들은 저마다 유니크한 구분값을 가지고 있는데, 이걸 ‘딱 하나만’ 만들어버리면 기존의 토큰과는 특성이 많이 다른 뭔가가 만들어지는 것이다. 그게 ‘대체 불가능’이며, 마치 누군가의 인감도장이나 공증받은 문서처럼

이것은 딱 하나밖에 없으므로 진짜라고 핵인정 쌉가능 ㅇㅇ

이게 NFT의 기원이 아닐까?라는 추측이다.

여기에 추가적으로 NFT들은 처음에는 그저 하나뿐인 토큰이었지만, 여기에 Metadata가 붙으면서 점점 그 기능이 자리매김하기 시작한다.

  • NFT의 발행과정(여기서부터 읽어도 ㄱㅊ)

NFT의 발행과정을 간단히 살펴보자. 스마트 컨트랙트 위에서는 보통 딱 두 줄이면 끝난다.

_mint()

_setTokenURI()

이 두 함수가 NFT의 발행에 가장 필수적이고, 반대로 이것만 있어도 괜찮다. 하지만 스마트컨트랙트가 언제나 그렇듯 의미는 상당히 복잡하다.

  1. NFT가 될 작품(데이터)을 만든다.

사실 NFT와는 별로 상관없는 일이다. 그림을 그리거나, 사진을 찍거나, 각 파츠를 그리고 조합해 1만개의 작품을 만들거나하는 일이다.

2. Metadata를 생성한다.

Metadata는 대략 아래와 같은 구조를 갖는다.

{
“name”:”NFT의 이름”,
“symbol”:”NFT의 토큰심볼”,
“description”:”NFT의 설명, 그러니까 한줄짜리 홍보용 문구”,
“image”:”https://ipfs.io/ipfs/{해시값} 이미지의 주소”,
“attributes”:[{“trait_type”:”속성명 ex)hair color”,”value”:”속성값 ex) red”}]
}

사실 그림과는 딱히 상관이 없다. 어떤 형태의 데이터, 그러니까 음원이던 문서이던 상관은 없다. 아무튼 이 Metadata를 NFT가 될 데이터마다 생성해줘야 한다.

한가지 문제는 “image”에 들어갈 data의 URL이다.

3. NFT화시킬 데이터를 저장소에 업로드한다.

Metadata 안에 “image”를 보면, 어떤 URL이 들어가게 된다.

이 URL은 바로 NFT화시킬 데이터의 주소값이다.

한마디로 “NFT 데이터를 인터넷에 올려서 그 주소를 박아야 한다”라는 것이다.

따라서 1번에서 만들어진 NFT 작품들, 예컨데 그림의 png 파일을 웹 스토리지에 올린 다음, 그 URL을 따서 넣으면 된다.

여기서 발행인들은 선택의 기로에 놓이게 되는데,

어떤 저장소에 올려야 하나?

로 고민하게 된다.

일반적으로 IPFS에 올리는 이유는 IPFS가 블록체인과 비슷한 ‘분산 저장소’이기 때문이며, 그 특성은 다음과 같다.

  • 파일이 분산되어 저장되기 때문에 ‘거의 영원히’ 보관될 수 있다.
  • 파일이 분산되어 저장되기 때문에 한번 올리면 수정할 수 없다.

IPFS가 아닌 기존 웹 스토리지에 대해서 생각해보면,

  • 파일을 올린 사람 마음대로 교체하거나 삭제할 수 있다.

예컨데 내가 모나리자를 NFT화 시키려면 모나리자를 저장소에 올려야 하는데, 이걸 1천억에 팔고난 다음 모나리자 그림파일을 지우거나, 다른 그림파일로 교체할 수 있다고 하면, 이 NFT에 대한 신뢰가 있을까?

라는 의미에서 IPFS는 NFT의 스토리지로 고려될 수밖에 없다.

다만, 예외가 있긴 한데, 이건 얘기가 길어지니까 나중에 써보고…

아무튼 위의 이유로 보통 저장소는 IPFS에 올리고, 그 주소값을 가져다가 각 Metadata에 박아넣는 과정을 거쳐야 한다.

4. Metadata도 IPFS에 올린다.

3번까지 진행해서 각 NFT 대상 이미지들은 이미 업로드 되고, 그 주소들을 가진 metadata까지 준비가 됐으면, 이제 metadata 자체, 그러니까 각 JSON 파일들을 또 IPFS와 같은 저장소에 올린다.

그리고 업로드 된 metadata의 URL이 바로 NFT의 tokenURI가 되는 것이다.

5. NFT를 발행(Mint)한다.

Metadata 파일의 링크를 스마트컨트랙트에 올려서 token으로 mint를 하면 바로 NFT가 생성된다.

이게 NFT 발행의 전 과정이다. 이러한 과정을 머릿속에 먼저 이해시키고, NFT 발행을 해보도록 하자!

--

--