본문으로 건너뛰기

왜 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의 새로운 표준입니다."

관련 문서