5편 Remix IDE 에서 기능성 토큰 계약 만들기

기능성 토큰 계약 이 어떤 구조로 이루어지는지 이해했다면, 이제는 아주 간단한 예제를 직접 보면서 흐름을 익혀보는 단계로 넘어갈 수 있습니다.
이번 글에서는 Remix IDE 를 사용해 가장 기본적인 기능성 토큰 계약 예제를 만들어보는 흐름을 쉽게 정리해보겠습니다.


이 글은 어디까지나 학습용 실습입니다.
실제 서비스에 바로 사용할 수준의 완성형 토큰이 아니라,
토큰 계약이 어떤 식으로 작성되고 배포되는지 익히기 위한 가장 쉬운 입문 예제라고 생각하면 됩니다.

왜 가장 간단한 예제부터 시작해야 할까?

처음부터 복잡한 수수료 기능, 관리자 기능, 민팅, 소각, 자동 분배 같은 것을 한꺼번에 넣으면 구조를 이해하기가 매우 어려워집니다.
초보자일수록 먼저 이름, 심볼, 총발행량, 잔액 배정 같은 핵심 구조부터 이해하는 것이 중요합니다.

즉, 이번 글의 목표는 아래 네 가지입니다.

  • 기능성 토큰 계약 파을 직접 만들어보기
  • 이름과 심볼을 설정해보기
  • 총발행량을 배포자에게 넣어보기
  • Remix IDE 에서 컴파일과 배포 흐름을 익혀보기

기능성 토큰 계약 준비물은 무엇인가?

이번 실습에서 필요한 것은 많지 않습니다.

  • 인터넷이 되는 브라우저
  • Remix IDE
  • 기본적인 이해를 위한 집중력
  • 테스트용 지갑 주소 확인 정도

별도의 프로그램 설치 없이 웹에서 진행할 수 있다는 점이 Remix의 큰 장점입니다.


이번에 만들 예제는 어떤 구조인가?

이번 글에서는 아주 간단한 형태의 학습용 토큰 계약을 예제로 사용합니다.
복잡한 표준 구현 전체를 넣기보다, 초보자가 구조를 읽을 수 있게 최소한의 형태로 설명합니다.

이 예제에서 확인할 핵심은 다음과 같습니다.

  • 토큰 이름
  • 토큰 심볼
  • 총발행량
  • 배포자에게 초기 수량 배정
  • 잔액 확인

학습용 가장 간단한 토큰 예제

아래 코드는 입문용으로 이해하기 쉬운 아주 간단한 예시입니다.

pragma solidity ^0.8.20;contract SimpleUtilityToken {
string public name = "Simple Utility Token";
string public symbol = "SUT";
uint8 public decimals = 18;
uint256 public totalSupply; mapping(address => uint256) public balanceOf; constructor(uint256 initialSupply) {
totalSupply = initialSupply * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
}
}

이 코드는 아주 단순하지만, 토큰 계약의 기본 감각을 익히기에는 충분합니다.


코드가 뜻하는 내용을 쉽게 풀어보면

위 코드를 처음 보면 영어가 많아서 어렵게 느껴질 수 있습니다.
하지만 한 줄씩 의미를 보면 구조는 생각보다 단순합니다.

name

토큰 이름입니다.

string public name = "Simple Utility Token";

지갑이나 서비스에서 토큰 이름을 표시할 때 사용됩니다.

symbol

토큰 심볼입니다.

string public symbol = "SUT";

쉽게 말해 토큰의 짧은 표시명입니다.
주식의 티커처럼 생각하면 이해하기 쉽습니다.

decimals

소수점 자리 개념입니다.

uint8 public decimals = 18;

많은 ERC-20 토큰이 18을 사용합니다.
초보자 단계에서는 “토큰을 더 세밀하게 나누어 표현하기 위한 단위 설정” 정도로 이해하면 됩니다.

totalSupply

총발행량입니다.

uint256 public totalSupply;

전체 토큰 수량을 저장합니다.

balanceOf

주소별 잔액 저장 구조입니다.

mapping(address => uint256) public balanceOf;

누가 몇 개를 가지고 있는지 기록합니다.

constructor

배포할 때 한 번 실행되는 초기 설정 함수입니다.

constructor(uint256 initialSupply) {
totalSupply = initialSupply * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
}

여기서는 입력한 초기 발행량을 기준으로 총발행량을 정하고,
그 전체 수량을 배포자 지갑에 넣어줍니다.


Remix IDE 에서 직접 만들어보는 순서

이제 실제로 Remix에서 이 예제를 넣는 흐름을 순서대로 보겠습니다.

1단계. Remix IDE 접속

브라우저에서 Remix IDE를 엽니다.

2단계. 새 Solidity 파일 만들기

보통 SimpleUtilityToken.sol 같은 이름으로 새 파일을 만듭니다.

파일 이름은 자유지만, .sol 확장자를 써야 Solidity 파일로 인식됩니다.

3단계. 예제 코드 붙여넣기

위에서 본 학습용 토큰 예제를 파일 안에 넣습니다.

4단계. 컴파일러 버전 확인

코드 맨 위의 pragma solidity ^0.8.20;에 맞게 컴파일러 버전을 설정합니다.

버전이 너무 다르면 컴파일 오류가 날 수 있으니, 이 부분은 꼭 맞춰주는 것이 좋습니다.

5단계. Compile 실행

컴파일 버튼을 눌러 오류가 없는지 확인합니다.

