프로그램을 만들어서 STEEM을 이용해보자. (2) 블럭체인에 접근하는 방법에 대해서, @ludorum's note

in #kr-dev7 years ago


안녕하세요 ludorum 입니다.
첫 회차에서.. 무언가 엄청난 글처럼 포장되어버렸지만, 목차를 몇개 나눠 필수 요소들에 대해서 각각 3,4분 이내에 개념을 익히고, 마지막으로 테스트 한번 해보는 간단한 글입니다.

아마, 프로그래밍 지식이 없으신 분들은 예제로 작성해드릴 프로그램들을 간단히 수정하는 정도,
프로그래밍에 지식이 있으신 분들은 처음 접하는 스팀에 대해서 조금 더 빠르게 내용을 파악하고 응용해보실 정도가 될 것 같습니다.

마지막 글에서는 모든 내용을 정리 포함하고, 수정하여 포스팅 될 예정입니다.


  • 블럭체인에 접근하는 방법에 대해서
  • 권한의 종류와 인증하는 방법에 대해서
  • 데이터의 종류와 접근할 수 있는 방법에 대해서
  • 데이터를 생성할 수 있는 방법에 대해서
  • 프로그램 작성해보기

블럭체인에 접근하는 방법에 대해서

첫번째 챕터에서 알아볼 것은 블럭체인에 접근하는 방법입니다.
일반적으로 스팀을 프로그램에서 이용하기 위해서는 블럭체인에 동기화되는 노드에 연결되어야 합니다. 이러한 노드는 어떤 형태로 구성되어 있으며, 어떤 방식으로 접근하여 데이터를 주고 받는지 알아보도록 하겠습니다.

클라이언트와 서버

여기서 설명할 요소는 크게 클라이언트와 서버입니다.

클라이언트는 블럭체인 데이터를 활용하려는 우리의 프로그램입니다.
서버는 블럭체인 데이터를 가지고 있는 스팀체인의 노드들 입니다.

클라이언트는 블럭체인에 접근하기 위해서 먼저 서버인 스팀체인의 노드들에 접근해야합니다.
이러한 노드들은 블럭체인 데이터를 동기화하여 저장하고 있으며, 필요한 형태로 사용하기 위해 다양한 기능을 끄거나 킬 수 있습니다.

그래서 노드의 종류는 여러가지이지만, 우리가 접근할 노드들은 JSON RPC API라는 기능을 제공하는 노드입니다. JSON RPC는 우리에게 익숙한 웹소켓이나, HTTP POST방식의 메시지로 사용하실 수 있습니다.

*HTTP는 일반적인 웹에서 데이터를 주고 받는 방식입니다.
*POST는 HTTP 요청의 여러 포맷 중 한가지입니다.
JSON RPC API는 데이터를 주고 받아 명령을 실행하는 방식이며, 대부분의 스팀을 이용한 프로그램들은 이것을 사용합니다.
*steemit의 API 서버가 웹소켓을 지원하지 않기 때문에 해당 가이드에서는 웹소켓이 아닌 HTTP 방식을 사용합니다.

이제부터 JSON RPC API를 제공하는 노드를 서버라고 말하도록 하겠습니다.
그리고 서버에 접속하여 JSON RPC API를 사용하여 프로그램을 클라이언트라고 말하도록 하겠습니다.

대표적인 클라이언트로 steemit.com, steemkr.com, busy.org 과 같은 웹사이트부터 Vessel과 같은 지갑 프로그램이 있습니다.

이 클라이언트는 서버들에 https://로 시작하는 URL 주소를 통해서 접근할 수 있습니다. (목록참고: steem.center)

ServerSSLWSSJSONRan ByStatus
api.steemit.comYESNOYESSteemit Inc.Operational
steemd.steemitstage.comYESYESYESSteemit Inc.Operational
steemd.steemitdev.comYESYESYESSteemit Inc.Operational
steemd.privex.ioYESYESYES@privexOperational
gtg.steem.house:8090YESYESYES@gtgOperational
rpc.steemliberator.comYESYESYES@netuosoOperational
steemd.minnowsupportproject.orgYESYESYES@followbtcnewsOperational
rpc.buildteam.ioYESYESYES@themarkymarkOperational
steemd.pevo.scienceYESYESYES@pharesimOperational
steemd.steemgigs.orgYESYESYES@steemgigsOperational

