Skip to main content

왜 Filament인가?

📝 초안 (Draft)

이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.

Multi-SaaS Kit이 관리자 패널 프레임워크로 Filament v4를 선택한 이유를 설명합니다.

핵심 선택 이유​

Multi-SaaS Kit은 **권한 시스템 (Level 0~6, ADR-058)**을 구현해야 합니다. 각 계층(Platform, SaaS, Tenant, Organization, Workspace, Team, Member)마다 별도의 관리 패널이 필요하며, 이를 효율적으로 구축하려면 다중 패널 네이티브 지원이 필수입니다.

요구사항Filament 지원
다중 패널 (7개+)✅ 네이티브 지원
라이선스 비용✅ 무료 (MIT)
Laravel 통합✅ 공식 Laravel 패키지
멀티테넌시✅ Stancl/Tenancy 호환
커스터마이징✅ 높은 유연성

Admin Panel 프레임워크 비교​

Laravel 생태계에서 가장 인기 있는 Admin Panel 프레임워크를 비교합니다.

상세 비교표​

기준Filament v4Laravel NovaBackpack
가격무료 (MIT)$99/site$69/project
다중 패널✅ 네이티브⚠️ 제한적⚠️ 제한적
커스터마이징⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
프론트엔드Livewire + Alpine.jsVue.jsBlade/jQuery
Laravel 통합완벽완벽 (공식)좋음
멀티테넌시우수보통보통
성능빠름 (SPA 모드)빠름보통
학습 곡선보통낮음낮음
커뮤니티매우 활발활발활발
문서화우수우수좋음

왜 Filament이 최선인가?​

1. 무료 + 강력한 기능​

Nova는 사이트당 $99, Backpack은 프로젝트당 $69입니다. Multi-SaaS Kit처럼 여러 고객 프로젝트를 지원하는 플랫폼에서는 라이선스 비용이 급격히 증가합니다.

# 10개 프로젝트 운영 시 비용
Nova: $99 × 10 = $990
Backpack: $69 × 10 = $690
Filament: $0

Filament은 무료이면서도 Nova, Backpack과 동등하거나 더 나은 기능을 제공합니다.

2. 다중 패널 네이티브 지원​

Multi-SaaS Kit의 핵심 요구사항인 Level 0~6 계층 패널을 자연스럽게 구현할 수 있습니다.

// app/Providers/Filament/PlatformPanelProvider.php
class PlatformPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->id('platform')
->path('platform')
->colors(['primary' => Color::Indigo])
->discoverResources(in: app_path('Filament/Platform/Resources'))
->discoverPages(in: app_path('Filament/Platform/Pages'));
}
}

// app/Providers/Filament/TenantPanelProvider.php
class TenantPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->id('tenant')
->path('tenant')
->tenant(Tenant::class) // 멀티테넌시 자동 적용
->colors(['primary' => Color::Emerald]);
}
}

Nova나 Backpack에서는 다중 패널 구현에 상당한 커스텀 작업이 필요합니다.

3. Livewire 기반 반응형 UI​

Filament은 Livewire 3와 Alpine.js를 사용하여 SPA와 유사한 반응형 경험을 제공합니다.

특징효과
실시간 업데이트페이지 새로고침 없이 데이터 반영
폼 유효성 검사입력 즉시 유효성 검사
무한 스크롤대용량 데이터 효율적 표시
모달/슬라이드오버부드러운 UI 전환

4. Stancl/Tenancy 호환성​

Multi-SaaS Kit의 멀티테넌시 솔루션인 Stancl/Tenancy v4와 완벽히 호환됩니다.

// Filament 패널에서 테넌트 자동 적용
->tenant(Tenant::class)
->tenantRoutePrefix('{tenant}')
->tenantMiddleware([
InitializeTenancyByDomain::class,
])

Filament v4의 새로운 기능​

Multi-SaaS Kit은 최신 Filament v4를 채택했습니다.

v3 → v4 주요 개선​

기능v3v4
성능기본50% 향상
SPA 모드제한적완전 지원
Clusters없음✅ 리소스 그룹화
Unsaved Changes없음✅ 자동 감지
Asset BundlingVite 분리통합

Clusters (리소스 그룹화)​

v4의 Clusters 기능으로 관련 리소스를 논리적으로 그룹화할 수 있습니다.

// 사용자 관리 Cluster
class UserManagement extends Cluster
{
protected static ?string $navigationIcon = 'heroicon-o-users';

public static function getNavigationLabel(): string
{
return '사용자 관리';
}
}