오류가 없다면 이제 배포 준비가 된 것입니다.

6단계. Deploy 탭으로 이동

배포 화면으로 이동하면 constructor에 넣을 값 입력칸이 보일 수 있습니다.

여기에는 예를 들어 1000000처럼 초기 발행량을 넣을 수 있습니다.

7단계. 배포 실행

Remix VM 환경 또는 연결한 지갑 환경에서 배포를 진행합니다.

배포가 완료되면 컨트랙트 주소가 생성됩니다.


배포 후 무엇을 확인하면 좋을까?

배포가 끝났다고 해서 바로 끝이 아닙니다.
이제 아래 항목을 직접 눌러보며 구조를 확인해보는 것이 중요합니다.

name 확인

토큰 이름이 제대로 들어갔는지 확인합니다.

symbol 확인

심볼이 원하는 값으로 보이는지 확인합니다.

totalSupply 확인

총발행량이 예상한 값으로 나오는지 체크합니다.

balanceOf 확인

배포자의 주소를 넣고 잔액을 조회했을 때, 전체 수량이 들어가 있는지 확인합니다.

즉, 이 단계는
**“내가 만든 계약이 정말 내가 의도한 대로 초기화되었는지 검증하는 과정”**입니다.


지갑 주소 확인은 왜 중요할까?

토큰을 배포하면 보통 처음 발행된 토큰이 배포자 지갑으로 들어갑니다.
따라서 어떤 주소가 배포자 주소인지, 그 주소에 잔액이 얼마나 들어갔는지를 확인하는 습관이 중요합니다.

특히 초보자는 아래 부분을 자주 헷갈립니다.

  • 지금 내가 보고 있는 주소가 정말 배포한 주소인지
  • 테스트 환경 주소와 실제 지갑 주소를 혼동하지는 않았는지
  • 배포 후 잔액 조회를 다른 주소로 보고 있지는 않은지

이 부분을 정확히 보는 습관이 있어야 이후 민팅, 전송, 권한 설정 같은 단계에서도 실수를 줄일 수 있습니다.


이 예제가 아직 부족한 이유

이번 예제는 학습용으로는 좋지만, 실제 ERC-20 토큰이라고 부르기에는 많이 단순화되어 있습니다.
왜냐하면 아래 기능들이 빠져 있기 때문입니다.

  • transfer
  • approve
  • allowance
  • transferFrom
  • 이벤트 기록
  • 관리자 권한 구조
  • 민팅/소각 기능
  • 보안 검증

즉, 이번 글의 목적은
완전한 실전 토큰 만들기가 아니라
토큰 계약이 어떻게 생기고 어떻게 배포되는지 감을 잡는 것입니다.


초보자가 자주 하는 실수

이 단계에서 자주 나오는 실수도 같이 알아두면 좋습니다.

컴파일 버전을 맞추지 않는 경우

pragma와 컴파일러 버전이 다르면 오류가 날 수 있습니다.

initialSupply 숫자를 잘못 넣는 경우

너무 큰 숫자나 의도하지 않은 수량을 넣으면 예상과 다른 총발행량이 만들어질 수 있습니다.

배포 환경을 헷갈리는 경우

Remix VM에서 배포한 것인지, 실제 지갑 연결 상태에서 배포한 것인지 구분해야 합니다.

배포 후 주소 확인을 안 하는 경우

배포 주소와 잔액을 확인하지 않으면, 무엇이 제대로 되었는지 판단하기 어렵습니다.

학습용 예제를 실전 코드처럼 생각하는 경우

이번 예제는 구조 학습용입니다.
실제 서비스용 토큰은 더 많은 검토가 필요합니다.


학습용 실습에서 꼭 기억할 점

이번 실습의 핵심은 “외우기”가 아니라 “구조를 느끼기”입니다.

즉, 아래 흐름을 머릿속에 잡는 것이 중요합니다.

  • 파일을 만든다
  • 코드를 넣는다
  • 컴파일한다
  • 배포한다
  • 주소와 발행량을 확인한다

이 흐름만 익혀도 다음 단계인 표준 토큰 구조나 관리자 기능, 민팅/소각 기능을 훨씬 쉽게 받아들일 수 있습니다.


정리

이번 글에서는 Remix IDE 를 이용해 가장 간단한 기능성 토큰 계약을 만들어보는 흐름을 정리했습니다.

핵심만 다시 보면 다음과 같습니다.

  • 토큰 이름과 심볼을 정할 수 있다
  • 총발행량을 설정할 수 있다
  • 배포 시 전체 수량을 배포자 주소에 넣을 수 있다
  • Remix IDE 에서 컴파일과 배포 흐름을 익힐 수 있다
  • 배포 후 name, symbol, totalSupply, balanceOf를 확인해볼 수 있다

처음에는 아주 단순한 예제처럼 보이지만,
이 흐름을 정확히 이해하는 것이 나중에 더 복잡한 기능성 토큰을 다룰 때 큰 도움이 됩니다.

Remix IDE 공식 사이트 바로가기

6편 기능성 토큰 관리자

다음 글 예고

다음 글에서는 기능성 토큰에 관리자 권한을 넣는 방법, 즉 owneronlyOwner 개념을 쉽게 정리해보겠습니다.
토큰은 단순히 발행만 하는 것이 아니라, 누가 어떤 기능을 실행할 수 있는지도 매우 중요하기 때문입니다.