루비 개발자의 Elixir/Phoenix 전환 및 제품 개발 경험

I switched from Ruby to elixir and built a product to learn new tool

작성자
HackerNews
발행일
2025년 10월 16일

핵심 요약

  • 1 15년 경력의 루비 개발자가 Elixir/Phoenix로 전환하여 개인 제품을 개발하며 겪은 학습 과정과 경험을 공유합니다.
  • 2 LiveView의 우수성, ObanJob의 편리함, 패턴 매칭의 효율성 등 Elixir/Phoenix의 장점과 함께 Ecto, 배포, 테스트 도구의 어려움을 상세히 다룹니다.
  • 3 초기 보일러플레이트의 한계, 함수형 프로그래밍 적응, 배포 시 메모리 문제 해결 등 실제 개발 과정에서 얻은 구체적인 인사이트를 제공합니다.

도입

15년간 루비 온 레일즈를 주 언어로 웹 애플리케이션을 개발해 온 저자는 2017년부터 Elixir에 관심을 가졌으나 직접 시도할 기회가 없었습니다. 작년에 개인적인 필요를 충족할 제품을 개발하기로 결정하면서 Elixir/Phoenix를 활용하기로 마음먹었고, 이 글을 통해 루비 개발자로서 Elixir/Phoenix를 학습하고 실제 제품을 구축하며 얻은 경험과 통찰을 공유합니다.

Elixir/Phoenix 학습 및 개발 과정저자는 Elixir/Phoenix 학습 초기 보일러플레이트를 사용했으나, 요구사항에 맞지 않아 코드의 70%를 재작성해야 했습니다. 이는 확장성과 재사용성이 부족했기 때문이며, 다음 프로젝트에서는 빈 Phoenix 앱으로 시작할 계획입니다. Elixir의 함수형 접근 방식에 익숙해지는 데 시간이 걸렸고, 특히 Quote/Unquote 개념은 최근에야 이해했지만, 대부분의 앱 구현에는 큰 지장이 없었습니다. Ecto는 함수명과 인수를 암기하기 어려워 항상 치트시트를 사용해야 할 만큼 복잡하게 느껴졌습니다.

Elixir/Phoenix의 주요 장점

  • LiveView: Rails의 Turbo보다 훨씬 뛰어나다고 평가하며, 초기에는 UI 상호작용에 과도하게 사용했으나, 이후 Alpine.js와 조합하여 효율성을 높였습니다. 유럽에서 뉴욕 서버를 사용함에도 지연 시간 문제가 없었고, 대부분의 React 기반 앱보다 성능이 좋았습니다.
  • ObanJob: Sidekiq와 달리 백그라운드 작업을 위해 별도의 앱 인스턴스나 추가 인프라, 유지보수가 필요 없어 매우 긍정적인 경험을 제공했습니다.
  • 패턴 매칭: Elixir의 case 문과 패턴 매칭 기능은 {:ok, result} 또는 {:error, message}와 같은 결과 처리를 매우 용이하게 하여 Ruby보다 훨씬 깔끔하고 좋은 코드를 작성하는 데 기여했습니다.
  • 인증: Phoenix가 제공하는 인증 코드는 Devise보다 최소한의 구현으로 시작하지만, Google/GitHub 인증과 같은 기능을 몇 시간 만에 추가할 수 있을 정도로 확장성이 뛰어났습니다.

직면했던 도전 과제

  • 배포: Docker를 사용한 멀티스테이지 빌드 배포 중 4GB 인스턴스에서 OOM(Out Of Memory) 오류가 발생했습니다. 수많은 디버깅 끝에 Elixir 포럼의 짧은 메시지에서 찾은 ERL_MAX_PORTS=1024 환경 변수 설정을 통해 메모리 문제를 해결했습니다.
  • 테스트 도구: Rails의 Factory Bot과 같은 유용한 Gem에 비해 Elixir/Phoenix의 테스트 도구 생태계는 아직 부족하다고 느꼈습니다.
  • 레이아웃 및 프로젝트 구조: root, live, app 레이아웃의 복잡성과 최근 업데이트로 템플릿, 뷰, 컨트롤러가 동일한 컨트롤러 폴더 아래에 통합되어 관리하기 어렵다고 지적했습니다.
  • 서드파티 통합: 일부 서드파티 서비스에 대한 패키지가 없어 직접 구현해야 했지만, 대부분 한 시간 내에 처리할 수 있을 만큼 어렵지 않았습니다.
  • 이미지 업로드: 초기에는 앱 내부에 저장했으나, 비용 절감을 위해 DO Spaces CDN으로 전환했습니다. presign_ 함수의 작동 방식과 훅 사용에 대한 이해가 필요했으며, 구현 방식에 대한 아쉬움을 표했습니다.

개인 제품 updatify.io 개발저자가 개발한 updatify.io는 웹 앱에 위젯을 임베드할 수 있는 릴리스 노트 도구입니다. 위젯은 LiveView로 구동되며, JS 코드로 모달을 생성한 후 LiveView 앱이 포함된 iframe을 생성하는 방식입니다. 서브도메인 기반 블로그 기능 구현은 여러 플러그를 활용하여 해결했으며, 이는 테스트로 가장 먼저 커버한 기능 중 하나였습니다.

LiveViewNative에 대한 언급몇 달 전 LiveViewNative를 시도해 보았는데, 아직 개발 초기 단계이지만 오프라인 기능이 필요 없는 전자상거래 유형의 앱에서 잠재력을 가질 수 있다고 언급했습니다.

결론

전반적으로 Elixir/Phoenix를 사용한 경험에 매우 만족하며, 이미 다른 유료 프로젝트에도 이 기술 스택을 제안했습니다. 가장 큰 어려움은 클라이언트에게 Elixir 개발자 시장의 충분함을 설득하는 것이었습니다. 저자는 향후 개인 프로젝트에 Elixir/Phoenix를 더 많이 활용할 계획이지만, LiveView가 프레임워크의 큰 부분을 차지하고 인기의 주요 원인이므로 API 전용 프로젝트에서는 어떻게 작동할지 의문을 제기했습니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!