Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

Probot: Scheduler 사용하기

이전에 Probot 관련 글을 올렸는데 GitHub과 연동하는 대부분 프로그램이 그렇듯이 GitHub에 커밋이 올라오거나 이슈가 등록되는 등 이벤트가 발생했을 때 이를 받아서 프로그램이 실행되게 된다. 하지만 프로그램을 작성하다 보면 이벤트가 없이 동작해야 하는 경우가 있다.

예를 들어 하루에 한 번씩 오픈된 이슈라 Pull Reqeust를 가져와야 한다거나 리뷰를 기다리고 있는 Pull Reqeust의 목록을 가져와서 슬랙에 알려줘야 한다거나 할 때는 GitHub의 이벤트가 없이도 원하는 때에 프로그램이 동작하도록 해야 한다.

Probot: Scheduler

Probot: Scheduler는 원하는 시간에 함수가 실행되도록 할 수 있는 Probot의 스케쥴러다.

const createScheduler = require('probot-scheduler')

module.exports = robot => {
  const scheduler = createScheduler(robot, {
    interval: 24 * 60 * 60 * 1000 // 1 day
  })

  robot.on('schedule.repository', (context) => {
    // your logic here
  });
}

index.js에서 위처럼 스케쥴러를 사용할 수 있다. 스케쥴러의 간격은 createScheduler에서 옵션으로 지정할 수 있고(위에서는 1시간마다 실행된다.) 이때 schedule.repository 이벤트가 발생하므로 콜벡에서 context를 인자로 받아서 다른 이벤트처럼 사용할 수 있다.

createScheduler 옵션에는 다음 두 설정을 넣을 수 있다.

  • delay: DISABLE_DELAY를 설정하지 않으면 기본값은 true이다. false이면 앱 시작시 바로 실행되고 true이면 0부터 interval 간격 사이의 랜덤 값으로 지연시켜서 모든 앱의 스케쥴러가 동시에 실행되지 않도록 한다.
  • interval: 밀리초 단위의 스케쥴 시간이고 기본값은 1시간이다.
2018/09/23 17:40 2018/09/23 17:40

기술 뉴스 #110 : 18-09-16

웹개발 관련

  • Removing jQuery from GitHub.com frontend : GitHub이 최근에 웹사이트에서 jQuery를 완전히 제거했는데 그 과정을 설명한 글이다. jQuery가 과거에는 큰 도움이 되었지만, jQuery의 많은 기능이 이젠 표준으로 들어왔고 jQuery의 체이닝 방식이 Flow로 타입 검사하는 현재 상황에 맞지 않아서 제거하기 시작했다. jQuery 제거는 점진적으로 진행되었고 각 기능을 어떤 식으로 대체했는지 잘 나와 있다. 개인적으로는 React나 Vue 같은 프레임워크를 선택하지 않고 아무 프레임워크를 사용하지 않은 Vanilla JavaScript를 선택한 점이 흥미롭다.(영어)
  • Google AMP Can Go To Hell : AMP를 비판하는 글이다. 최근 구글이 AMP 페이지와 canonical 페이지에 다른 기능이 있으면 AMP 페이지도 같은 기능을 제공해야 한다고 경고하기 시작했는데 AMP에서 이렇게 만들기는 상당히 어려우므로 가장 쉽게 하는 방법을 페이지 자체를 분리하지 않고 완전히 AMP로만 만들도록 하려는 의도라고 설명하고 있다. 사람들이 이렇게 하도록 구글이 압력을 줘서 웹사이트 자체를 구글이 모두 제어하려고 하니 그대로 따르지 말고 거부해야 한다고 하는데 나도 여기에 적극적으로 동감한다. This is the World Wide Web – not the Google Wide Web.(영어)
  • AMP에 관한 생각 : AMP를 지지하는 글로 AMP가 해결하려고 하는 속도 문제와 괜찮게 만들어진 AMP 사이트의 예시, AMP로 할 수 있는 부분까지 설명하는 글이다.(한국어)
  • You don't (may not) need Moment.js : 오랜만에 보는 You don't (may not) need 시리즈이다. JavaScript에서 오랫동안 킬러 라이브러리로 여겨졌던 Moment.js와 훨씬 가벼운 date-fns, dayjs를 비교하고 있다.(영어)
  • Vue.js (and Vuex) bug squasher cheatsheet : Vue.js를 잘못 사용해서 버그를 일으킬 수 있는 실수를 정리해 놓은 글이다.(영어)
  • Introducing the React Profiler : React 16.5에서 새로운 DevTools Profiler 플러그인 지원이 추가되었다.(영어)

그 밖의 프로그래밍 관련

  • 한글라이즈 재재작기 : Golang 밋업에서 이흥섭 님이 Python으로 작성했던 한글라이즈를 Go로 다시 작성한 과정을 설명한 글인다. 한글라이즈는 외래어를 국립국어원에서 정한 관례에 따라 한국어로 자동으로 표기할 수 있도록 지원하는 도구인데 이러한 표기가 어떻게 진행되는지를 설명하고 한글라이즈를 개발하면서 정규표현식 처리와 언어별 처리에 대해서 고민했던 내용, Golang을 프로젝트에 사용하면서 배운 경험까지 잘 나와 있다. 자막이 있어서 발표자료 페이지가 많지만, 너무 재미있게 읽었다.(한국어)

