Refactoring English: Month 3

Michael Lynch

Refactoring English: 3개월 차

한 줄 요약

킥스타터에서 처음으로 펀딩을 진행한 경험

하이라이트

  • 첫 킥스타터 프로젝트를 시작했는데, 킥스타터가 생각보다 놀라울 정도로 수월했습니다.
  • 킥스타터 목표 달성을 향해 어느 정도 순항 중이지만, 남은 3분의 2를 채우려면 좀 더 창의적인 방법을 찾아야 합니다.
  • 4코어 ARM CPU / 24GB 클라우드 서버에서 돌릴 재미있는 서비스 아이디어를 구하고 있습니다.

목표 달성 평가

매달 초에 달성하고 싶은 목표를 정합니다. 이번 달 목표 달성 결과는 다음과 같습니다.

Refactoring English 블로그 챕터 완성하기

블로그 챕터를 쓰던 도중에 커밋 메시지에 대해 쓰면 좋겠다는 생각이 들었습니다. Hacker News나 /r/programming, Lobsters 같은 개발자 커뮤니티에 공유하기 좋은 챕터가 될 것 같았습니다.

안타깝게도 해당 글은 Hacker News에서 크게 주목받지 못했고 /r/programming이나 Lobsters에서도 별다른 반응을 얻지 못했습니다. 실망스러웠지만 어느 정도 예상했던 결과이기도 합니다.

Refactoring English 사전 예약 판매 시작하기

  • 결과: 킥스타터에서 사전 예약 판매를 시작했습니다
  • 평가: A

킥스타터: 기대 이상으로 만족스러웠습니다

Refactoring English 사전 예약 판매를 킥스타터에서 진행하기로 했습니다. 킥스타터를 이용해 본 적이 없어서 꽤 고된 경험이 될 거라고 각오하고 있었습니다.

지금까지 경험한 ‘크리에이터 플랫폼’들은 대부분 프로젝트를 돕기보다는 추가 결제를 유도하며 수익을 내려는 경우가 많았습니다.

기분 좋게도 첫 킥스타터 프로젝트를 시작하는 과정은 생각보다 훨씬 수월했습니다. 비용을 지불하라는 요구를 전혀 받지 않았습니다. 킥스타터는 창작자에게 추가 결제를 유도하는 대신 프로젝트가 펀딩에 성공하도록 도와 수익을 만드는 구조로 인센티브가 잘 설계되어 있었습니다.

서류 작성부터 은행 정보 인증, 공개용 텍스트와 영상, 이미지 제작까지 킥스타터 관련 작업에는 총 6~8시간 정도 걸렸습니다.

이 프로젝트에는 킥스타터 모델이 잘 맞았습니다. 일반 사전 예약으로 진행했다면 3개월이 지나고도 고객이 충분히 모이지 않았을 때 난처한 상황에 빠졌을 것입니다. 3개월간 작업은 했는데 결국 모두에게 환불해야 하는 상황이 생길 수 있습니다. 킥스타터는 후원자들에게 처음부터 ‘과정에 함께 투자하는 것’임을 명확히 알려주는 점이 마음에 듭니다. 창작자는 최선을 다해 결과물을 제공해야 하지만, 일이 뜻대로 풀리지 않을 수 있다는 가능성도 후원자가 받아들입니다.

목표 금액을 정해 올오어낫싱(all or nothing) 방식으로 진행할 수 있는 점도 좋습니다. 목표를 5,000달러로 정한 이유는 야심 차지만 달성 가능해 보였고, 책을 출간한 뒤에도 1만~2만 달러의 추가 수익을 기대할 수 있을 만큼 충분히 높은 금액이라고 생각했기 때문입니다. 목표에 도달하지 못해 아무것도 받지 못하더라도 실망스럽겠지만, 적어도 이 아이디어에 대해 분명한 ‘아니오’라는 답을 얻었다는 데 위안을 삼을 수 있습니다.

다만 킥스타터 스팸은 예외입니다…

킥스타터의 유일한 단점은 스팸입니다. 수많은 스팸 발송자들이 킥스타터를 지켜보는지, 하루에 세 통 정도 캠페인 성공을 도와주겠다는 사기성 메일을 받습니다. 이들은 어설프게 관심 있는 고객인 척 대화를 시작한 뒤, 결국 돈을 주고 고용해야 한다는 자신의 ‘지인’에게 대화를 유도합니다.

