왜 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());
}
성능과 확장성
성능 벤치마크
테스트 환경: 8 Core, 32GB RAM, PostgreSQL
부하: 10,000 동시 접속
단순 API 응답 (req/s):
Laravel : 8,000 ████████
Django : 6,000 ██████
Rails : 4,000 ████
복잡한 비즈니스 로직 (req/s):
Laravel : 2,500 █████
Django : 2,000 ████
Rails : 1,500 ███
Go 마이크로서비스
Laravel만으로 충분하지 않은 영역이 있습니다. Go는 이를 완벽히 보완합니다.
역할 분담
| 영역 | Laravel 담당 | Go 담당 |
|---|---|---|
| 프론트엔드 | ✅ Blade, Livewire, Inertia | - |
| 인증/권한 | ✅ 권한 분류 (Level 0~6) 관리 | - |
| CRUD API | ✅ RESTful API | - |
| 비즈니스 로직 | ✅ 복잡한 워크플로우 | - |
| 실시간 처리 | - | ✅ WebSocket |
| 대용량 배치 | - | ✅ 배치 처리 |
| 파일 처리 | - | ✅ 이미지/동영상 |
| 메트릭/모니터링 | - | ✅ Prometheus |
| 고성능 API | - | ✅ gRPC |
하이브리드 아키텍처
┌─────────────────────────────────────────┐
│ Nginx Load Balancer │
└────────────┬───────────┬────────────────┘
↓ ↓
┌────────────┐ ┌────────────┐
│ Laravel │ │ Go │
│ Frontend │ │ Services │
│ & API │ │ │
└─────┬──────┘ └──────┬─────┘
↓ ↓
┌────────────────────────────┐
│ PostgreSQL + RLS │
└────────────────────────────┘
성능 벤치마크
테스트 환경: 8 Core, 32GB RAM, 10,000 동시 접속
단순 API 응답 (req/s):
Go : 150,000 ████████████████████████████████
Express : 30,000 ████████
Laravel : 8,000 ██
Laravel + Go (하이브리드):
- API Gateway (Laravel): 2,500 req/s
- 고성능 서비스 (Go): 50,000 req/s
- 실제 처리량: 15,000-20,000 req/s ← 충분!
확장 전략: 점진적 도입
Phase 1 (< 100K 일일 사용자):
└── Laravel 모놀리스
• 빠른 MVP 개발
• 단일 배포 단위
Phase 2 (100K - 1M):
├── Laravel: CRUD, 인증, 비즈니스 로직
└── Go: 실시간 처리, 대용량 배치
• 병목 부분만 Go로 분리
• Read Replica 추가
Phase 3 (> 1M):
└── 완전한 마이크로서비스
• Kubernetes 오토스케일링
• PostgreSQL 샤딩
"Start with Laravel, Scale with Go"
90%의 요청은 Laravel로 충분합니다. 10%의 고성능 요구만 Go가 처리합니다.
트래픽 규모별 적합도
| 트래픽 규모 | Laravel | Spring | .NET | Django | Rails |
|---|---|---|---|---|---|
| < 1K/일 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 1K-10K/일 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 10K-100K/일 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 100K-1M/일 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
Multi-SaaS Kit은 1인 개발자~중소 개발사를 타겟으로 합니다. 대부분의 초기 SaaS는 10K-100K/일 트래픽 범위에서 시작하며, Laravel은 이 범위에서 최고의 비용 대비 효과를 제공합니다.
클라이언트 기술 스택
서버(Laravel + Go)와 함께 모든 플랫폼을 커버하는 클라이언트 기술 스택입니다.
Flutter - 모바일 앱
단일 코드베이스로 iOS와 Android를 동시에 개발합니다.
| 항목 | Flutter | React Native |
|---|---|---|
| 성능 | 네이티브 수준 | 브릿지 오버헤드 |
| 개발 속도 | Hot Reload | Hot Reload |
| UI 일관성 | 완벽 동일 | 플랫폼별 차이 |
| 앱 크기 | 5-15MB | 10-20MB |
| 지원 | Google 공식 | Meta 지원 |
장점:
- ✅ 한 번의 개발로 iOS/Android 동시 지원
- ✅ 네이티브 수준 성능 (Dart 컴파일)
- ✅ Hot Reload로 빠른 개발
- ✅ Material Design + Cupertino 위젯 기본 제공
적합한 경우:
- 빠른 MVP 개발과 시장 진입
- 일관된 UI/UX가 중요한 서비스
- 중소규모 개발팀
Tauri - 데스크탑 앱
Electron의 90% 크기 감소, Rust 기반 보안성.
| 항목 | Tauri | Electron |
|---|---|---|
| 번들 크기 | ~10MB | 50-150MB |
| 메모리 사용 | 30-50MB | 200-500MB |
| 보안 | Rust (메모리 안전) | JavaScript |
| 성능 | 네이티브 | 브라우저 엔진 |
| 웹 기술 활용 | ✅ 가능 | ✅ 가능 |
장점:
- ✅ 초경량 번들 (Electron 대비 90% 감소)
- ✅ 낮은 메모리 사용량
- ✅ Rust 기반 보안성
- ✅ 기존 웹 프론트엔드 재사용 가능
적합한 경우:
- 리소스 제약이 있는 환경
- 보안이 중요한 엔터프라이즈 앱
- 기존 웹 애플리케이션의 데스크탑 버전
통합 아키텍처
Laravel + Go API
↓
REST / GraphQL / WebSocket
↓
┌────────────┼────────────┐
↓ ↓ ↓
┌────────┐ ┌────────┐ ┌────────┐
│ 웹 앱 │ │Flutter │ │ Tauri │
│ (SPA) │ │(모바일) │ │(데스크탑)│
│Vue/React│ │iOS/Andr│ │Win/Mac │
└────────┘ └────────┘ └────────┘
API 우선 설계:
- Laravel이 모든 비즈니스 로직 처리
- 클라이언트는 순수 프레젠테이션 레이어
- JWT 기반 통합 인증
- 실시간 업데이트는 WebSocket (Go 서비스)
비용 효율성
초기 개발 비용 (6개월 프로젝트 기준)
| 스택 | 개발자 수 | 개발 기간 | 총 비용 |
|---|---|---|---|
| Laravel | 3명 | 4개월 | $100K |
| Spring | 5명 | 6개월 | $300K |
| .NET | 4명 | 5개월 | $183K |
| Django | 3명 | 4개월 | $95K |
| Rails | 3명 | 3.5개월 | $92K |
호스팅 접근성
| 호스팅 유형 | Laravel | Django | Rails | Node.js |
|---|---|---|---|---|
| 공유 호스팅 | ✅ 가능 | ❌ 어려움 | ❌ 어려움 | ❌ 어려움 |
| VPS | ✅ 최적 | ✅ 필요 | ✅ 필요 | ✅ 필요 |
| 클라우드 | ✅ 지원 | ✅ 지원 | ✅ 지원 | ✅ 지원 |
| 월 최소 비용 | $5 | $10 | $10 | $10 |
PHP의 현대적 발전
PHP 8.x 주요 기능
Laravel은 최신 PHP 기능을 적극 활용합니다:
// Constructor Property Promotion
public function __construct(
public readonly string $name,
public readonly int $permissionLevel,
) {}
// Named Arguments
User::create(
name: '홍길동',
email: 'hong@example.com',
permissionLevel: 6,
);
// Match Expression
$levelName = match($level) {
0 => 'Platform Admin',
1 => 'SaaS Admin',
2 => 'Tenant Admin',
default => 'Member',
};
PHP 성능 개선
| PHP 버전 | 성능 (상대값) | 메모리 사용량 |
|---|---|---|
| PHP 7.4 | 100% | 100% |
| PHP 8.0 | 120% | 95% |
| PHP 8.2 | 140% | 90% |
| PHP 8.3 | 150% | 88% |
결론: Laravel + Go + Flutter + Tauri
4대 기술 스택의 시너지
| 요구사항 | 솔루션 |
|---|---|
| 빠른 MVP 개발 | Laravel의 최고 생산성 |
| 고성능 처리 | Go 마이크로서비스 |
| 멀티테넌시 | Stancl/Tenancy + PostgreSQL RLS |
| Level 0~6 계층 권한 | Filament + Spatie Permission |
| 모바일 앱 | Flutter (iOS/Android) |
| 데스크탑 앱 | Tauri (Win/Mac/Linux) |
| 비용 효율 | 저렴한 호스팅, 적은 개발 인력 |
핵심 메시지
"Laravel + Go + Flutter + Tauri = 완전한 풀스택 생태계"
- Laravel: 웹 애플리케이션의 뼈대
- Go: 고성능이 필요한 부분의 가속기
- Flutter: 모바일 시장 진출의 열쇠
- Tauri: 데스크탑 시장 확장의 도구
"Start with Laravel, Scale with Go, Reach everywhere with Flutter & Tauri"
왜 이 조합인가?
- 점진적 도입: 초기에는 Laravel만으로 시작, 필요시 Go/Flutter/Tauri 추가
- 비용 최적화: 각 플랫폼에 최적화된 도구로 개발 비용 절감
- 위험 분산: 단일 기술 의존도 감소
- 미래 대비: 웹 → 모바일 → 데스크탑으로 자연스러운 확장
관련 문서
- 왜 Filament인가? - Admin Panel 선택 이유
- 아키텍처 개요 - 전체 시스템 구조
- 멀티테넌시 - 테넌트 격리 방식
- 시스템 요구사항 - 설치 환경