수십 년 된 복잡한 ActiveRecord 관계, 서브도메인 멀티테넌시 및 비즈니스 로직을 단일 기능 손실 없이 현대적인 스택으로 마이그레이션한 방법

Rails to SvelteKit Migration – LocallyGrown

작성자
HackerNews
발행일
2025년 09월 15일

핵심 요약

  • 1 19년 된 Rails 애플리케이션의 복잡한 비즈니스 로직을 SvelteKit 기반의 현대적인 스택으로 성공적으로 마이그레이션했습니다.
  • 2 데이터 변환 없이 기존의 데이터베이스 스키마를 유지하고, '올-또는-무(all-or-nothing)' 방식의 위험한 전환을 감행하여 데이터 손상 위험을 최소화했습니다.
  • 3 ActiveRecord 도메인 모델을 TypeScript 서비스로 분리하고, 서브도메인 멀티테넌시 및 권한 시스템을 재구축하여 기능 패리티를 달성했습니다.

도입

본 문서는 19년 된 Rails 코드베이스인 LocallyGrown.net을 현대적인 SvelteKit 스택으로 전환하는 과정과 직면했던 복잡한 아키텍처적 도전 과제를 다룹니다. 기존 시스템은 ActiveRecord 관계, 서브도메인 멀티테넌시, 역할 기반 권한 등 수십 년간 축적된 비즈니스 로직으로 얽혀 있었으며, 이는 단순한 마이그레이션이 아닌 비즈니스 전체의 '번역'에 가까운 작업이었습니다. 필자는 2025년 6월까지 이 프로젝트의 성공 가능성을 증명하지 못하면 서비스를 종료할 계획으로 은밀히 작업을 시작했습니다.

이 마이그레이션은 19년 된 Rails 시스템을 SvelteKit으로 전환하는 과정에서 여러 주요 아키텍처적 도전을 마주했으며, 각 문제에 대한 체계적인 전략을 통해 해결했습니다.

1. 레거시 로직 현대화

  • 도메인 모델: ActiveRecord 비즈니스 로직을 TypeScript 서비스로 분리하여 모듈성을 높였습니다.

  • 권한 시스템: 분산된 역할 기반 권한을 AuthorizationService로 통합, 서버 측에서 처리했습니다.

2. 데이터 및 인프라 유지보수

  • 스키마: 데이터 변환 없이 기존 데이터베이스 스키마를 유지하여 데이터 손상 위험을 제거했습니다.

  • 멀티테넌시: SvelteKit에서 서브도메인 기반 마켓 격리를 서버 훅으로 수동 구현했습니다.

  • 자산: 수천 개의 이미지를 클라우드로 이전하고 다양한 크기 및 WebP 버전을 사전 생성하며 URL 호환성을 유지했습니다.

3. 보안 및 사용자 경험

  • 커스터마이제이션: 위험한 주입 방식 대신 보안 테마 시스템을 도입하여 안전한 커스터마이징을 제공했습니다.

4. 고위험 전환 관리

  • 올-또는-무 마이그레이션: 공유 데이터베이스와 버전 비호환성으로 인해 단일 시점 전환을 강행, 완벽한 준비를 요구했습니다.

  • 베타 테스트: 두 달간 프로덕션 미러링 미리보기 환경을 운영하여 사용자 피드백을 수렴하고 시스템을 개선했습니다.

결론

이 프로젝트는 단순한 기술 스택 교체를 넘어, 19년 된 비즈니스 로직과 데이터를 현대적인 아키텍처로 안전하게 이전하는 복잡한 여정이었습니다. 특히 데이터베이스 스키마를 유지하고 '올-또는-무' 방식의 전환을 선택한 것은 위험했지만, 데이터 손상 없이 빠른 전환을 가능하게 한 결정적인 전략이었습니다. 철저한 사전 준비, 체계적인 분해 및 재구축 전략, 그리고 실제 사용자 참여를 통한 광범위한 베타 테스트가 성공적인 레거시 시스템 마이그레이션에 필수적임을 보여줍니다. 저자는 이 경험을 통해 프로덕션 환경에서 발생할 수 있는 예상치 못한 문제에 대한 대비와 실시간 대응 능력의 중요성을 강조합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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