[node.js 스팀봇 강좌] #11. 항상 실행되는 프로그램 만들기

in #kr7 years ago (edited)

지난 연재

[node.js 스팀봇 강좌] #1. steem.js 라이브러리 이용하기
[node.js 스팀봇 강좌] #2. steem.js를 이용해서 보팅해보기
[node.js 스팀봇 강좌] #3. steem.js를 이용해서 포스팅 올리기
[node.js 스팀봇 강좌] #4. 인증키 등의 정보를 외부 파일에 저장하기
[node.js 스팀봇 강좌] #5. steem.js를 이용하여 댓글 달기
[node.js 스팀봇 강좌] #6. steem.js를 이용하여 송금하기
[node.js 스팀봇 강좌] #7. steem.js를 이용하여 포스팅 조회하기
[node.js 스팀봇 강좌] #8. 포스팅 조회 결과에서 필요한 정보 추출하기
[node.js 스팀봇 강좌] #9. steem.js를 이용하여 팔로우 맺기
[node.js 스팀봇 강좌] #10. steem.js를 이용하여 스팀잇 모니터링하기


지금까지 강좌에서 보여드린 프로그램들은 프로그램 소스코드의 위부터 아래까지 한 차례 실행이 되고 나면 그 기능을 마쳤습니다. 보통 이와 같은 프로그램을 순차 프로그램이라고 합니다.

물론 steem.js 라이브러리의 api 함수를 하나라도 실행하게 되면 스팀잇서버와 접속을 유지하고 있기 때문에 완전히 프로그램의 실행을 마치려면 ctrl+c나 프로그램 편집기의 '멈춤' 버튼을 눌려야 하기는 했습니다.

하지만, 우리가 종국적으로 만들려고 하는 봇(Bot)은 항상 실행되면서 정해진 기능을 수행해야 합니다.

이렇게 계속 켜져 있는 프로그램들을 램 상주 프로그램이라고도 부르고 OS에 따라서 데몬 프로그램이나 서비스 프로그램이라고도 부릅니다.

항상 실행되는 프로그램을 개발하기에 가장 편한 방법은 윈도우창과 같은 UI가 포함된 프로그램을 개발하는 것입니다.

일반적으로 사용하는 프로그램 개발툴(MS Visual Studio, Mac Xcode,...)에서는 마우스 버튼 몇 번 클릭으로만도 램상주 프로그램의 기본형(닫기 버튼 하나 있는 윈도우 프로그램 등)을 만들어 주기 때문에, 필요한 기능을 추가만 하면 손쉽게 봇을 만들 수가 있기 때문입니다.

하지만 스팀잇 봇을 만드는 경우에는 steem.js를 이용해야 하는데, UI를 기반으로 한 프로그램을 만들 수 있는 node.js 용 개발툴이 있기는 하지만 진입장벽이 높은 것 같습니다.

그래서 이번 강좌에서는 가장 간단한 방법으로 램 상주 프로그램을 만드는 방법을 소개하려고 합니다.

서론이 길었지만 실제로 개발하는 과정은 단순합니다. 프로그램이 실행을 시작하여 종료하지 않고 어떤 기능을 수행한다는 것은 다시 말하면 주기적으로 계속 그 기능을 호출하고 있다는 뜻이 됩니다.

while(true){
    ... 기능 ...
}

즉 프로그램의 기본적인 형태가 위와 같이 어떤 기능을 계속 반복해서 실행해주면 되는데, javascript는 좀더 편리하게 이와 같은 목적을 달성할 수 있도록 다음과 같은 함수를 제공하고 있습니다.

  • setInterval(함수, 시간): 어떤 함수를 정해진 시간마다 반복해서 실행

  • setTimeout(함수, 시간): 어떤 함수를 정해진 시간 뒤에 실행

만약 1분마다 주기적으로 게시물을 조회하여 보팅을 하는 봇을 만든다고 할 경우에 다음과 같은 형태로 개발하면 됩니다.

function voting()
{  
       steem.js를 이용하여 포스팅 찾기{
                 steem.js를 이용하여 보팅하기{
                           console.log("완료")
                 }
        }
}
setInterval(voting, 60 * 1000)

목적하는 기능을 직관적으로 코딩을 하면 위와 같습니다. 참고로 시간은 밀리초 기준이기 때문에 초 단위로 계산하려면 1000을 곱하면 되며, 프로그래밍 특성상 함수 선언이 그 함수를 호출하는 setInterval의 앞에 있든 뒤에 있든 상관이 없습니다.

만약 setTimeout을 이용하여 개발을 할 경우는 다음과 같이 됩니다. 한차례의 기능이 실행된 후에 다음번 실행을 예약하는 방식입니다.

function voting()
{  
       steem.js를 이용하여 포스팅 찾기{
                 steem.js를 이용하여 보팅하기{
                           console.log("완료")
                           setTimeouot(voting, 60*1000)
                 }
        }
}

실행 주기가 실행 시간보다 훨씬 큰 경우에는 두 가지 방법의 차이가 거의 없습니다. 하지만 프로그램의 실행시간과 샐행주기가 비슷하거나 오차가 생길 수 있는 경우에는 뒤의 방법이 더 좋습니다.

예를 들어 포스팅을 찾아서 보팅을 하는데 약 5초가 걸리지만 경우에 따라서 네트워크나 서버의 지연으로 10초까지 늘어난다고 할 경우, 타이트하게 운영하기 위해서는 setInterval을 이용해서 10초 주기로 실행을 하는 것보다는 실행완료 시점에서 setTimeout을 이용해서 최소한의 대기시간만 보낸 후 다시 기능을 수행 후 바로 다시 수행을 하는 편이 더 효율적일 수 잇지요.

이상으로 봇과 같이 항상 실행하고 있는 프로그램을 개발하기 위한 기본적인 개념과 이에 활용할 수 있는 javascript의 함수 두 가지를 살펴보았습니다.

다음 연재에서는 실제로 동작하는 봇을 한번 만들어 보도록 하겠습니다.

ps.

지금까지 11회에 걸쳐 node.js를 이용한 스팀봇 강좌를 진행하고 있습니다. 프로그래밍 스킬이 전혀 없는 사람들도 따라 해 볼수 있도록 가능한 쉽게 연재를 하고 있으니 관심있으신 분은 맘편히 따라 해 보시면 좋겠습니다. 그리고, 아낌없는 격려도 부탁드립니다 ^^

Sort:  

잘보고 갑니다

감사합니다~

안녕하세요 minari님 정말 모르시는거 빼고 다 아시는 분 같습니다 ㅎㅎ
사실 제가 프로그램쪽은 어두운부분이라 이해가 안되지만 대단하십니다~~

김성민님은 봇을 능가하는 에너지를 가지셨어요 ^^

아 ㅎㅎ 쑥스럽네요 ㅋㅋㅋㅋㅋ minari님의 열정도 다른분들 못지 않으신 듯 합니다^^

우와!! 대박입니다!!

언젠가는 따라해보겠습니다!!

이런 강좌가 있다는 사실만으로도 든든합니다! 고마워요~

재미있으니 꼭 한 번 해보시길 바랍니다 ^^

감사합니다.
조만간 시간내서 처음 강좌부터 실행해봐야겠습니다^^

와 이런봇에 대해서 정말 궁금증이 많았는데 이런 강의를 올려주셨네요
시간을 가지고 천천히 시도를 해봐야겠습니다

좋은 정보 감사합니다. 스파는 없지만 업봇 & 팔로 하고 갑니다.

잘보고갑니다.