왜 Laravel인가? (with Go)
이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.
Multi-SaaS Kit이 Laravel + Go 하이브리드 아키텍처를 핵심으로 선택한 이유를 설명합니다.
핵심 선택: 4대 기술 스택
Multi-SaaS Kit은 모든 플랫폼을 커버하는 풀스택 기술 스택을 제공합니다:
| 플랫폼 | 기술 | 역할 |
|---|---|---|
| 웹 (서버) | Laravel | 웹 애플리케이션, API, 비즈니스 로직, Admin |
| 고성능 서비스 | Go | 실시간 처리, 대용량 배치, WebSocket |
| 모바일 앱 | Flutter | iOS/Android 단일 코드베이스 |
| 데스크탑 앱 | Tauri | Windows/macOS/Linux 경량 앱 |
┌─────────────────────────────────────────┐
│ Laravel + Go (서버) │
│ 웹 API, 인증, 비즈니스 로직, 실시간 │
└────────────┬───────────┬────────────────┘
│ REST/ │
│ GraphQL │
↓ ↓
┌────────────┐ ┌────────────┐
│ Flutter │ │ Tauri │
│ (모바일) │ │ (데스크탑) │
│ iOS/Android│ │Win/Mac/Lin │
└────────────┘ └────────────┘
"Start with Laravel, Scale with Go, Reach everywhere with Flutter & Tauri"
"단일 언어" 시대에서 "최적 도구" 시대로
과거에는 Next.js, React, React Native처럼 JavaScript 단일 스택이 유행했습니다. 개발자가 하나의 언어만 학습하면 되는 이점이 컸기 때문입니다.
하지만 AI 코딩 시대에서는 상황이 달라졌습니다:
- AI는 언어에 관계없이 동일한 품질의 코드 생성
- 개발자의 언어 학습 비용이 크게 감소
- 각 영역에 최적화된 도구를 선택하는 것이 유리
→ 그래서 우리는 웹(Laravel), 고성능(Go), 모바일(Flutter), 데스크탑(Tauri)에 각각 최적의 기술을 선택했습니다.
Laravel 선택 이유
개발 생산성 최우선
SaaS 스타트업에서 가장 중요한 것은 빠른 출시입니다. Laravel은 풀스택 프레임워크 중 최고의 개발 생산성을 제공합니다.
| 기능 구현 | Laravel | Spring | .NET | Django | Rails |
|---|---|---|---|---|---|
| 인증 시스템 | 2시간 | 16시간 | 8시간 | 4시간 | 2시간 |
| CRUD API | 4시간 | 12시간 | 8시간 | 6시간 | 4시간 |
| 파일 업로드 | 2시간 | 8시간 | 6시간 | 4시간 | 3시간 |
| 결제 통합 | 8시간 | 16시간 | 12시간 | 10시간 | 8시간 |
| 총 개발 시간 | 16시간 | 52시간 | 34시간 | 24시간 | 17시간 |
"Batteries Included" 철학
Laravel은 SaaS 개발에 필요한 모든 것을 기본 제공합니다:
- 인증/권한: Breeze, Sanctum (API 토큰)
- 큐/잡: Horizon으로 백그라운드 작업 관리
- 캐싱: Redis 통합 기본 지원
- 이메일: 다양한 드라이버 지원
- 파일 스토리지: S3, 로컬 등 통합 API
- 테스팅: PHPUnit, Pest 기본 설정
Spring vs Laravel: 핵심 트레이드오프
Laravel + Go와 Spring + Go를 최종 비교할 때, 두 가지 상반된 접근 방식이 있습니다:
두 가지 접근 방식
| 접근 | Spring + Go | Laravel + Go |
|---|---|---|
| MSP 기능 | ✅ 내장 (Spring Cloud) | ⚠️ 별도 구성 필요 |
| 개별 기능 구현 | ❌ 일일이 구현 필요 | ✅ 생태계 패키지 활용 |
| 초기 개발 속도 | 느림 (설정 + 구현) | 빠름 (패키지 조합) |
| 대규모 확장 | 쉬움 (내장 도구) | Go로 별도 처리 |
Spring Cloud의 MSP 장점
Spring 진영의 핵심 강점은 Microservice Platform (MSP) 기능입니다:
Spring Cloud 생태계:
├── Service Discovery (Eureka, Consul)
├── Config Server (중앙 설정 관리)
├── API Gateway (Spring Cloud Gateway)
├── Circuit Breaker (Resilience4j)
├── Distributed Tracing (Sleuth, Zipkin)
└── Load Balancing (Ribbon, Spring Cloud LoadBalancer)
장점: 엔터프라이즈 수준의 마이크로서비스 아키텍처가 내장되어 있어 대규모 확장 시 유리
단점: 개별 비즈니스 기능(인증, 권한, 결제, Admin 등)은 직접 구현해야 함
Laravel 생태계의 장점
Laravel은 비즈니스 기능 구현에서 압도적 우위를 가집니다:
Laravel 생태계:
├── Spatie Permission (권한 시스템)
├── Filament (Admin Panel)
├── Sanctum/Passport (API 인증)
├── Cashier (결제)
├── Horizon (큐 모니터링)
├── Telescope (디버깅)
├── Stancl/Tenancy (멀티테넌시)
└── 수백 개의 검증된 패키지...
장점: 복잡한 비즈니스 기능을 패키지 조합으로 빠르게 구현
단점: MSP 기능은 Go나 외부 서비스(Kong, Envoy 등)로 별도 구성 필요
우리의 선택: Laravel + Go
"기능을 빠르게 구현하고, MSP는 Go로 해결한다"
Spring으로 개별 기능을 일일이 구현하고 MSP에서 이득을 취하는 것보다, Laravel 생태계로 기능들을 빠르게 완성하고 MSP를 Go로 직접 구현하는 것이 더 실용적입니다.
선택 이유:
- 초기 속도가 생명: SaaS 스타트업은 빠른 시장 진입이 핵심
- MSP는 나중에: 대부분의 SaaS는 초기에 MSP 수준의 확장이 필요 없음
- Go의 유연성: 필요한 MSP 기능만 Go로 가볍게 구현 가능
- 비용 효율: Spring 전문가(12주 학습) vs Laravel 개발자(2주 학습)
개발 시간 비교 (동일 기능 구현):
Laravel + Go:
├── 인증/권한: 2h (Spatie Permission)
├── Admin Panel: 4h (Filament)
├── 멀티테넌시: 8h (Stancl/Tenancy)
├── 실시간 처리: 16h (Go WebSocket)
└── 총: ~30h
Spring + Go:
├── 인증/권한: 16h (직접 구현)
├── Admin Panel: 40h (직접 구현)
├── 멀티테넌시: 40h (직접 구현)
├── 실시간 처리: 12h (Go WebSocket)
└── 총: ~108h
Phase별 MSP 전략
| Phase | 트래픽 | MSP 접근 |
|---|---|---|
| Phase 1 | < 100K/일 | MSP 불필요 (Laravel 모놀리스) |
| Phase 2 | 100K-1M/일 | Go API Gateway + 기본 로드밸런싱 |
| Phase 3 | > 1M/일 | Kubernetes + Service Mesh (Istio/Linkerd) |
핵심: Phase 1-2에서는 Spring Cloud의 MSP 기능이 과잉 스펙입니다. 필요한 시점에 Go나 클라우드 네이티브 도구로 구성하면 됩니다.
기술 스택 비교 분석
종합 평가 매트릭스
| 항목 | Laravel | Spring | .NET | Django | Rails | Express | Laravel + Go |
|---|---|---|---|---|---|---|---|
| 개발 생산성 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 성능 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 확장성 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 생태계 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 학습곡선 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 유지보수 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 엔터프라이즈 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 종합 점수 | 29/35 | 30/35 | 30/35 | 25/35 | 24/35 | 27/35 | 33/35 |
- 개발 속도: Laravel의 최고 생산성 유지
- 성능: Go로 병목 구간 해결
- 확장성: 마이크로서비스로 점진적 확장
- 리스크 분산: 단일 기술 의존도 감소
학습 곡선 비교
쉬움 ← ─────────────────────────────────── → 어려움
Rails ─── Laravel ─── Django ─── Express ─── .NET ─── Spring
1주 2주 2주 2주 4주 12주
Laravel은 2주 만에 프로덕션 수준의 애플리케이션을 만들 수 있습니다.
Laravel의 핵심 강점
1. Eloquent ORM
직관적이고 표현력 있는 ORM:
// 복잡한 쿼리도 간결하게
$users = User::where('tenant_id', $tenantId)
->with(['organization', 'workspace'])
->whereHas('permissions', fn($q) =>
$q->where('level', '<=', 3)
)
->latest()
->paginate(15);
2. 풍부한 패키지 생태계
| 패키지 | 용도 | GitHub Stars |
|---|---|---|
| Spatie 시리즈 | 권한, 미디어, 설정 등 | 50,000+ |
| Filament | Admin Panel | 15,000+ |
| Stancl/Tenancy | 멀티테넌시 | 3,000+ |
| Laravel Horizon | 큐 모니터링 | 공식 |
| Laravel Sanctum | API 인증 | 공식 |
3. 멀티테넌시 구현 용이성
Stancl/Tenancy와 PostgreSQL RLS 조합으로 데이터베이스 레벨 격리:
// 테넌트 자동 식별
tenancy()->initialize($tenant);
// 이후 모든 쿼리에 자동으로 tenant_id 필터 적용
$users = User::all(); // WHERE tenant_id = 현재_테넌트
4. Filament Admin Panel
권한 시스템 (Level 0~6, ADR-058)에 최적화된 Admin Panel:
// 권한 레벨별 리소스 자동 필터링
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->visibleTo(auth()->user());
}