블록체인 관련

  • Ethereum 2.0 : Ethereum 2.0에서 집중하고 있는 부분을 설명한 글이다. 확장성 문제를 해결하려고 새로운 디자인을 하게 되었고 PoW 대신 PoS로 바꾸기로 하면서 Beacon Chain이 어떻게 기존과 다르고 어떤 장점이 있는지 설명하고 있다. 이와 관련해서 서명 수집과 샤딩으로 Beacon Chain에서 현재 성능이 얼마나 높아졌는지 그리고 EVM 대신 사용할 eWASM에서 더 많은 스마트 컨트랙트를 넣고 더 많은 언어도 지원하려고 하고 있다고 설명하고 있다.(영어)
  • Ethereum 2.0 — Who’s building it? : 위의 글과는 달리 위에서 설명한 각 핵심 프로젝트를 Ethereum 커뮤니티에서 어떻게 개발하고 있는지를 설명하고 있다. 각 세부 내용보다는 각 프로젝트에 대한 다양한 접근과 관련한 리서치 내용 및 논의를 어디서 하고 있는지를 정리한 글이다. 세부 내용을 살펴보기 전에 어디서 정보를 얻을지 파악하기 좋은 글이다.(영어)

볼만한 링크

  • 개발자에서 개발팀장이 되기까지 겪은 다섯가지 큰 실수 : 개발자에서 팀장이 되었다가 실패 후 2년 뒤 다시 기술 부문장이 된 경험을 바탕으로 팀장으로서 자신이 겪은 실수를 정리한 글이다. 자신이 리더인 이유가 기술적인 면이 뛰어나서라고 생각한다면, 자기 자신을 생산자로 여기는 것을 피할 수 없을 겁니다.라는 부분은 꽤 인상적이고 팀장 같은 경험은 별로 없지만, 개발자 팀장을 옆에서 많이 보면서 이 글의 내용도 공감되었다. 보통 개발자가 팀장급을 하는 걸 별로 안 좋아하고 개발하고 싶어하기 때문에(이런 사람을 개발자로서 더 신뢰하기도 하고...) 팀장과 개발자의 관점으로써 할 수 있는 실수가 걱정된다면 도움이 될 글이다.(한국어)
  • 좋은 판단의 형성 : Bill Gurley가 "올바른 판단은 경험에서 나오고, 경험은 틀린 판단에서 나온다"라고 한 말을 바탕으로 좋은 판단을 하기 위해서 실수를 많이 하고 경험을 얻어야 한다는 설명을 하는 글이다. VC의 투자 관점에서 얘기하는 글이지만 사실 어디나 적용할 수 있는 내용인 것 같다.(한국어)
  • 에어비앤비 엔지니어가 일하는 게 행복한 이유 : 에어비앤비에서 일하시는 유호현 님이 실리콘밸리의 문화를 설명하는 영상이다. 의사결정을 높은 사람이 하는 rank-driven 조직과 각 위치의 전문가가 의사결정을 하는 role-driven의 차이를 설명하면서 실리콘밸리의 기반이 role-driven 조직으로 어떻게 일을 하고 혁신을 만들어 낼 수 있는지 얘기하고 있다. 내가 추구하는 부분이기도 해서 상당히 공감하는 내용이다.(한국어)
  • Designing notifications for apps : 모바일 앱에서 알림 관리를 어떻게 할지를 디자인 관점에서 설명한 글이다. 알림 모델을 소스, 정보, 앵커, 사용자로 구분하고 한곳에 모으는 알림 센터, 소스별로 구분해서 보여주는 알림, 두 가지 모델을 섞어서 사용하는 방법으로 정리하고 각 방법의 특징과 어떤 때 사용하는지 좋은지가 나와 있다.(영어)
  • Unboxing Chrome : 크롬 10주년을 맞이하여 새롭게 디자인하면서 크롬의 옴니박스를 중심으로 개선한 과정을 설명하는 글이다. 10년 된 프로젝트라 작은 옴니박스에도 아주 다양한 텍스트가 사용되고 있었고 이를 정리하고 크롬 로고와 매칭하면서 수많은 디자인 결과물을 비교해서 현재 결과가 나왔다. 크롬을 사용하면서 디자인상 아주 큰 변경은 많지 않아서 체감은 잘못하고 있었는데 작은 옴니박스에 이렇게 많은 디자인 고민이 들어있다는 점이 재미있는 글이다.(영어)
  • SD Changer 제작기 : 아이폰에서 한글은 Apple SD Gothic Neo 폰트로, 그 외 영문과 숫자, 특수 문자는 SF Pro Display 폰트로 나온다.는 문제를 해결하기 위해(이 글을 보기 전에는 그렇게 나왔는지도 몰랐지만...) 스케치 플러그인을 만들어서 한 텍스트 레이어에서 2개의 폰트가 적용되도록 만들 과정을 설명한 글이다.(한국어)

프로젝트

  • Tink : Google에서 만든 암호화 라이브러리로 현재 Java, Android, Objective-C를 지원하고 Go와 JavaScript를 개발 중이다.
  • CIDR.xyz : CIDR을 이해하기 쉽게 시각화해주는 사이트.
  • Web Design Museum : 1995부터 2005년 사이의 웹사이트 디자인을 모아놓은 사이트.

버전 업데이트

2018/09/16 17:39 2018/09/16 17:39