본문 바로가기
매일코딩/블록체인-자바스크립트

자바스크립트로 블록체인 구현 강좌 9 - 나만의 비트코인 발행하기

by 인생여희 2018. 5. 30.
반응형

자바스크립트로 블록체인 구현 강좌 9 - 나만의 비트코인 발행하기


이번시간에는 api.js에 app.get() , app.post() 부분을 작성해주고, 개발에 조금 더 도움을 줄 node api를 설치 해보도록 하겠다. node js 에서 get, post이 부분이 이해가 안간다면...구글링을 부탁드린다..여기서는 조금이라도 알고 있다고 가정하고 쭉쭉 설명하겠다.


먼저 api.js 소스 코드다

var express = require('express')
var app = express()

// 웹브라우저에 get 방식으로 /blockchain 주소를 입력했을 때 실행
app.get('/blockchain', function (req, res) {
res.send('blockchain Start')
})

// 웹브라우저에 post 방식으로 /transaction 주소를 입력했을 때 실행
app.post('/transaction', function (req, res) {
res.send('transaction Start')
})


// 웹브라우저에 get 방식으로 /mine 주소를 입력했을 때 실행
app.get('/mine', function (req, res) {
res.send('mine Start')
})



app.listen(3000,function(){
console.log('listening on port 3000')
})

위에 소스코드 설명은 express js 기초지식에 해당되므로 여기서는 패스하고 간단하게 주석을 달아놓았다. 

서버 가동

브라우저 확인

nodemoe api 설치

nodemon  은 소스 수정시 자동으로 서버를 재실행시켜주는 api이다. 설치 안해도 무방하나 설치 해놓으면 엄청편하기 때문에 설치한다.

https://www.npmjs.com/package/nodemon

순서

터미널 열고 -> 개발폴더위치 -> npm i nodemon --save 입력 -> package.json 이동 -> script 부분에 아래 문자 추가  "start" : "nodemon --watch dev -e js dev/api.js" 

혹시나해서 나의 package.json 파일 전체를 올린다.

{
"name": "blockchain",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start" : "nodemon --watch dev -e js dev/api.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.16.3",
"nodemon": "^1.17.5",
"sha256": "^0.2.0"
}
}


그리고 다시 터미널 창으로 가서 개발 폴더에 위치하고 서버를 실행한다. 이번에는 npm start 명령으로 실행해보자.

확인 - 아래처럼 출력되면 성공이다.(안되도 크게 상관은 없다. 서버를 수동으로 재시작 해주면되니깐.)


body-parser api 설치

위에서 nodemon을 설치했던것 처럼 터미널 열기 -> 개발 폴더 위치 -> npm i body-parser --save 입력-> 엔터

이 모듈은 express js에서 post방식으로 파라미터를 넘길 수 있게 하는 모듈이다. 쉽게 말하면 웹주소를 이용해서 데이터를 넘기는 것을 도와주는 녀석이라고 생각하면 된다. 암튼 자세한건 구현하면 아~ 하고 이해가 될 것이다. 그리고 api.js 맨위쪽에 var app= express() 이 부분 아래 body paser를 사용하겠다는 코드를 작성해준다.

var express = require('express')
var app = express()
//bodyParser 임포트
var bodyParser = require('body-parser')

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}))



api.js 에서 post transaction 코드 작성

// 웹브라우저에 post 방식으로 /transaction 주소를 입력했을 때 실행
app.post('/transaction', function (req, res) {
console.log(req.body);
res.send(`거래 총액은 ${req.body.amount} 코인`);
})


postman에서 확인 해보기 (https://www.getpostman.com)

포스트맨은 웹상에서 데이터를 웹브라우저 주소로 넘길때 간단하게 테스트 해볼 수 있는 서비스다. 위의 홈페이지로 들어가서 각각 운영체제에 맞는 버젼을 다운로드 하자.


확인

포스트맨에 들어가서 맨위 붉은 줄 처럼 주소를 적고 body를 선택하고 raw , JSON 선택후 아래 문자를 작성한 뒤 Send 를 눌러보자. 그러면 거래 총액은 200 코인 으로 아래 소스 코드로 데이터가 넘어와서 출력된것을 알 수 가 있다.

// 웹브라우저에 post 방식으로 /transaction 주소를 입력했을 때 실행
app.post('/transaction', function (req, res) {
console.log(req.body);
res.send(`거래 총액은 ${req.body.amount} 코인`);
})


app.get /blockchain 작성 

웹브라우저에서 get 방식으로 /blockchain 주소가 들어왔을 경우. bodypaser 모듈을 임포트 하는 코드 아래에 밑의 코드 작성. 

//앞에서 만든 blockchain 모듈 임포트 -> 코인객체 생성
var Blockchain = require('./blockchain');
var bitcoin = new Blockchain();


app.get('blockchain') 부분 코드 작성

// 웹브라우저에 get 방식으로 /blockchain 주소를 입력했을 때 실행
app.get('/blockchain', function (req, res) {
res.send(bitcoin)
})


웹브라우저에서 테스트 - 제네시스 블락 정보가 json 형식으로 뜬다.

/transaction 부분을 담당하는 함수안 내용 수정 - 거래가 발생했을때 새로운 트랜잭션을 생성하기 때문에 발생하는 정보를 console.log 로 찍어주도록 하자.

// 웹브라우저에 post 방식으로 /transaction 주소를 입력했을 때 실행
app.post('/transaction', function (req, res) {

const blockIndex = bitcoin.createNewTransaction(req.body.amount,req.body.sender,req.body.recipient)
res.json({note : `트랜젝션은 ${blockIndex} 블락안으로 들어갈 예정입니다.`})

})



postman으로 확인 - 총 4번의 send를 누름 (4번의 거래 발생)



/blockchain 확인 -  위에서 발생한 트랜잭션 데이터가 pendingTransaction [] 에 들어가 있다. 저건 언제 index 1 블락으로 들어갈까? 이전전전 포스트에서 다뤘다. 새로운 블락이 생성될때. 그건언제인가? 컴퓨팅 파워를 통한 채굴. 마이닝!  그 작업을 통해서 맞는 hash 값을 찾았을 때 새로운 블락이 생성되면서 이전 거래 내역이 새로운 블락안으로 들어간다.  이번 포스팅은 여기서 마무리 하도록 하겠다.



반응형

댓글