// Cluster에 속하는 리소스
class UserResource extends Resource
{
protected static ?string $cluster = UserManagement::class;
}

class RoleResource extends Resource
{
protected static ?string $cluster = UserManagement::class;
}

권한 시스템 (Level 0~6, ADR-058)에서 각 계층별로 리소스를 그룹화하여 관리 UI를 체계화할 수 있습니다.

Multi-SaaS Kit에서의 Filament 활용​

Level 0~6 계층 패널 구성​

계층패널 경로용도
Platform/platform전체 플랫폼 관리
SaaS/saasSaaS 서비스 관리
Tenant/tenant테넌트 관리
Organization/org조직 관리
Workspace/workspace워크스페이스 관리
Team/team팀 관리
Member/member개인 설정

권한 기반 네비게이션​

각 패널에서 사용자 권한에 따라 메뉴가 동적으로 표시됩니다.

NavigationItem::make('사용자 관리')
->icon('heroicon-o-users')
->visible(fn (): bool => auth()->user()->can('manage-users'))
->url(fn (): string => UserResource::getUrl());

테넌트별 커스터마이징​

Filament의 테넌트 기능으로 각 테넌트마다 다른 테마와 로고를 적용할 수 있습니다.

->colors([
'primary' => fn () => tenant()->primary_color ?? Color::Blue,
])
->brandLogo(fn () => tenant()->logo_url ?? asset('logo.png'))
->favicon(fn () => tenant()->favicon_url ?? asset('favicon.ico'))

커스터마이징 예시​

커스텀 위젯​

대시보드에 테넌트별 통계를 표시하는 위젯 예시:

class TenantStatsWidget extends Widget
{
protected static string $view = 'filament.widgets.tenant-stats';

protected function getStats(): array
{
return [
Stat::make('총 사용자', tenant()->users()->count())
->icon('heroicon-o-users')
->color('success'),
Stat::make('활성 구독', tenant()->activeSubscriptions()->count())
->icon('heroicon-o-credit-card')
->color('primary'),
];
}
}

커스텀 페이지​

Filament 패널 내에 커스텀 페이지를 추가할 수 있습니다.

class TenantSettings extends Page
{
protected static ?string $navigationIcon = 'heroicon-o-cog';
protected static string $view = 'filament.pages.tenant-settings';

public function getTitle(): string
{
return '테넌트 설정';
}
}

커스텀 액션​

테이블과 폼에 커스텀 액션을 추가할 수 있습니다.

// 일괄 상태 변경 액션
BulkAction::make('activate')
->label('활성화')
->icon('heroicon-o-check')
->action(fn (Collection $records) => $records->each->activate())
->requiresConfirmation()
->deselectRecordsAfterCompletion();

다른 선택지와의 최종 비교​

Nova를 선택하지 않은 이유​

고려사항NovaFilament
비용$99/site무료
다중 패널커스텀 필요네이티브
프론트엔드Vue.jsLivewire
번들 크기큼작음

Nova는 Laravel 공식 제품이지만, 다중 패널 요구사항과 라이선스 비용으로 인해 적합하지 않았습니다.

Backpack을 선택하지 않은 이유​

고려사항BackpackFilament
비용$69/project무료
UI 현대성Blade/jQueryLivewire/Alpine
반응형 UX제한적SPA급
커뮤니티활발더 활발

Backpack은 검증된 솔루션이지만, 현대적인 UI/UX와 활발한 커뮤니티 면에서 Filament이 앞섭니다.

Filament 학습 리소스​

리소스설명링크
공식 문서상세한 API 레퍼런스filamentphp.com/docs
Laracasts동영상 튜토리얼laracasts.com
GitHub소스 코드 및 이슈github.com/filamentphp/filament
Discord커뮤니티 지원discord.gg/filament

결론​

Filament v4는 Multi-SaaS Kit의 핵심 요구사항을 완벽히 충족합니다:

  1. 다중 패널: 권한 시스템 (Level 0~6, ADR-058)에 맞는 7개 이상의 패널 지원
  2. 무료 라이선스: 고객 프로젝트 확장에 비용 부담 없음
  3. 멀티테넌시: Stancl/Tenancy와 완벽 호환
  4. 현대적 UI: Livewire 기반 반응형 경험
  5. 활발한 커뮤니티: 빠른 업데이트와 풍부한 생태계

"Filament은 Laravel Admin Panel의 새로운 표준입니다."

관련 문서​