1. 개요
오늘은 NestJS 백엔드 프레임워크를 활용하여 Ethereum 스마트 컨트랙트와 직접 상호작용할 수 있는 API 서버를 만드는 과정을 정리합니다. 프론트엔드나 Postman 등에서 API를 호출하면, 실제로 블록체인에 데이터를 읽고 쓰는 요청이 처리됩니다.
2. 스마트 컨트랙트 배포
간단한 상태 변경 기능이 있는 스마트 컨트랙트를 Solidity로 작성하고 배포 해 줍니다.
uint public state;
function setState(uint _state) public { state = _state; }
function currentState() public view returns (uint) { return state; }
3. ethers.service.ts

이 파일은 Ethers.js를 사용해서 스마트 컨트랙트와 직접 상호작용하는 로직이 들어있는 핵심 클래스입니다. 즉, 실제로 블록체인에 값을 보내고(state 저장), 값을 읽는(current state 조회) 코드를 이 파일에서 수행합니다.
- this.contract는 스마트 컨트랙트를 JS 객체처럼 다루게 해줌
- currentState() → 읽기(view), setState() → 쓰기(transaction)
4. datatype.service.ts

- 파라미터 state가 undefined면 조회 (GET 요청)
- 값이 들어있으면 setState 호출 (PATCH 요청)
5. datatype.controller.ts

- 컨트롤러는 REST API의 라우터 역할을 합니다. GET, PATCH 등 요청에 따라 적절한 서비스를 호출합니다.
- GET /datatype/state → 현재 상태 조회
- PATCH /datatype/state → 상태를 블록체인에 저장
6. Postman으로 테스트
(1) 상태 조회 (GET)
- Method: GET
- URL: http://localhost:3000/datatype/state
(2) 상태 변경 (PATCH)
- Method: PATCH
- URL: http://localhost:3000/datatype/state
- Body: { "state": 2 }
(3) 응답 (트랜잭션 영수증):
{ "blockHash": "...", "transactionHash": "...", "status": 1 }
7. 과정 정리
[PATCH 요청]
↓
Controller (라우팅)
↓
Service (비즈니스 로직)
↓
EthersService (컨트랙트 연결)
↓
Blockchain (트랜잭션 실행)
↓
Service → Controller → 응답
'공부 내용 정리' 카테고리의 다른 글
| API 요청 처리 방식 (0) | 2025.07.31 |
|---|---|
| DTO와 Exception 이란? (1) | 2025.07.30 |
| Nest.js란? (0) | 2025.07.28 |
| Next.js 란? (1) | 2025.07.28 |
| Cookie, Session, JWT로 만드는 웹 인증 (0) | 2025.07.25 |