서버 없이 서버가 필요한 서비스 만들기!

heejin(53)
Published in
#kr-dev
Words
433
Reading
2 min
Listen
Play
9y

오늘은 스팀잇 관련 프로젝트 (Steempages, Steem2KRW)들을 만들면서 알게된 노하우를 공유해드리려 합니다.

Steempages나 Steem2KRW의 경우 서버가 필요한 서비스들이지만 서버가 필요 없는 구조로 만들었습니다.
(정확히는 개인 소유의 서버가 필요없는, 즉 서버 사용료를 내지 않는 구조로 만들었습니다.)

두 프로젝트 모두 실시간으로 서버가 필요하지 않고, 특정 주기마다 아주 짧은 시간 동안만 스크립트가 실행되면 된다는 특징을 가졌습니다. 그리고 그 점으로 인해서 서버를 사용하지 않고 서비스를 구동시킬 방법을 찾을 수 있었습니다.

Github Pages

기본적으로 두 프로젝트 모두 Github Pages를 웹사이트의 호스팅 서비스로 사용합니다.
Github Pages의 경우 다음과 같은 특징을 가지고 있습니다.

  • 완전 무료
  • 정적 파일만 호스팅 가능 (Static Site)
  • Github의 Repository (Git)를 그대로 사용 (Repository에 커밋하면 사이트에 적용됨)
  • Jekyll 사용으로 정적 블로그 생성 가능

저는 위 특징 중에서 Github의 Repository 구조를 그대로 사용한다는 점을 활용했습니다.
외부에서 Repository의 파일을 업데이트해주면 마치 서버를 사용하는 것과 같은 효과를 낼 수 있다고 생각했고,
프로젝트마다 약간은 다른 방식을 사용했습니다.

Steempages > Travis CI 이용하기

Steempages의 경우에는 Travis CI를 Repository를 업데이트해주는 용도로 사용했습니다.
Travis CI의 특징은 아래와 같습니다.

  • 오픈 소스의 경우 완전 무료
  • Github 계정만 있으면 바로 사용 가능
  • 하루 한번의 Cron Job 무료로 이용 가능
  • Node.js 스크립트 실행 가능 (다른 언어도 가능합니다)

Travis CI는 원래 프로그램을 빌드할 때 사용하는 서비스입니다. 그리고 그 과정에서 사용자가 작성한 빌드 스크립트를 실행하게 해줍니다.
빌드 스크립트의 경우 저는 Node.js를 사용했지만, Python이나 Ruby, PHP 등 어떤 언어든 상관없이 사용할 수 있을거라 생각됩니다.
저는 이때 빌드 스크립트 대신 Github Pages를 업데이트하는 스크립트를 실행하게 만들었습니다.


Travis CI의 Cron Job

그리고 Travis CI의 Cron Job 기능을 이용해서 하루에 한번 그 스크립트가 무조건 실행되게 만들어서 굳이 다른 서버를 사용하지 않을 수 있었습니다.

Steempages의 코드는 Github에 공개되어 있습니다.

Steem2KRW > Google Apps Script 이용하기

오늘 만든 Steem2KRW의 경우 Travis CI를 사용하려고 했지만, 거래소 정보를 몇 분 주기로 받아와야 하는 Steem2KRW의 특성 때문에 Travis CI를 사용할 수 없었습니다. (Travis CI는 스크립트를 하루에 한 번 실행 가능)
그래서 그냥 서버를 사용하기로 하고, Heroku, PythonAnywhere 등을 후보로 생각해봤는데, 이들 모두 무료 한도 내에서는 어쩌면 스크립트가 실행되지 않거나, 과금될 것으로 예상이 되어서 다른 방법을 또 찾아봤습니다.
그때 Google Apps Script가 생각났습니다.


Google Apps Script

Google Apps Script는 다음과 같은 특징을 가졌습니다.

  • 기본적으로 무료 (제한이 있으나, 여유로움)
  • JavaScript와 아주 유사한 언어 지원
  • 5분 단위의 Cron Job 지원

Steem2KRW를 만들기에는 충분한 조건들이기 때문에 Google Apps Script를 사용했고, 실제로 잘 동작하는 것 같습니다.
Travis CI를 사용하는 것과 비교해서 한가지 아쉬운 점은 작성 언어가 JavaScript와 닮았지만, 진짜 JavaScript는 아니라서 Node.js의 잘 만들어진 라이브러리들을 제대로 활용할 수 없습니다.
하지만 서버 상에서 실행할 수 있는 대부분의 기능들을 API로 제공하기 때문에 왠만한 서비스는 다 만들 수 있을거라 생각됩니다.
Steem2KRW에서는 특히 URL Fetch Service라는 API를 많이 활용했습니다.

Steem2KRW의 코드도 모두 Github에 공개되어 있습니다.


다른 개발자 분들에게도 이 내용이 도움이 되었으면 좋겠네요.
읽어주셔서 감사합니다.