기본적으로는 https://api.steemit.com 을 사용할 것이며, 가끔 과부하나 다른 사유 때문에 다른 서버를 사용해야할 수도 있습니다.

자, 세줄로 다시 정리하겠습니다.

  • 클라이언트는 서버에 접속해서 블럭체인을 이용합니다.
  • 대표적인 클라이언트는 steemit.com, steemkr.com, busy.org 과 같은 웹사이트, Vessel같은 지갑프로그램이 있습니다.
  • 대표적인 서버는 https://api.steemit.com가 있으며, steem.center을 참고하여 다른 서버를 선택할 수 있습니다.

주의 사항은, 노드들의 상태와 지원하는 API가 각각 다르다는 점입니다.
미리 테스트해보고 노드가 꺼져있거나, 원하는 API를 지원하지 않는다면 다른 노드를 찾아야할 것입니다.

다음 글에서는 스팀에서 행동을 하기 위해서 준비해야할 권한의 종류들과 인증 방법에 대해서 소개해드리겠습니다.
steemjs를 사용하여 프로젝트를 세팅하는 예제가 중간에 부록으로 포함되어 있으며, 권한과 관련된 예제도 함께 포함 됩니다.



저작물 권리 표시
Copyright© All Rights Reserved by @ludorum.
Unless otherwise authorized, This work is licensed under a Creative Commons BY-NC-SA 4.0 License.

별도의 허가가 없는 경우, 이 저작물은 크리에이티브 커먼즈 BY-NC-SA 4.0 라이선스에 따라 이용할 수 있습니다.

Sort:  

악의적인 클라이언트를 멋모르고 사용하다가 비번 등 계정이 털릴 우려 또는 사용자가 의도하지 않은 동작(임의 보팅)의 우려는 없는지요?

대부분의 믿을만한 클라이언트도 해당 부분에 대해서는 리스크가 있습니다.
(스팀뿐만 아니라, ETH, BTC, 모든 가상화폐가 마찬가지 입니다)

프라이빗키가 노출되지 않는것이 제일 좋은 방법이며,
가능하다면 중요하지 않은 계정키로 전송여부를 직접 확인해보는것이 좋습니다.
(서버로 키를 전송하는지 유무는 어느정도의 디버깅 지식이 있으면 가능하니까요)

키가 아니라 서명된 트랜잭션만 전송한다면 비교적 안전하다고 할 수 있겠습니다.

이런 글 쓰려면 얼마나 많은 지식이 있어야 되는거에요?ㅎ
아무튼 대단하십니다.ㅎ

2탄을 기대하고 있었는데 이제 나왔네요^^ 잘 보았습니다.

좋은 글 감사합니다 :) Steemit 외 타 사유 서버를 통해 스팀을 이용할 때 개인 active key 사용 시 서버 운영측에서 마음 먹으면 탈취될 가능성도 없잖아 있나요?

네 맞습니다. 그래서 전송 여부가 제일 중요합니다.

posting key, active key를 전송하는가?
이 부분에서 전송 된다면, 일단 탈취되었든 아니든 언제든 사용될 수 있는 상태입니다.

하여, 키를 사용해서 트랜잭션 서명에만 사용하거나,
권한 부여에만 사용하는 식으로 위험을 줄일 수 있습니다.

답변 감사합니다! 다음 포스팅들도 기대하고 있겠습니다 :)

여러가지 툴을 만들어보고 있었는데 @ludorum 님 강좌가 큰 도움이 될 것 같습니다. 제 네이버블로그의글을 파싱해서 스팀잇으로 옮기는 프로그램을 만들려고 했는데 웹을 안거치고 다이렉트로 노드에 접근해서 인서트 할 수 있다면 좋을 것 같습니다. 강좌가 기대됩니다.^^

steemit api궁금했는데
강좌 기대됩니다
보팅 & 팔로우하고 갑니다
좋은 글 감사합니다^^

블럭체인은 알면 알수록 신세계네요. ㅎㅎ 팔로우&보팅하고 갑니다. 좋은글 감사합니다.

useful information thanks!
한국인입니다 작은 보팅이라도 드립니다!!

간단하게 설명해주셔서 정말 좋습니다.ㅎㅎ
오늘도 잘 읽고 갑니다.ㅎㅎ

저에게는 한번 읽는 걸로는 정확히 이해가 안됩니다. 대단하십니다.
좋은 글 감사합니다.