[node.js 초급코딩3-1] @명령어 처리(@야구 이벤트 코드)

in #kr-dev6 years ago

node.js 초급코딩 3번째 포스팅이 좀 오래걸렸습니다.
제가 진행하는 초급코딩은 구현가능하되 구현해보고 싶은 스팀잇 기능들에 대해서 실제도 도전해보고 해당 코드를 설명드리고 있습니다.
이번에는 최근에 제가 400팔로우 이벤트를 진행하면서 @야구 OOO 이라는 명령어를 사용했었는데요.
@명령어 들은 어떻게 처리되고 있을까를 고민해보다가 만들어봤습니다.
가볍게 생각했는데, 많이 힘들었고, 제가 접근한 방식이 옳은 방식은 아니나, 처음 접근하시는 시각으로 작성하니 여러가지 방향에 대해 참고하시면 될 듯합니다.

본론으로 들어가서 사실 여러가지로 @명령어 처리를 시도해봤는데요. node.js 의 steem API 들이 비동기로 동작하는 구조라서 엄청 고생했네요.
그래서 최종 완성한 구조입니다.
BaseballEvent_Architech.png

이전에 제가 경험했던 프로그래밍은 모든 동작이 순차적으로 진행되서 프로그램을 작성한 순서대로 동작을 했는데, 비동기는 순서대로 진행되지 않다보니 많이 헷갈리네요
동기/비동기에 관한 설명은 다른 포스팅에도 많이 있는 것 같아서 생략하도록 하겠습니다.
간단하게 생각하면 동기는 한 사람이 일처리를 하는 것인데, 비동기는 여러 명이 일을 나눠서 처리하는 거라고 생각하시면 됩니다.
(나중에 설명이 필요하다싶으면 별도로 설명드리겠습니다.)

원래 생각했던 시나리오는

  1. 정답 숫자를 정한다.(랜덤 혹은 특정 규칙에 의해 생성)
  2. 특정 포스팅의 댓글을 가져온다.
  3. 댓글에서 @야구 라는 명령어가 있는지 찾는다.
  4. @야구 뒤에 붙은 3자리 숫자와 정답 숫자를 비교한다.
  5. 비교한 결과를 댓글로 달아준다.

이런 시나리오로 하나의 JS 스크립트를 만들었더니, 비동기때문에 온갖 동작이 꼬이더군요;;
그래서 JS 스크립트당 Steem API 를 왠만하면 하나 혹은 두개만 사용해서 동작이 꼬이지 않도록 분리하고,
외부에 JS 스크립트를 따로 동작시키는 운영 스크립트를 만들어야겠다는 생각을 했습니다.
그렇게해서 나온 스크립트가 위 그림에서 '운영 서버 - BaseballEvent_Server.js' 입니다.
나머지 작업을 위한 스크립트가 '댓글 결과 취합 - BaseballEvent_ResultList.js.' 와 '댓글 달기 - BaseballEvent_Reply_FromResults.js' 입니다.
각각 댓글을 읽어오는 steem API(steem.api.getContentReplies), 댓글 작성하는 steem API(steem.broadcast.comment) 를 사용하는 스크립트로 구분했습니다.

운영 서버 스크립트의 동작은 위 그림을 보시는게 가장 이해가 빠르실텐데요.

  1. 먼저 '정답 숫자'를 결정하고, 댓글로부터 '@야구'를 걸러내서 정답 숫자와 비교하는 BaseballEvent_ResultList.js 를 실행합니다.
  2. BaseballEvent_ResultList.js 가 댓글을 달아야하는 정보들을 파일로 저장하게되는데, 다음 동작을 넘어가기 전에 해당 파일들이 저장되었는지 확인합니다.(비동기 때문)
  3. 파일이 쌓이면, 해당 파일을 댓글로 써주는 BaseballEvent_Reply_FromResults.js 를 실행합니다.
  4. BaseballEvent_Reply_FromResults.js 는 파일 하나만 쓰고, 댓글을 단 정보파일은 삭제하도록 동작합니다.
  5. 그래서 운영서버는 정보 파일이 모두 없어질때까지 BaseballEvent_Reply_FromResults.js 를 실행하게 됩니다.

이 시나리오에서도 많은 예외 처리가 필요한데요.
아직 그런 부분에 대해서는 실력 미달이라 좋은 방법을 터득하게되면 공유하도록 하겠습니다.

이제 각 동작을 담당하는 JS 코드들을 공개해야되는데요.
내용이 너무 길어지는거 같기도 하고, 아직 정리가 안된 관계로 초급코드 3-2 에서 다시 찾아뵙겠습니다.

이전 초급코딩

[node.js 초급코드] 내 포스팅 댓글에 달린 주사위 값 조회
[node.js 초급코드2] 내 포스팅 링크 정리 Script

Sort:  

이벤트 보팅하고 갑니다
화이팅~!

와우 전문적인 포스팅입니다. 저도 3d 툴 때문에 파이썬공부해야하는데 앞이캄캄하네요ㅠㅠ

파이썬도 주변에서 많이 하는거 같던데 전 안해봐서 잘 모르겠지만 화이팅입니다~:)

이벤트 참여 감사합니다ㅎㅎ
보팅 꾹누르고 가용~^^

Goog post. I upvote you.

음... 너무 어렵군요 ㅠㅠ

나름 쉽게 전달하고 싶었는데 아무래도 개발은 안하신 분들께는 어렵게 느껴질듯요 ><

초급이라지만 많이 고급정보네요~~

저도 그 정도가 애매하긴한데 개발은 하신 분들의 기준으로 초보이긴합니다 ><

이벤트 당첨두번째 방문입니다.
모닝 풀보팅 100퍼 드립니다. ㅎㅎ

감사합니다~ 좋은주말되세요~:)

@mathetes 아주 사랑스런 포스팅 감사합니다.

사랑스럽다는 표현이 더 사랑스러우시네요 ㅎㅎ

뿌린대로 거둔다 이벤트로 찾아왔습니다!
https://steemit.com/kr-event/@honoo/79b2je-2
이 글은 어제 봤는데 어려워서 그냥 지나쳤는데 또 보게 되었군요! 인연인가?

ㅎㅎ 인연일수 있죠 ㅎㅎ
저도 처음해보면서 느낀대로 설명하다보니깐 생동감은 있어보이긴해도 잘 설명을 못하고 있는듯합니다.
나중에 더 많이 알게되면 재정리하는 포스팅을 다시해볼까도 생각중입니다 :)

글올리는 즉시 찾아오겠습니다!

자동 댓글달아주는 코드는 저도 하나 만들어 볼까 싶은데 ....
참고할 만한 자료 잘보고 갑니다

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 60320.14
ETH 3373.37
USDT 1.00
SBD 2.51