Fizzy를 Self-Hosted로 옮겨보며 느낀 것들

최근 Fizzy 를 개인 서버로 옮겨 쓰는 경험을 해봤어요.

결론부터 말하면, “이 정도까지 잘 정리된 Rails 오픈소스가 흔할까?” 싶을 정도로 만족스러운 경험이었어요.

Fizzy를 알게 된 계기

Fizzy는 목표(goal)와 작업(task)을 아주 단순한 카드(card) 단위로 관리하는 서비스예요.

복잡한 기능 대신 의도적으로 덜어낸 UX가 인상적인 서비스죠.

  • 클라우드(SaaS) 버전 제공

  • 동시에 소스 코드 공개 (O’Saasy License 적용) -> SaaS로 원저작자와 직접 경쟁하는 것은 금지되어 있어, 전통적인 오픈소스와는 다름

  • self-hosted 버전은 무료 (개인/회사 내부 용도)

  • 클라우드 버전은 카드 생성/삭제 포함 1,000장 초과 시 월 $20로 unlimited

처음에는 클라우드 버전으로 약 30개 정도의 카드만 가볍게 써봤는데, 이 “이 정도면 충분하다”는 감각이 너무 마음에 들었어요.

그래서 자연스럽게 self-hosted로 이어졌습니다.

Rails Best Practice 교과서 같은 레포지토리

Fizzy는 37signals 가 만든 서비스답게, 레포지토리 자체가 하나의 Rails 운영 가이드처럼 느껴졌어요.

  • Ruby on Rails 기반

  • Kamal 배포 가이드 제공

  • Docker 실행 방법도 문서로 정리되어 있음

이미 Kamal 배포 경험이 있었던 터라, 가이드만 따라가니 큰 시행착오 없이 서버에 띄울 수 있었어요.

“아, 이래서 37signals가 Rails의 원조구나” 라는 생각이 절로 들더라고요.

Fizzy는 이메일 기반 magic link 로그인 방식을 사용해요. 그래서 배포 과정에서 가장 중요한 설정은 SMTP였어요.

저는 개인 용도라서 Mailgun 의 테스트용 sandbox 계정을 사용했어요. 설정 자체는 아주 간단했지만 실제 로그인 이메일 도메인이 다르다 보니 스팸함으로 빠지는 문제가 있었어요.

당장은 문제 없었지만, 장기적으로는 자체 도메인 + 정상 발송 주소로 바꿀 예정이에요.

한 가지 아쉬웠던 점: Import 기능 부재

여기까지는 정말 막힘 없이 진행됐어요. 그런데 딱 하나, 아쉬웠던 점이 있었어요.

클라우드 버전에서 export한 데이터를 self-hosted 버전으로 import하는 기능이 없다는 점이에요.

GitHub Discussion에서 확인해보니 2024년 12월부터 개발 중이라는 코멘트가 있었고, 코멘트가 달린지 한 달쯤 지난 시점이라 문의를 해보니 아직 개발 중이라는 답변을 받았어요.

결국 직접 만든 Import Rake Task

그래서 개인 용도로 쓰기 위해 직접 rake task를 하나 만들었습니다.

클라우드에서 export한 데이터를 self-hosted DB 구조에 맞게 변환해서 문제없이 import 성공했고, 구체적인 데이터 구조 파악은 claude code를 통해서 진행하니 정말 빠르게 구현할 수 있었어요.

코드는 여기에서 볼 수 있어요.

이 덕분에 클라우드에서 쓰던 흐름을 그대로 이어갈 수 있었고, self-hosted로 옮기길 잘했다는 확신도 들었어요.

오픈소스를 쓰는 즐거움

Fizzy 오픈 소스에 직접 기여하고 싶기도 했지만 아직 마땅히 기여 포인트를 찾지는 못했어요.

그래도 이렇게 실제로 써보고 부족한 부분을 직접 만들고 필요하면 다시 고쳐보고 이 과정을 반복하다 보니, 언젠가는 자연스럽게 기여할 수 있는 날도 오지 않을까 하는 기대감이 생기더라고요.

Future Work: Fizzy를 개인 생산성의 기반으로

Fizzy를 self-hosted로 옮기고 나니, 이 서비스를 단순한 “목표 관리 도구”를 넘어서 앞으로 할 일들을 쌓아두는 기반 데이터베이스로 써보고 싶다는 생각이 들었어요.

Fizzy의 card 모델은 생각보다 범용적이에요.

  • goal / task 구조가 단순하고

  • 상태 변화가 명확하며

  • 불필요한 메타데이터가 거의 없어서

앞으로 내가 하는 일들을 가장 작은 단위로 저장하기에 꽤 좋은 형태라고 느꼈어요.

그래서 이후에는 Fizzy를

“내가 하는 모든 일의 최소 단위 저장소”

처럼 두고, 그 위에 표현 방식만 바꿔보는 시도를 해보고 싶어요.

Timestripe UI를 내 방식으로 구현해보고 싶은 계획

개인적으로 철학과 UI가 정말 마음에 들지만, 가격 때문에 계속 결제해서 쓰지는 못하고 있는 서비스가 있어요.

바로 Timestripe예요.

장기 목표를 시간 축으로 정리하고, 지금 해야 할 일을 자연스럽게 연결해주는 UX는 정말 인상적인데, 개인 용도로 쓰기엔 비용이 늘 아쉬웠어요.

그래서 떠올린 다음 단계는,

Fizzy를 백엔드(데이터 저장소)로 두고 Timestripe 스타일의 UI를 직접 만들어서 써보는 것

이에요.

구조적으로는

  • Fizzy는 변하지 않는 데이터의 원천(source of truth)

  • UI는 언제든 바꿀 수 있는 표현 레이어

로 두고, 내 작업 방식에 맞게 시간 축 기반 UI를 실험해보려는 계획이에요.

마무리

Fizzy를 self-hosted로 옮긴 경험은 단순히 “월 $20을 아끼기 위해서”라기보다는,

  • Rails로 잘 만든 서비스는 어떤 모습인지

  • 운영까지 고려한 오픈소스는 무엇이 다른지

  • 단순함을 지키는 제품 철학이 얼마나 중요한지

를 다시 한 번 느끼게 해준 시간이었어요.

아직은 개인 실험 단계지만, 이렇게 직접 써보고 확장해보는 경험이 쌓이다 보면 언젠가는 더 자연스럽게 오픈소스에 기여할 수 있지 않을까 조심스럽게 기대해봅니다.