기본 지식
Gno.Land가 무엇인지 알기 위해서는 몇 가지 사전 지식을 알아야 이해할 수 있습니다.
블록체인
블록체인과 암호화폐를 혼동하기 쉬운데, 블록체인은 기술이고 암호화폐는 그 기술 위에서 돌아가는 서비스입니다.
인터넷과 이메일의 관계가 블록체인과 암호화폐의 관계와 같다고 볼 수 있죠. 이메일도 인터넷 위에서 돌아가는 서비스잖아요.
- 블록체인 = 인터넷
- 암호화폐 = 이메일
블록체인은 중앙 기관 없이 개인끼리 거래를 하고, 거래 내역을 안전하게 기록하고 검증하기 위해 개발된 것으로, 자연스럽게 다음과 같은 특징을 지닙니다.
- 탈중앙화 (Decentralization)
- 중앙 서버나 은행 없이 네트워크 참여자 모두가 거래 기록을 공유.
- 특정 기관이 데이터를 조작하기 어려움.
- 변경 불가성 (Immutability)
- 한 번 기록된 블록은 뒤의 블록들과 연결되어 변경이 사실상 불가능.
- 데이터 위변조를 막을 수 있음.
- 투명성 (Transparency)
- 거래 내역이 누구에게나 공개됨. (예: 비트코인 블록 탐색기에서 모든 거래 확인 가능)
- 신뢰를 코드와 시스템으로 확보.
- 보안성 (Security)
- 암호학 기술(해시 함수, 공개키 암호화 등)을 이용해 안전하게 거래 기록을 보호.
- 합의 알고리즘 (Consensus Algorithm)
- 누가 새로운 블록을 만들 자격이 있는지, 어떤 블록이 진짜인지를 정하는 규칙.
- 비트코인: 작업증명(PoW, Proof of Work).
- PoW: 노드들이 어려운 수학 문제(해시 퍼즐)를 풀어서 블록 생성 권리를 획득.
- 이후: 지분증명(PoS, Proof of Stake), BFT 등 다양한 방식이 발전.
- PoS: 지분(코인 보유량)을 기반으로 블록 생성자 선택.
후에 이더리움이 등장하며 단순한 거래 시스템에서 벗어나 프로그램을 실행할 수 있게 되었고, 지금은 Gno.land를 통해 GitHub와 같은 오픈소스 협업 플랫폼을 블록체인에서 구현하려는 시도들이 이어지고 있습니다.
Smart Contract
스마트 컨트랙트는 블록체인의 핵심으로, 조건이 충족되면 자동으로 실행되는 계약(프로그램)입니다. 중앙 기관(은행, 공증인, 회사) 없이 블록체인 위에서 코드에 따라 약속이 자동 실행됩니다.
블록체인의 대표적인 특징들은 스마트 컨트랙트에서 비롯됩니다.
- 자동 실행 (Automation) → 조건 만족 시 계약이 자동 실행됨.
- 변경 불가 (Immutability) → 배포된 스마트 컨트랙트 코드는 블록체인에 영구 기록 → 임의로 수정 불가.
- 투명성 (Transparency) → 코드가 공개되어 누구나 확인 가능 → 신뢰성을 코드로 보장.
- 중앙 기관 불필요 (Trustless) → 제3자(은행, 변호사) 없이도 계약이 실행됨.
스마트 컨트랙트 언어는 블록체인의 합의 시스템 위에 “프로그램(계약 로직)”을 올려 실행할 수 있게 해줍니다.
Cosmos SDK, Tendermint
블록체인 애플리케이션을 쉽게 개발할 수 있도록 만든 오픈소스 프레임워크입니다. 이를 통해 개발자는 맞춤형 블록체인 애플리케이션을 만들 수 있습니다.
Cosmos SDK
- 블록체인 계의 프레임워크
- 모듈식 아키텍처로 필요한 기능(계정, 토큰, Staking 등)을 조립할 수 있음.
- 개발자는 합의 엔진을 걱정할 필요 없이 비즈니스 로직 개발에 집중 가능.
- 인터체인(Interchain)
- 가장 큰 특징 중 하나로, IBC(Inter-Blockchain Communication) 프로토콜을 통해 서로 다른 블록체인들을 연결해 교환할 수 있음.
- 거버넌스 (On-chain Governance)
- Cosmos 체인들은 대부분 온체인 투표 시스템을 내장하여 중앙 기관 없이 커뮤니티 주도적으로 운영 가능.
- 예: 업그레이드, 파라미터 변경, 제안 사항을 토큰 보유자들이 직접 투표.
- 빠른 파이널리티 (Fast Finality)
- Tendermint BFT 합의 덕분에 블록이 생성되면 바로 확정됨.
- 비트코인처럼 “6블록 기다려야 안전하다”는 개념이 없으므로 거래 확정 속도가 빠름.
Tendermint
- BFT(Byzantine Fault Tolerance) 개념을 적용한 대표적인 PBFT 프로토콜을 블록체인에 맞게 개선한 합의 알고리즘.
- Cosmos 생태계 안에서 합의·네트워킹 엔진 역할을 하며, 개발자가 비즈니스 로직에 집중할 수 있게 해줌.
- 제안자(Proposer)와 검증인(Validator)들이 “2/3 이상 동의” 시 최종 확정.
- 이 덕분에 악의적인 노드가 들어와도 전체 네트워크의 3분의 1만 정직하다면 안전하게 유지 가능.
- Tendermint는 블록이 Commit되면 100% 확정되므로 Fast Finality를 제공.
Web2 vs Web3
블록체인 같은 기술을 다루다보면 Web3라는 단어를 자주 듣게 되는데 자연스럽게 드는 의문이 바로 web2, web3의 차이점이죠. 가장 특징은 데이터를 직접 소유한다는 점입니다.
| 구분 | Web1 | Web2 | Web3 |
|---|---|---|---|
| 시대 | 1990년대 ~ 2000년대 초반 | 2000년대 초반 ~ 현재 | 2020년대 이후 |
| 핵심 개념 | 읽기(Read) 전용 | 읽기 + 쓰기(Read + Write) | 읽기 + 쓰기 + 소유(Read + Write + Own) |
| 참여 방식 | 기업/기관이 만든 정보만 열람 | 사용자가 콘텐츠 생성 및 공유 | 사용자가 직접 운영·참여·소유 |
| 데이터 소유권 | 웹사이트 운영자 | 플랫폼 기업 (구글, 메타 등) | 사용자 (지갑/블록체인) |
| 수익 구조 | 배너 광고, 단순 온라인 판매 | 광고, 데이터 기반 비즈니스 | 토큰 경제, 기여 기반 보상 |
| 검열/통제 | 운영자가 콘텐츠 수정·삭제 | 기업/정부가 계정 정지 가능 | 탈중앙화로 검열 저항성 |
| 기술 기반 | HTML, 정적 웹사이트 | 클라우드, 모바일, 중앙 서버 | 블록체인, 스마트 컨트랙트, P2P |
| 예시 | 네이버 초기 지식검색, 야후 디렉토리 | 유튜브, 페이스북, 인스타그램 | 이더리움, Uniswap, Lens Protocol, Gnoswap |
위 테이블을 보면 알 수 있듯이 web3의 가장 큰 특징은 데이터 소유로 데이터를 중앙에 보관하는 아닌 탈중앙화되어 개인들이 소유한다는 점입니다.
Gno.Land
이더리움의 등장으로 탈중앙 거래 시스템에서 더 나아가 탈중앙 애플리케이션(dApp)의 가능성이 열렸지만, Solidity 언어의 제약과 EVM 스택, 비효율적인 연산 등 여러 문제점이 있었습니다.
이러한 문제는 다른 스마트 컨트랙트 언어에서도 발생했습니다. 이를 해결하고자 만들어진 것이 Gno이며, Gno는 Go 언어와 문법을 99% 공유해 매우 직관적입니다.
따라서 비교적 적은 코드베이스만으로도 전체 시스템을 이해할 수 있습니다.
오픈소스 플랫폼
Gno.Land는 블록체인에서 돌아가는 오픈소스 공유 플랫폼을 지향합니다.
사람이 읽을 수 있는 스마트 컨트랙트 소스를 블록체인에 직접 올려, 누구나 열람·포크·기여할 수 있게 합니다.
기여함으로써 보상도 얻을 수 있으며, 기여를 하기 위해서는 가스가 필요하기 때문에 일종의 진입 장벽이 생겨 불필요한 더미 코드가 추가되는 것도 어느 정도 막을 수 있습니다.
코드 업로드
아래와 같은 일련의 동작을 통해 코드가 블록체인에 푸시됩니다.
- 트랜잭션 생성: 코드를 포함한 트랜잭션 생성
- 서명: 개인키로 트랜잭션 서명 (나중에 공개키로 검증)
- 전송: RPC 서버를 통해 네트워크에 전송
- 검증: 검증자들이 트랜잭션 유효성 확인 (이를 통해 기여가 이뤄지며 검증자는 보상을 받음)
- 블록 생성: 유효한 트랜잭션을 블록에 포함
- 상태 저장: 코드가 블록체인에 영구 저장
용량 문제
블록체인 결국 생태계 전체가 하나의 저장소 역할을 하는 데 이걸 오픈 소스 저장소로 사용한다는 가정이 들어가면 기존 보다도 훨씬더 빠르게 용량이 커질 것 입니다. 자연 스럽게 용량 문제가 발생하게 되는데, Gno.land는 이 부분을 코드의 성격에 따라 계층을 나누어 다르게 저장하는 걸로 해결합니다.
Package (재사용 코드)
- 비유: npm 라이브러리나 Go 패키지 같은 유틸리티 코드
- 특징:
- 여러 컨트랙트에서 가져다 쓸 수 있음 (import 가능).
- 한 번 올려두면 계속 가져다 쓰기만 하면 됨 → 똑같은 코드가 여러 번 저장되지 않음.
- 사용처
- 수학 계산 함수, 문자열 처리 함수 같은 건 여러 컨트랙트가 공통으로 쓰이는 부분
- 이걸 매번 복사해서 저장하면 용량이 너무 많아지기에 Package로 올려두고 다 같이 사용
Realm (실제로 실행되는 상태)
- 비유: 게임 서버에 저장되는 세이브 파일과 핵심 게임 로직으로, 즉 블록체인의 핵심 데이터
- 특징:
- 상태(state)를 가진 실행 코드. (사용자 잔고, NFT 소유 기록 등)
- 블록체인에 영구 보존해야 하는 핵심 로직과 데이터만 저장.
- 사용처
- 블록체인의 본질은 “신뢰할 수 있는 상태 저장"이니까, 진짜 중요한 부분만 여기에 남김.
- 불필요한 코드나 임시 실행 로직은 제외해서 저장 공간 절약.
Script (일회성 실행문)
- 비유: 터미널에서 한 번 치고 끝나는 명령어
- 특징:
- 블록체인에 영구 보관하지 않음.
- 실행한 결과만 반영되고, 코드는 안 남음.
- 사용처
- 테스트 코드, 임시 로직, 로그 찍는 용도 같은 건 굳이 영구 저장할 필요 없음.
- 한 번 실행하고 결과만 반영.
결론
- Package = 공용 도구 상자 (한 번만 저장, 계속 가져다 씀).
- Realm = 실제 비즈니스 로직 (핵심 상태 + 로직만 저장).
- Script = 일회성 실행문 (결과만 남기고 코드 자체는 버림).
이렇게 코드의 성격에 따라 구분 함으로써 기존 블록체인의 용량 문제를 일부 완화했습니다.
앞으로 생태계가 더 커지면 새로운 접근이 적용되어 더 개선될 것이라 예상합니다.
GitHub 와 같은 오픈 소스 저장소와의 차이
위에서 보듯이 오픈 소스 저장소를 지향하지만 블록체인에서 돌아간다는 특징으로 GitHub와는 굉장히 다른 모습을 띕니다.
| 구분 | GitHub (일반 오픈소스 저장소) | Gno.land (블록체인 기반 저장소) |
|---|---|---|
| 저장 목적 | 코드를 버전 관리 / 협업하기 위해 저장 | 코드를 실행 환경(스마트컨트랙트) 으로 올려, 실제 서비스로 동작 |
| 코드 성격 | 참고용/배포용 소스 (실행은 로컬/서버에서) | 블록체인 네트워크에서 직접 실행됨 (컨트랙트) |
| 변경 방식 | 누구나 clone → 수정 → PR/Merge | 누구나 Script/Package 업로드 가능하지만, 올린 순간 블록체인 규칙에 따라 영구 기록 |
| 데이터 보존 | 파일 히스토리(git commit)로 관리 → 삭제/수정 가능 | 블록체인에 올라간 Realm/상태는 변조 불가 |
| 주체 | GitHub라는 중앙화된 회사의 서버 | 탈중앙 블록체인 네트워크 전체가 저장소 역할 |
| 실행 결과 | 저장된 코드는 그냥 텍스트 → 실행은 사용자가 따로 함 | 저장된 코드는 곧 컨트랙트 → 실행 결과가 체인에 반영됨 |
부가 설명
Github는 여러 책들이 있는 도서관으로 여러 사람들이 와서 자기만의 책을 쓰거나 남의 책에 자신의 의견을 남기고 수정을 요청할 수 있거나 아예 집필을 같이 할 수 있습니다.
반면 Gno.Land는 하나의 거대한 오픈 월드 게임로 보시면 됩니다(마치 레디 플레이어 원처럼). 이 게임의 재밌는 점은 게임의 룰을 사용자 마음대로 정할 수 있고, 새로 만든 룰이 여러 사용자에게 검증을 받으면 게임에 바로 적용된다는 점입니다.
정리
- GitHub: 코드를 저장/공유하는 중앙화된 협업 툴.
- Gno.land: 코드를 올리면 곧바로 블록체인에서 실행되고 상태까지 기록되는 탈중앙 실행형 저장소.
기타
문서: https://gno.land/ github: https://github.com/gnolang/gno
https://github.com/gnolang/gno 를 로컬에 다운받고 손쉽게 로컬에서 블록체인 환경으로 테스트도 가능하고 코드도 돌려볼 수 있습니다.
폴더 구조
gno/
├── docs/ # 공식 문서 (사용법, 개발 가이드)
├── examples/ # 예제 코드 (학습용)
├── gnovm/ # Gno 가상머신 (핵심 엔진)
├── gno.land/ # 블록체인 노드 및 도구들
├── tm2/ # Tendermint2 합의 엔진
├── contribs/ # 추가 도구들
└── misc/ # 기타 유틸리티
docs/
├── users/ # 사용자 가이드 (gnokey 사용법)
├── builders/ # 개발자 가이드 (스마트 컨트랙트 작성)
└── resources/ # 기술 문서 및 참고자료
examples/gno.land/
├── p/ # Pure Packages (상태 없는 함수들)
│ └── demo/ # 유틸리티 함수들 (ufmt, math 등)
└── r/ # Realms (상태 있는 스마트 컨트랙트)
└── demo/ # 실제 애플리케이션들
├── counter/ # 카운터 앱
├── banktest/ # 은행 테스트
├── todolist/ # 할일 목록
└── games/ # 게임들
gno.land/cmd/
├── gnokey/ # 키 관리 및 트랜잭션 전송
├── gnoland/ # 블록체인 노드 실행
└── gnoweb/ # 웹 인터페이스
💬 댓글