안녕하세요, 한 투자자가 당신의 캠페인을 저에게 소개했는데, 소프트웨어 개발자를 위한 글쓰기 개선이라는 당신의 접근 방식에 즉시 흥미를 느꼈습니다. 블로깅에서의 당신의 경험과 성과가 인상적입니다! 프로젝트를 후원하고 싶습니다. 다양한 수준의 경험과 전문성을 가진 개발자들을 위해 글쓰기 기법을 어떻게 맞춤화할 계획이신가요? 감사합니다, David 드림

스패머들은 제품에 관심이 있는 척하는 무해해 보이는 메시지로 대화를 시작합니다.

안녕하세요 Michael님, 좋습니다! 킥스타터에서 당신과 같은 크리에이터에게 어떻게 목표를 달성했는지 조언을 구하는 것을 고려해 보셨나요? 제 친구 중에 그곳에서 성공한 크리에이터가 있는데, 관심이 있으실지 모르겠지만 그와 연결해 보는 것도 도움이 될 것 같습니다. 캠페인에 정말 도움이 될 수 있을 거예요! 캠페인 성공을 기원합니다! 행운을 빕니다, David 드림

…그리고는 유료 킥스타터 홍보 서비스를 제공하는 자신의 ‘지인’ 이야기로 대화를 돌립니다.

펀딩 현황: 지금까지의 진행 상황

오늘 기준으로 제 킥스타터 프로젝트에는 1,585달러의 후원금이 모였으며, 목표의 31%를 달성했습니다.

제 킥스타터 프로젝트의 펀딩 기간 중 24%가 지난 시점에서 수익 목표의 31%를 달성했습니다.

프로젝트는 금요일에 시작했고 이달 말에 종료되므로, 현재 펀딩 기간 25일 중 6일째(24% 진행)입니다.

전체 기간의 24% 만에 목표의 31%를 달성했다고 하면 순조로워 보이지만, 문제는 이미 쓸 수 있는 가장 좋은 카드를 다 써버렸다는 점입니다. 책 메일링 리스트와 소셜 미디어, 그리고 이 블로그 하단의 자체 광고를 통해 킥스타터를 이미 알렸습니다.

그렇다면 이제 또 무엇을 할 수 있을까요?

아직 남아 있는 카드는 두 가지 정도가 떠오릅니다.

첫 번째는 Hacker News 메인에 오르는 것입니다. 평소라면 어려운 일이지만, 저는 원래 그 분야의 전문가라고 할 수 있습니다. 이달 말까지 적어도 한 번, 가능하면 두세 번은 성공할 수 있다는 자신감이 있습니다. 구상 중인 글 몇 개는 일종의 ‘번트’와 같습니다. 1위를 차지하는 홈런급 글은 아니겠지만, 5시간 정도 들여 써서 Hacker News 10~20위 정도에는 오를 수 있을 것 같습니다.

두 번째 아이디어는 공개적인 글쓰기에 투자를 많이 하는 기업들에게 연락해 프로젝트 후원에 관심이 있는지 물어보는 것입니다. 기업 후원을 받은 책을 본 적은 없어서 어쩌면 좋지 않은 아이디어일 수도 있지만, 시도해 볼 만하다고 생각합니다.

사이드 프로젝트: 취미용 클라우드 서버에서 무엇을 돌려 볼까요?

최근 무료로 4코어 ARM CPU / 24GB RAM 사양의 Oracle Cloud 서버를 하나 받았습니다. 문제는 이 꽤 쓸 만한 서버가 약 99%는 놀고 있다는 점입니다.

불쌍한 제 서버는 너무 심심해하고 있습니다.

지금까지 설치한 것은 다음과 같습니다.

서버에서 실행할 재미있는 아이디어를 찾고 있습니다. 기준은 다음과 같습니다.

  • 시간이 날 때 운영하며 즐길 수 있지만, 꼭 시간을 써야 하는 의무가 되지는 않는 서비스였으면 합니다.
    • 포럼이나 채팅방처럼 관리에 시간을 써야 하는 것은 원하지 않습니다.
  • 제가 지지하는 활동을 지원하는 자원 컴퓨팅 형태여도 좋습니다.
    • ArchiveTeam Warrior로 웹사이트를 Internet Archive에 보관하고 싶었지만, ARM을 지원하지 않습니다.
    • 자원 컴퓨팅이라면 SETI@home에 컴퓨팅 자원을 기부할 때 그 실행 화면을 보는 것만으로도 즐거웠던 것처럼, 운영하는 사람 입장에서도 재미있는 것이면 좋겠습니다.
  • 오픈소스였으면 합니다.
  • Oracle이 제 서버를 날려버려도 누구에게도 피해가 없어야 합니다.
    • 즉, 제 서버에 데이터를 저장한 사람이 그 데이터를 잃는 일이 없었으면 합니다.
  • 암호화폐 채굴은 하고 싶지 않습니다.

