이 블로그는 NFT 거래 서비스를 만들며 겪은 시행착오와 해결과정을 정리한 내용입니다.
의욕은 넘치지만 아직 배우는 과정인 신입 개발자가 쓴 글이기 때문에, 틀리거나 더 좋은 방법이 있을 수 있습니다. 틀린 내용이 있거나 더 좋은 방법이 있으면 댓글로 알려주시면 감사하겠습니다..
이 글에서 노드(Node), 블록체인 서버(BlockChain), 메인넷(Mainnet)은 같은 의미로 사용됩니다.
저희 회사의 블록체인의 합의 알고리즘은 위임지분증명(rdPoS)입니다.
2022년 11월, 내가 회사에 입사한 지 일주일만에 첫 미션으로 주어졌다. 블록체인 기반의 토큰(TRC721)인 NFT를 만들어 거래할 수 있는 서비스를 개발하는 일이었다. (백엔드 인력이 부족했고 중간 개발자가 없었다..) 🥲
처음 맡은 프로젝트였기 때문에 설레는 마음도 있었지만, 백엔드 1명(나) + 블록체인 1명 + iOS 2명 + 안드로이드 2명 + 프론트 엔드 1명 + 기획자 2명으로 구성된 개발 인원 중에서 나 혼자 돈과 관련된 백엔드 서버를 개발해야 한다는 부담감도 느꼈다.
1어떤 프로젝트든 처음 개발하는 사람이 코드를 어떻게 짜느냐에 따라 리팩토링 기간과 유지보수 기간이 기하급수적으로 늘어나거나 줄어들기 때문에 신중하게 개발해야 한다는 생각으로 시작했다.
또한 블록체인 서비스를 개발하기 위해선 블록체인 서비스들이 어떤 식으로 동작하는 이해하고 사용자 관점에서 봐야한다고 생각해서 Opensea.io나 Pala.io같은 유명한 NFT 거래소를 사용하기로 생각했다.
프로젝트를 진행하면서 나는 블록체인 개발자, 프론트 엔드 개발자, 앱 개발자, 기획자 모두와 소통을 가장 많이 해야되기 때문에 협업을 잘하는 방법에 대한 원티드 컬럼도 읽어봐야겠다.
이러한 생각들을 가지고 서비스 개발을 시작했다.
TRC721 기반 토큰을 생성하는 로직이 완성되고 토큰을 만들어봤는데 소요시간이 평균적으로 30초 ~ 1분 사이였다.
만약 여러 명이 동시에 요청한다면 클라이언트에서 Timeout이 발생할게 뻔했다.
우리 회사의 메인넷은 설명하기 힘든 사유로... 비교적 상당히 느린 속도를 가지고 있다.
블록체인 개발자는 아니지만 이더리움 ERC721 기반의 토큰(NFT)을 생성할 때도 속도가 매우 느린것을 보면 원래 그런건지도..
아래는 NFT가 가지는 상태를 간단히 정리한 표 입니다.
상태 | 설명 |
---|---|
ISSUE | 컬렉션 최초 발행 |
MINTED | NFT의 최초 발행 |
LISTING | NFT 판매등록 |
LISTING CANCEL | NFT 판매 등록 취소 |
SALE | NFT 거래 |
TRANSFER | NFT의 소유권 이전 |
여기서 MINTED | SALE | TRANSFER 작업은 꽤 많은 시간이 소요된다.
우선 NFT 발행을 구현하기 위한 방법들을 생각했다.
다 좋은데 단점이 너무 치명적이다. 앱팀에서 timeout을 60초로 늘렸는데도 문제가 생긴다고... 🥲
그래서 생각해낸 방법은 지연 민팅이다.
다른 점이 없어보이지만 3,4번 작업은 판매등록, 판매등록취소 작업이 일어나면 실행돼서 발행 자체는 시간이 오래 걸리지 않는다.
내가 생각하는 2번 방법의 가장 좋은 점은 가스비가 들지 않기 때문에 NFT에 관심은 있으나 돈은 쓰기 싫은 사용자들의 유입을 기대할 수 있다는 점이다.
내가 3번 방법을 선택한 이유는 서비스 시작이 비교적 늦은 우리 회사는 트랜잭션 하나 하나가 중요하고 트랜잭션이 많이 쌓일 수록 가스비가 많아진다.
2번에 경우 발행만 하고 LISTING, TRANSFER를 하지 않는다면 발행이 되지 않아 트랜잭션도 쌓이지 않지만 3번 방법는 Queue에 삽입된 이상 트랜잭션이 보장되기 때문이다.
결론은 개발자와 기획자의 시각에서 예상치 못한 실패로 인한 가스비 손실보다 2번에서 트랜잭션이 일어나지 않은 비용 이 더 중요하다고 생각했다.
신규 유입이 없는 서비스인 만큼 사용자가 쌓아주는 트랜잭션 하나하나가 중요했기 때문이다.
더 좋은 방법을 생각하기 위해서 회의 시간마다 팀원들과 사내 카페에서 몇 시간씩 회의했다는..
몇 자 끄적이다보니 글이 너무 길어져 다음 포스트에서 이어 써야겠다..