endlessh-go는 제가 찾는 것의 좋은 예시이며, 설치할 계획입니다.

제 서버에서 돌리면 좋을 재미있는 프로젝트 아이디어가 있다면 댓글로 알려주시거나 이메일로 보내주세요.

흥미로운 링크

  • “Writing commit messages” by Simon Tatham
    • 제 글을 쓰기 전에 커밋 메시지 관행에 관한 블로그 글을 많이 읽었는데, 이 글이 가장 좋았습니다.
      • 사실 정확히 말하면 다른 글들은 모두 별로였고 Tatham의 글만 좋았다고 하는 편이 더 맞습니다.
      • 다른 글들은 대부분 중요하지 않은 스타일 문제(예: “제목은 반드시 명령형이어야 한다”)에 집중하거나, 이유를 설명하지 않고 규칙만 정해 놓습니다.
    • URL과 사이트 디자인을 보고는 저자가 대학생인 줄 알았고, 커밋 메시지에 대해 이렇게 식견이 깊다는 사실에 놀랐습니다. 좀 더 찾아보니 저자는 PuTTY SSH 클라이언트의 제작자였고, 그냥 친구 서버에 모든 것을 올려두는 것을 좋아하는 분이었습니다.
  • “Programming without Pointers” by Andrew Kelley
    • Zig의 창시자인 Andrew Kelley는 “포인터 없이 프로그래밍하기”라는 스타일을 만들며 프로그래밍 실력의 정체기를 벗어났다고 말합니다.
    • Kelley의 스타일은 앱의 상태를 하나의 struct로 표현하는 것입니다. 이 struct는 앱에 필요한 다양한 데이터 타입을 담지만, 그 타입들 자체는 포인터를 포함할 수 없습니다. 최상위 struct는 배열이나 해시맵을 포함할 수 있지만, 그 안에 저장되는 객체는 포인터를 가질 수 없습니다.
      • 그의 groovebasin 프로젝트가 그 예시입니다.
    • 그는 문자열 저장을 예로 듭니다. 문자열 배열은 포인터에 대한 포인터가 되므로 저장할 수 없습니다. 대신 모든 문자열을 하나의 배열에 모으는 커스텀 구조를 만들고, 그 배열을 가리키는 인덱스 목록을 유지합니다.
    • 이 기법의 장점:
      • 상태를 직렬화하고 역직렬화하는 것이 매우 간단합니다. 직렬화는 struct의 바이트를 파일이나 네트워크 소켓에 그대로 쓰는 것이고, 역직렬화는 파일 전체를 읽어 원래 struct로 매핑하는 것입니다.
      • 서로 다른 환경(예: Zig 백엔드와 WASM 프론트엔드) 간에 상태를 공유하기 쉽습니다.
      • 메모리 관리도 더 간단해집니다. 최상위 struct의 각 필드별로 메모리를 해제하면 되므로, 자식 객체의 메모리를 해제하기 위해 리스트를 순회하거나 트리 구조를 따라갈 필요가 없습니다.
    • 인덱스가 사실상 컴파일러 지원 없는 포인터처럼 느껴져서 이 기법이 놀랍게 다가옵니다. 만약 이런 제안을 아무나 하는 사람에게 들었다면 무시했을 텐데, Andrew Kelley는 똑똑한 사람이라고 생각하기 때문에 한번 시도해 보고 싶습니다.
  • “Reviving an Old Kindle Paperwhite 7th Gen” by Hemant Kumar
    • eBay에서 30달러짜리 오래된 e리더를 사서 나만의 대시보드를 만들고 싶은 마음이 간절하지만, 정작 무엇을 표시해야 할지 아이디어가 없습니다.
  • “If You Ever Stacked Cups In Gym Class, Blame My Dad” by Kit Fox
    • 어느 날 새벽 2시에 잠에서 깨 다시 잠들지 못했는데, 이 글을 읽고 컵 쌓기 영상을 보며 두 시간 정도를 보냈습니다.

마무리

완료한 일은?

배운 점

  • 킥스타터에서의 펀딩은 놀라울 정도로 수월합니다.

다음 달 목표

  • Refactoring English 킥스타터 목표인 5,000달러를 달성합니다.
  • Refactoring English의 블로그 챕터를 공개합니다.
  • 3월 말까지 Hacker News 메인에 두 번 오릅니다.

도움 요청

  • 제 킥스타터 프로젝트에 제안할 아이디어가 있다면, 스팸봇이 아니라면 이메일로 보내주세요.

원문은 Michael Lynch님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.