feat: [google-cloud] Google Cloud 메뉴 섹션 추가

- Workspace 정책: 계정관리, 2단계인증, 감사로그, 데이터보존
- Workspace 요금: 4티어 비교, 기능비교, 예상비용, 인상히스토리
- Cloud API 요금: Gemini 모델 단가, 추가기능, Storage, 비용시뮬레이션
- 컨트롤러 3개 + 뷰 3개 + 라우트 그룹 추가
This commit is contained in:
김보곤
2026-03-02 14:07:17 +09:00
parent f051dadabb
commit c3284a6dca
7 changed files with 1066 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\GoogleCloud;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class CloudApiPricingController extends Controller
{
public function index(Request $request): View|Response
{
if ($request->header('HX-Request')) {
return response('', 200)->header('HX-Redirect', route('google-cloud.cloud-api-pricing.index'));
}
return view('google-cloud.cloud-api-pricing.index');
}
public function download(): BinaryFileResponse
{
$path = public_path('downloads/google-cloud-api-pricing.pptx');
abort_unless(file_exists($path), 404, 'PPTX 파일을 찾을 수 없습니다.');
return response()->download($path, 'Google_Cloud_API_요금표.pptx');
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\GoogleCloud;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;
class WorkspacePolicyController extends Controller
{
public function index(Request $request): View|Response
{
if ($request->header('HX-Request')) {
return response('', 200)->header('HX-Redirect', route('google-cloud.workspace-policy.index'));
}
return view('google-cloud.workspace-policy.index');
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\GoogleCloud;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class WorkspacePricingController extends Controller
{
public function index(Request $request): View|Response
{
if ($request->header('HX-Request')) {
return response('', 200)->header('HX-Redirect', route('google-cloud.workspace-pricing.index'));
}
return view('google-cloud.workspace-pricing.index');
}
public function download(): BinaryFileResponse
{
$path = public_path('downloads/google-workspace-pricing.pptx');
abort_unless(file_exists($path), 404, 'PPTX 파일을 찾을 수 없습니다.');
return response()->download($path, 'Google_Workspace_요금정책.pptx');
}
}

View File

@@ -0,0 +1,337 @@
@extends('layouts.app')
@section('title', 'Google Cloud API 요금')
@push('styles')
<style>
.gca-section-card { background: #fff; border-radius: 8px; box-shadow: 0 1px 2px rgba(0,0,0,.05); border: 1px solid #e5e7eb; overflow: hidden; }
.gca-section-header { padding: 12px 20px; background: #f9fafb; border-bottom: 1px solid #e5e7eb; }
.gca-section-header h2 { font-size: 15px; font-weight: 600; color: #1f2937; }
.gca-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; border-radius: 9999px; font-size: 12px; font-weight: 600; }
.gca-badge-blue { background: #dbeafe; color: #1e40af; }
.gca-badge-green { background: #dcfce7; color: #166534; }
.gca-badge-amber { background: #fef3c7; color: #92400e; }
.gca-badge-purple { background: #f3e8ff; color: #6b21a8; }
.gca-badge-red { background: #fee2e2; color: #991b1b; }
.gca-badge-gray { background: #f3f4f6; color: #374151; }
.gca-info-box { padding: 12px 16px; border-radius: 8px; font-size: 13px; }
.gca-bar { height: 20px; border-radius: 4px; transition: width 0.6s ease; min-width: 32px; display: flex; align-items: center; justify-content: flex-end; padding: 0 8px; font-size: 10px; font-weight: 600; color: #fff; }
.gca-bar-input { background: linear-gradient(90deg, #2563eb, #3b82f6); }
.gca-bar-output { background: linear-gradient(90deg, #dc2626, #ef4444); }
.highlight-row { background: #ecfdf5; }
.highlight-row td { font-weight: 600; }
</style>
@endpush
@section('content')
<div class="space-y-6">
{{-- 페이지 헤더 --}}
<div class="flex items-center justify-between">
<div>
<h1 class="text-2xl font-bold text-gray-900">Google Cloud API 요금</h1>
<p class="mt-1 text-sm text-gray-500">Vertex AI, Gemini API, Cloud Storage 요금표</p>
</div>
<div class="flex items-center gap-3">
<span class="text-xs text-gray-400">()코드브릿지엑스 | 2026.03</span>
<a href="{{ route('google-cloud.cloud-api-pricing.download') }}"
class="inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium text-white bg-indigo-600 rounded-lg hover:bg-indigo-700 transition-colors"
title="상세 PPTX 다운로드">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
PPTX
</a>
</div>
</div>
{{-- 요약 카드 --}}
<div class="flex gap-4" style="flex-wrap: wrap;">
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-5" style="flex: 1 1 220px; max-width: 320px;">
<div class="flex items-center gap-2 text-sm text-gray-500">
<svg class="w-4 h-4 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg>
최저 단가 모델
</div>
<div class="text-lg font-bold text-gray-900 mt-1">Gemini 2.5 Flash-Lite</div>
<div class="text-sm text-blue-600 mt-0.5">입력 $0.10 / 출력 $0.40 (1M 토큰)</div>
</div>
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-5" style="flex: 1 1 220px; max-width: 320px;">
<div class="flex items-center gap-2 text-sm text-gray-500">
<svg class="w-4 h-4 text-purple-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"/></svg>
최고 성능 모델
</div>
<div class="text-lg font-bold text-gray-900 mt-1">Gemini 2.5 Pro</div>
<div class="text-sm text-purple-600 mt-0.5">입력 $1.25 / 출력 $10.00 (1M 토큰)</div>
</div>
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-5" style="flex: 1 1 220px; max-width: 320px;">
<div class="flex items-center gap-2 text-sm text-gray-500">
<svg class="w-4 h-4 text-emerald-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
배치 할인
</div>
<div class="text-lg font-bold text-emerald-600 mt-1">50% 할인</div>
<div class="text-sm text-gray-500 mt-0.5">Batch / Flex 모드 사용 </div>
</div>
</div>
{{-- ─── 섹션 1: Vertex AI Gemini 모델 요금 ─── --}}
<div class="gca-section-card">
<div class="gca-section-header">
<h2>1. Vertex AI Gemini 모델 요금 (1M 토큰 기준)</h2>
</div>
<div class="p-5">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">모델</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">입력 (1M)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">출력 (1M)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">배치 입력</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">배치 출력</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">특징</th>
</tr>
</thead>
<tbody>
@php
$models = [
['name' => 'Gemini 2.5 Pro', 'badge' => 'gca-badge-purple', 'input' => 1.25, 'output' => 10.00, 'bInput' => 0.625, 'bOutput' => 5.00, 'note' => '최고 성능, 복잡한 추론'],
['name' => 'Gemini 2.5 Flash', 'badge' => 'gca-badge-blue', 'input' => 0.30, 'output' => 2.50, 'bInput' => 0.15, 'bOutput' => 1.25, 'note' => '속도+성능 밸런스'],
['name' => 'Gemini 2.5 Flash-Lite', 'badge' => 'gca-badge-green', 'input' => 0.10, 'output' => 0.40, 'bInput' => 0.05, 'bOutput' => 0.20, 'note' => '최저가, 경량 작업'],
['name' => 'Gemini 2.0 Flash', 'badge' => 'gca-badge-blue', 'input' => 0.15, 'output' => 0.60, 'bInput' => 0.075, 'bOutput' => 0.30, 'note' => '이전 세대 Flash'],
['name' => 'Gemini 2.0 Flash-Lite', 'badge' => 'gca-badge-gray', 'input' => 0.075, 'output' => 0.30, 'bInput' => 0.038, 'bOutput' => 0.15, 'note' => '이전 세대 최저가'],
];
@endphp
@foreach($models as $idx => $model)
<tr class="border-b border-gray-100 hover:bg-gray-50 {{ $idx === 1 ? 'highlight-row' : '' }}">
<td class="py-2.5 px-3">
<span class="font-medium text-gray-800">{{ $model['name'] }}</span>
</td>
<td class="py-2.5 px-3 text-right font-semibold text-blue-600">${{ number_format($model['input'], 2) }}</td>
<td class="py-2.5 px-3 text-right font-semibold text-red-500">${{ number_format($model['output'], 2) }}</td>
<td class="py-2.5 px-3 text-right text-gray-500">${{ number_format($model['bInput'], 3) }}</td>
<td class="py-2.5 px-3 text-right text-gray-500">${{ number_format($model['bOutput'], 2) }}</td>
<td class="py-2.5 px-3 text-gray-600 text-xs">{{ $model['note'] }}</td>
</tr>
@endforeach
</tbody>
</table>
{{-- 시각적 차트 --}}
<div class="mt-5 pt-5 border-t border-gray-200">
<div class="text-sm font-medium text-gray-700 mb-3">출력 단가 비교 (1M 토큰, USD)</div>
<div class="space-y-3">
@php
$maxOutput = 10.0;
$barModels = [
['name' => '2.5 Pro', 'output' => 10.00],
['name' => '2.5 Flash', 'output' => 2.50],
['name' => '2.5 Flash-Lite', 'output' => 0.40],
['name' => '2.0 Flash', 'output' => 0.60],
['name' => '2.0 Flash-Lite', 'output' => 0.30],
];
@endphp
@foreach($barModels as $bm)
<div class="flex items-center gap-3">
<div class="shrink-0 text-xs text-gray-500 text-right" style="width: 90px;">{{ $bm['name'] }}</div>
<div style="flex: 1;">
<div class="gca-bar gca-bar-output" style="width: {{ max(($bm['output'] / $maxOutput) * 100, 5) }}%;">
${{ number_format($bm['output'], 2) }}
</div>
</div>
</div>
@endforeach
</div>
</div>
<div class="mt-4 gca-info-box bg-emerald-50 border border-emerald-200 text-emerald-800">
<strong>배치(Batch/Flex) 할인:</strong> 실시간 응답이 불필요한 대량 처리 작업은 Batch 모드를 사용하면 <strong>표준 대비 50% 할인</strong> 가격이 적용됩니다. 처리 시간은 24시간 완료 보장.
</div>
</div>
</div>
{{-- ─── 섹션 2: 추가 기능 요금 ─── --}}
<div class="gca-section-card">
<div class="gca-section-header">
<h2>2. 추가 기능 요금</h2>
</div>
<div class="p-5 space-y-4">
<div>
<div class="text-sm font-medium text-gray-700 mb-2">Google Search Grounding</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 30%;">항목</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">무료 한도</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">초과 요금</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">비고</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Gemini API (AI Studio)</td>
<td class="py-2.5 px-3 text-emerald-600 font-semibold">무료 (무제한)</td>
<td class="py-2.5 px-3 text-gray-400">-</td>
<td class="py-2.5 px-3 text-gray-600">Dynamic Retrieval 임계값 적용</td>
</tr>
<tr>
<td class="py-2.5 px-3 font-medium text-gray-800">Vertex AI</td>
<td class="py-2.5 px-3 text-blue-600 font-semibold">5,000/ 무료</td>
<td class="py-2.5 px-3 text-amber-600">$35 / 1,000</td>
<td class="py-2.5 px-3 text-gray-600">grounding 포함 요청만 카운트</td>
</tr>
</tbody>
</table>
</div>
<div>
<div class="text-sm font-medium text-gray-700 mb-2">Imagen 4 (이미지 생성)</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 30%;">모델</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">가격</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">비고</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Imagen 4 (Standard)</td>
<td class="py-2.5 px-3 text-gray-700">$0.03 / 이미지</td>
<td class="py-2.5 px-3 text-gray-600">1024x1024 기준</td>
</tr>
<tr>
<td class="py-2.5 px-3 font-medium text-gray-800">Imagen 4 Ultra</td>
<td class="py-2.5 px-3 text-gray-700">$0.06 / 이미지</td>
<td class="py-2.5 px-3 text-gray-600">고해상도</td>
</tr>
</tbody>
</table>
</div>
<div class="gca-info-box bg-blue-50 border border-blue-200 text-blue-800">
<strong>에러 응답 무료:</strong> 4xx/5xx 응답(잘못된 요청, 서버 오류) 과금되지 않습니다. 성공적으로 생성된 응답에만 요금이 부과됩니다.
</div>
</div>
</div>
{{-- ─── 섹션 3: Cloud Storage 요금 ─── --}}
<div class="gca-section-card">
<div class="gca-section-header">
<h2>3. Cloud Storage 요금</h2>
</div>
<div class="p-5 space-y-4">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">스토리지 클래스</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">저장 비용 (GB/)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">Class A (1K건)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">Class B (1K건)</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">적합한 용도</th>
</tr>
</thead>
<tbody>
@php
$storageClasses = [
['name' => 'Standard', 'badge' => 'gca-badge-blue', 'storage' => '$0.020', 'classA' => '$0.005', 'classB' => '$0.0004', 'use' => '자주 접근하는 데이터'],
['name' => 'Nearline', 'badge' => 'gca-badge-green', 'storage' => '$0.010', 'classA' => '$0.01', 'classB' => '$0.001', 'use' => '30일+ 미접근 데이터'],
['name' => 'Coldline', 'badge' => 'gca-badge-amber', 'storage' => '$0.004', 'classA' => '$0.01', 'classB' => '$0.005', 'use' => '90일+ 미접근 데이터'],
['name' => 'Archive', 'badge' => 'gca-badge-gray', 'storage' => '$0.0012', 'classA' => '$0.05', 'classB' => '$0.05', 'use' => '365일+ 장기 보관'],
];
@endphp
@foreach($storageClasses as $sc)
<tr class="border-b border-gray-100 hover:bg-gray-50">
<td class="py-2.5 px-3">
<span class="gca-badge {{ $sc['badge'] }}">{{ $sc['name'] }}</span>
</td>
<td class="py-2.5 px-3 text-right font-semibold text-gray-800">{{ $sc['storage'] }}</td>
<td class="py-2.5 px-3 text-right text-gray-600">{{ $sc['classA'] }}</td>
<td class="py-2.5 px-3 text-right text-gray-600">{{ $sc['classB'] }}</td>
<td class="py-2.5 px-3 text-gray-600 text-xs">{{ $sc['use'] }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="p-4 bg-emerald-50 border border-emerald-200 rounded-lg">
<div class="text-sm font-semibold text-emerald-800 mb-2">Always Free 무료 티어</div>
<div class="flex gap-4" style="flex-wrap: wrap;">
<div class="text-sm text-emerald-700" style="flex: 1 1 180px;">
<div class="font-medium">저장 공간</div>
<div>5GB Standard (US 리전)</div>
</div>
<div class="text-sm text-emerald-700" style="flex: 1 1 180px;">
<div class="font-medium">Class A 작업</div>
<div>5,000 / </div>
</div>
<div class="text-sm text-emerald-700" style="flex: 1 1 180px;">
<div class="font-medium">Class B 작업</div>
<div>50,000 / </div>
</div>
<div class="text-sm text-emerald-700" style="flex: 1 1 180px;">
<div class="font-medium">네트워크 이그레스</div>
<div>1GB / </div>
</div>
</div>
</div>
</div>
</div>
{{-- ─── 섹션 4: 비용 시뮬레이션 ─── --}}
<div class="gca-section-card">
<div class="gca-section-header">
<h2>4. SAM 프로젝트 비용 시뮬레이션</h2>
</div>
<div class="p-5">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">시나리오</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 22%;">사용량</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">모델</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;"> 예상 비용</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">비고</th>
</tr>
</thead>
<tbody>
@php
$scenarios = [
['name' => '소규모', 'desc' => '일 100건, 입력 50K/출력 5K', 'model' => '2.5 Flash', 'cost' => 5, 'note' => 'AI 챗봇 PoC, 내부 도구'],
['name' => '중규모', 'desc' => '일 1,000건, 입력 100K/출력 10K', 'model' => '2.5 Flash', 'cost' => 30, 'note' => '고객 문의 자동 응답'],
['name' => '대규모', 'desc' => '일 10,000건, 입력 200K/출력 20K', 'model' => '2.5 Flash', 'cost' => 250, 'note' => '대량 문서 분석, 데이터 추출'],
['name' => '고급 분석', 'desc' => '일 500건, 입력 500K/출력 50K', 'model' => '2.5 Pro', 'cost' => 350, 'note' => '복잡한 추론, 코드 생성'],
];
@endphp
@foreach($scenarios as $sc)
<tr class="border-b border-gray-100 hover:bg-gray-50">
<td class="py-2.5 px-3 font-medium text-gray-800">{{ $sc['name'] }}</td>
<td class="py-2.5 px-3 text-gray-600 text-xs">{{ $sc['desc'] }}</td>
<td class="py-2.5 px-3 text-center"><span class="gca-badge gca-badge-blue">{{ $sc['model'] }}</span></td>
<td class="py-2.5 px-3 text-right font-semibold {{ $sc['cost'] > 100 ? 'text-amber-600' : 'text-emerald-600' }}">~${{ number_format($sc['cost']) }}</td>
<td class="py-2.5 px-3 text-gray-600 text-xs">{{ $sc['note'] }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="flex gap-4 mt-4" style="flex-wrap: wrap;">
<div class="p-4 bg-blue-50 border border-blue-200 rounded-lg" style="flex: 1 1 280px;">
<div class="text-sm text-blue-700">SAM 현재 사용 패턴 (추정)</div>
<div class="text-2xl font-bold text-blue-700 mt-1">~$5~30/</div>
<div class="text-sm text-blue-600 mt-1">~중규모 수준 | Gemini 2.5 Flash 기준</div>
</div>
<div class="p-4 bg-amber-50 border border-amber-200 rounded-lg" style="flex: 1 1 280px;">
<div class="text-sm text-amber-700">비용 절감 </div>
<div class="text-lg font-bold text-amber-700 mt-1">Batch 모드 + Flash-Lite 조합</div>
<div class="text-sm text-amber-600 mt-1">실시간 불필요 작업은 배치로 50% 절감</div>
</div>
</div>
<div class="mt-4 gca-info-box bg-gray-50 border border-gray-200 text-gray-700">
<strong>참고:</strong> 시뮬레이션은 단순 계산 기준이며, 실제 비용은 프롬프트 길이, 응답 길이, 캐시 히트율, Context Caching 사용 여부에 따라 달라집니다.
<a href="https://cloud.google.com/vertex-ai/generative-ai/pricing" target="_blank" class="underline text-blue-600 ml-1">공식 가격 페이지</a>에서 최신 정보를 확인하세요.
</div>
</div>
</div>
<p class="text-xs text-gray-400 text-center"> Google Cloud 공식 가격 페이지 기준 (2026.03). 리전/약정/볼륨 할인에 따라 실제 비용이 달라질 있습니다.</p>
</div>
@endsection

View File

@@ -0,0 +1,343 @@
@extends('layouts.app')
@section('title', 'Google Workspace 운영 정책')
@push('styles')
<style>
.gc-section-card { background: #fff; border-radius: 8px; box-shadow: 0 1px 2px rgba(0,0,0,.05); border: 1px solid #e5e7eb; overflow: hidden; }
.gc-section-header { padding: 12px 20px; background: #f9fafb; border-bottom: 1px solid #e5e7eb; }
.gc-section-header h2 { font-size: 15px; font-weight: 600; color: #1f2937; }
.gc-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; border-radius: 9999px; font-size: 12px; font-weight: 600; }
.gc-badge-blue { background: #dbeafe; color: #1e40af; }
.gc-badge-green { background: #dcfce7; color: #166534; }
.gc-badge-amber { background: #fef3c7; color: #92400e; }
.gc-badge-red { background: #fee2e2; color: #991b1b; }
.gc-info-box { padding: 12px 16px; border-radius: 8px; font-size: 13px; }
</style>
@endpush
@section('content')
<div class="space-y-6">
{{-- 페이지 헤더 --}}
<div>
<h1 class="text-2xl font-bold text-gray-900">Google Workspace 운영 정책</h1>
<p class="mt-1 text-sm text-gray-500">@codebridge-x.com 단체 계정 관리 가이드</p>
</div>
{{-- 요약 카드 --}}
<div class="flex gap-4" style="flex-wrap: wrap;">
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-5" style="flex: 1 1 220px; max-width: 320px;">
<div class="flex items-center gap-2 text-sm text-gray-500">
<svg class="w-4 h-4 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9"/></svg>
도메인
</div>
<div class="text-lg font-bold text-gray-900 mt-1">@codebridge-x.com</div>
<div class="text-sm text-gray-500 mt-0.5">Google Workspace 단체 계정</div>
</div>
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-5" style="flex: 1 1 220px; max-width: 320px;">
<div class="flex items-center gap-2 text-sm text-gray-500">
<svg class="w-4 h-4 text-emerald-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/></svg>
보안
</div>
<div class="text-lg font-bold text-gray-900 mt-1">2단계 인증 필수</div>
<div class="text-sm text-emerald-600 mt-0.5">Super Admin 의무화 (2024~)</div>
</div>
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-5" style="flex: 1 1 220px; max-width: 320px;">
<div class="flex items-center gap-2 text-sm text-gray-500">
<svg class="w-4 h-4 text-amber-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4"/></svg>
관리 콘솔
</div>
<div class="text-lg font-bold text-gray-900 mt-1">admin.google.com</div>
<div class="text-sm text-gray-500 mt-0.5">사용자/보안/감사 통합 관리</div>
</div>
</div>
{{-- ─── 섹션 1: 계정 관리 기본 ─── --}}
<div class="gc-section-card">
<div class="gc-section-header">
<h2>1. 계정 관리 기본</h2>
</div>
<div class="p-5 space-y-4">
<div class="gc-info-box bg-blue-50 border border-blue-200">
<div class="font-semibold text-blue-800 mb-1">관리 콘솔 접속</div>
<div class="text-blue-700">
<a href="https://admin.google.com" target="_blank" class="underline font-medium">admin.google.com</a>
Super Admin 계정으로 로그인하여 모든 설정을 관리합니다.
</div>
</div>
<div>
<div class="text-sm font-medium text-gray-700 mb-2">사용자 관리 절차</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">작업</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 30%;">경로</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">설명</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">사용자 추가</td>
<td class="py-2.5 px-3 text-gray-600">Directory > Users > Add new user</td>
<td class="py-2.5 px-3 text-gray-600">이름, 이메일(@codebridge-x.com), 임시 비밀번호 설정</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">사용자 삭제</td>
<td class="py-2.5 px-3 text-gray-600">Directory > Users > 사용자 선택 > Delete</td>
<td class="py-2.5 px-3 text-gray-600">삭제 데이터 이전(Transfer) 권장, 20일간 복구 가능</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">사용자 정지</td>
<td class="py-2.5 px-3 text-gray-600">Directory > Users > Suspend user</td>
<td class="py-2.5 px-3 text-gray-600">계정 일시 정지 (데이터 보존, 로그인 차단)</td>
</tr>
<tr>
<td class="py-2.5 px-3 font-medium text-gray-800">비밀번호 초기화</td>
<td class="py-2.5 px-3 text-gray-600">Directory > Users > Reset password</td>
<td class="py-2.5 px-3 text-gray-600">임시 비밀번호 발급, 다음 로그인 변경 강제</td>
</tr>
</tbody>
</table>
</div>
<div>
<div class="text-sm font-medium text-gray-700 mb-2">관리자 권한 역할</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">역할</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 30%;">권한 범위</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">권장 대상</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3">
<span class="gc-badge gc-badge-red">Super Admin</span>
</td>
<td class="py-2.5 px-3 text-gray-600">모든 설정, 결제, 사용자 관리</td>
<td class="py-2.5 px-3 text-gray-600">대표 / IT 관리자 (최소 1~2)</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3">
<span class="gc-badge gc-badge-amber">Groups Admin</span>
</td>
<td class="py-2.5 px-3 text-gray-600">그룹 생성/수정/삭제, 구성원 관리</td>
<td class="py-2.5 px-3 text-gray-600">팀장급</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3">
<span class="gc-badge gc-badge-blue">User Mgmt Admin</span>
</td>
<td class="py-2.5 px-3 text-gray-600">사용자 추가/수정/비밀번호 초기화</td>
<td class="py-2.5 px-3 text-gray-600">인사/총무 담당자</td>
</tr>
<tr>
<td class="py-2.5 px-3">
<span class="gc-badge gc-badge-green">Help Desk Admin</span>
</td>
<td class="py-2.5 px-3 text-gray-600">비밀번호 초기화, 사용자 조회</td>
<td class="py-2.5 px-3 text-gray-600">일반 지원 담당자</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{{-- ─── 섹션 2: 보안 정책 (2단계 인증) ─── --}}
<div class="gc-section-card">
<div class="gc-section-header">
<h2>2. 보안 정책 (2단계 인증)</h2>
</div>
<div class="p-5 space-y-4">
<div class="gc-info-box bg-red-50 border border-red-200">
<div class="font-semibold text-red-800">Super Admin 2SV 의무화 (2024~)</div>
<div class="text-red-700 mt-1">Google은 2024년부터 모든 Super Admin에 대해 2단계 인증(2SV) 의무화했습니다. 미설정 관리 콘솔 접근이 차단될 있습니다.</div>
</div>
<div>
<div class="text-sm font-medium text-gray-700 mb-2">2단계 인증 방법</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 22%;">인증 방법</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 12%;">보안 수준</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 30%;">설명</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">권장 대상</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">보안 (FIDO2)</td>
<td class="py-2.5 px-3 text-center"><span class="gc-badge gc-badge-green">최고</span></td>
<td class="py-2.5 px-3 text-gray-600">YubiKey 물리적 보안 사용</td>
<td class="py-2.5 px-3 text-gray-600">Super Admin 필수 권장</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Google Prompt</td>
<td class="py-2.5 px-3 text-center"><span class="gc-badge gc-badge-blue">높음</span></td>
<td class="py-2.5 px-3 text-gray-600">스마트폰에 푸시 알림으로 승인</td>
<td class="py-2.5 px-3 text-gray-600">일반 관리자</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Authenticator </td>
<td class="py-2.5 px-3 text-center"><span class="gc-badge gc-badge-blue">높음</span></td>
<td class="py-2.5 px-3 text-gray-600">TOTP 기반 6자리 코드 (30 갱신)</td>
<td class="py-2.5 px-3 text-gray-600"> 직원</td>
</tr>
<tr>
<td class="py-2.5 px-3 font-medium text-gray-800">SMS / 전화</td>
<td class="py-2.5 px-3 text-center"><span class="gc-badge gc-badge-amber">보통</span></td>
<td class="py-2.5 px-3 text-gray-600">문자 메시지 또는 전화 음성으로 코드 수신</td>
<td class="py-2.5 px-3 text-gray-600">최후 수단 (SIM 스왑 위험)</td>
</tr>
</tbody>
</table>
</div>
<div class="gc-info-box bg-gray-50 border border-gray-200">
<div class="font-semibold text-gray-700 mb-1">관리 콘솔 설정 경로</div>
<div class="text-gray-600">
<code class="bg-gray-200 px-1.5 py-0.5 rounded text-xs">Security > Authentication > 2-step verification</code>
<span class="ml-2"> 조직 전체 또는 OU(조직 단위) 강제 적용 가능</span>
</div>
</div>
</div>
</div>
{{-- ─── 섹션 3: 감사 로그 ─── --}}
<div class="gc-section-card">
<div class="gc-section-header">
<h2>3. 감사 로그</h2>
</div>
<div class="p-5">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">로그 유형</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 35%;">기록 내용</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">보존 기간</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">접근 경로</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Admin</td>
<td class="py-2.5 px-3 text-gray-600">관리 콘솔 설정 변경, 사용자/그룹 관리</td>
<td class="py-2.5 px-3 text-gray-600">6개월</td>
<td class="py-2.5 px-3 text-gray-600">Reporting > Audit > Admin</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Login</td>
<td class="py-2.5 px-3 text-gray-600">로그인 성공/실패, 의심스러운 시도, 2SV 사용</td>
<td class="py-2.5 px-3 text-gray-600">6개월</td>
<td class="py-2.5 px-3 text-gray-600">Reporting > Audit > Login</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Drive</td>
<td class="py-2.5 px-3 text-gray-600">파일 생성/수정/삭제/공유/다운로드</td>
<td class="py-2.5 px-3 text-gray-600">6개월</td>
<td class="py-2.5 px-3 text-gray-600">Reporting > Audit > Drive</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Gmail</td>
<td class="py-2.5 px-3 text-gray-600">메일 발신/수신 메타데이터 (내용 제외)</td>
<td class="py-2.5 px-3 text-gray-600">6개월</td>
<td class="py-2.5 px-3 text-gray-600">Reporting > Audit > Gmail</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Meet</td>
<td class="py-2.5 px-3 text-gray-600">화상회의 참여/종료, 녹화 시작/종료</td>
<td class="py-2.5 px-3 text-gray-600">6개월</td>
<td class="py-2.5 px-3 text-gray-600">Reporting > Audit > Meet</td>
</tr>
<tr>
<td class="py-2.5 px-3 font-medium text-gray-800">Groups</td>
<td class="py-2.5 px-3 text-gray-600">그룹 생성/삭제, 멤버 추가/제거, 설정 변경</td>
<td class="py-2.5 px-3 text-gray-600">6개월</td>
<td class="py-2.5 px-3 text-gray-600">Reporting > Audit > Groups</td>
</tr>
</tbody>
</table>
<div class="mt-4 gc-info-box bg-blue-50 border border-blue-200 text-blue-800">
<strong>참고:</strong> 감사 로그는 기본 6개월 보존됩니다. Google Vault(Plus 이상) 사용하면 보존 기간을 확장하고 법적 보존(Legal Hold) 설정할 있습니다.
</div>
</div>
</div>
{{-- ─── 섹션 4: 데이터 보존 정책 ─── --}}
<div class="gc-section-card">
<div class="gc-section-header">
<h2>4. 데이터 보존 정책</h2>
</div>
<div class="p-5 space-y-4">
<div>
<div class="text-sm font-medium text-gray-700 mb-2">Google Vault 지원 범위</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">서비스</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">보존 지원</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">eDiscovery</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">비고</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Gmail</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-gray-600">메일 본문 + 첨부파일</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Drive</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-gray-600">공유 드라이브 포함</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Chat</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-gray-600">DM + Space 메시지</td>
</tr>
<tr class="border-b border-gray-100">
<td class="py-2.5 px-3 font-medium text-gray-800">Meet 녹화</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-center text-gray-400">-</td>
<td class="py-2.5 px-3 text-gray-600">Drive에 저장된 녹화 파일</td>
</tr>
<tr>
<td class="py-2.5 px-3 font-medium text-gray-800">Groups</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-center text-emerald-600 font-semibold">O</td>
<td class="py-2.5 px-3 text-gray-600">그룹 게시물/메시지</td>
</tr>
</tbody>
</table>
</div>
<div class="flex gap-4" style="flex-wrap: wrap;">
<div class="p-4 bg-amber-50 border border-amber-200 rounded-lg" style="flex: 1 1 280px;">
<div class="text-sm font-semibold text-amber-800">보존 기간 설정</div>
<div class="text-sm text-amber-700 mt-1">1 ~ 36,500 ( 100) 설정 가능. 조직 단위(OU) 다른 보존 규칙 적용 가능.</div>
</div>
<div class="p-4 bg-gray-50 border border-gray-200 rounded-lg" style="flex: 1 1 280px;">
<div class="text-sm font-semibold text-gray-700">휴지통 복구 기간</div>
<div class="text-sm text-gray-600 mt-1">사용자 삭제 <strong>30</strong> 이내 휴지통에서 복구 가능. 이후 영구 삭제. Vault 보존 규칙이 있으면 영구 삭제 방지.</div>
</div>
</div>
<div class="gc-info-box bg-emerald-50 border border-emerald-200 text-emerald-800">
<strong>플랜 요구사항:</strong> Google Vault는 <span class="gc-badge gc-badge-blue">Business Plus</span> 이상 또는 별도 Vault 라이선스에 포함됩니다. Starter/Standard에서는 추가 구매 필요.
</div>
</div>
</div>
<p class="text-xs text-gray-400 text-center"> Google Workspace 관리자 도움말 기준. 정책 변경 admin.google.com에서 최신 정보를 확인하세요.</p>
</div>
@endsection

View File

@@ -0,0 +1,283 @@
@extends('layouts.app')
@section('title', 'Google Workspace 요금 정책')
@push('styles')
<style>
.gw-section-card { background: #fff; border-radius: 8px; box-shadow: 0 1px 2px rgba(0,0,0,.05); border: 1px solid #e5e7eb; overflow: hidden; }
.gw-section-header { padding: 12px 20px; background: #f9fafb; border-bottom: 1px solid #e5e7eb; }
.gw-section-header h2 { font-size: 15px; font-weight: 600; color: #1f2937; }
.gw-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; border-radius: 9999px; font-size: 12px; font-weight: 600; }
.gw-badge-blue { background: #dbeafe; color: #1e40af; }
.gw-badge-green { background: #dcfce7; color: #166534; }
.gw-badge-amber { background: #fef3c7; color: #92400e; }
.gw-badge-purple { background: #f3e8ff; color: #6b21a8; }
.gw-badge-gray { background: #f3f4f6; color: #374151; }
.gw-tier-card { border-radius: 8px; padding: 20px; border: 2px solid #e5e7eb; transition: border-color 0.2s; }
.gw-tier-card:hover { border-color: #3b82f6; }
.gw-tier-card.recommended { border-color: #10b981; background: #f0fdf4; }
.gw-info-box { padding: 12px 16px; border-radius: 8px; font-size: 13px; }
.gw-check { color: #10b981; }
.gw-cross { color: #ef4444; }
.highlight-row { background: #ecfdf5; }
.highlight-row td { font-weight: 600; }
</style>
@endpush
@section('content')
<div class="space-y-6">
{{-- 페이지 헤더 --}}
<div class="flex items-center justify-between">
<div>
<h1 class="text-2xl font-bold text-gray-900">Google Workspace 요금 정책</h1>
<p class="mt-1 text-sm text-gray-500">플랜별 비교 비용 분석 (2025.03.17 개정 기준)</p>
</div>
<div class="flex items-center gap-3">
<span class="text-xs text-gray-400">()코드브릿지엑스 | 2026.03</span>
<a href="{{ route('google-cloud.workspace-pricing.download') }}"
class="inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium text-white bg-indigo-600 rounded-lg hover:bg-indigo-700 transition-colors"
title="상세 PPTX 다운로드">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/></svg>
PPTX
</a>
</div>
</div>
{{-- ─── 섹션 1: 요금 티어 비교 ─── --}}
<div class="gw-section-card">
<div class="gw-section-header">
<h2>1. 요금 티어 비교 (2025.03.17 개정)</h2>
</div>
<div class="p-5">
<div class="flex gap-4" style="flex-wrap: wrap;">
{{-- Starter --}}
<div class="gw-tier-card" style="flex: 1 1 200px; max-width: 280px;">
<div class="text-center mb-3">
<span class="gw-badge gw-badge-gray">Business Starter</span>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-gray-900">$7</div>
<div class="text-xs text-gray-500">/ 사용자 / (연간 약정)</div>
</div>
<div class="mt-4 space-y-2 text-sm text-gray-600">
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> 30GB 스토리지/</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Meet 100</div>
<div class="flex items-center gap-2"><span class="gw-cross font-bold">X</span> Meet 녹화</div>
<div class="flex items-center gap-2"><span class="gw-cross font-bold">X</span> Vault / DLP</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Gemini AI 기본</div>
</div>
<div class="mt-3 text-xs text-gray-400 text-center">최대 300</div>
</div>
{{-- Standard --}}
<div class="gw-tier-card" style="flex: 1 1 200px; max-width: 280px;">
<div class="text-center mb-3">
<span class="gw-badge gw-badge-blue">Business Standard</span>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-gray-900">$14</div>
<div class="text-xs text-gray-500">/ 사용자 / (연간 약정)</div>
</div>
<div class="mt-4 space-y-2 text-sm text-gray-600">
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> 2TB 스토리지/</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Meet 150</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Meet 녹화</div>
<div class="flex items-center gap-2"><span class="gw-cross font-bold">X</span> Vault / DLP</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Gemini AI 기본</div>
</div>
<div class="mt-3 text-xs text-gray-400 text-center">최대 300</div>
</div>
{{-- Plus --}}
<div class="gw-tier-card recommended" style="flex: 1 1 200px; max-width: 280px;">
<div class="text-center mb-3">
<span class="gw-badge gw-badge-green">Business Plus</span>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-emerald-700">$22</div>
<div class="text-xs text-gray-500">/ 사용자 / (연간 약정)</div>
</div>
<div class="mt-4 space-y-2 text-sm text-gray-600">
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> 5TB 스토리지/</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Meet 500</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Meet 녹화 + 출석</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> <strong>Vault + DLP 포함</strong></div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Gemini AI 기본</div>
</div>
<div class="mt-3 text-xs text-emerald-600 text-center font-semibold">최대 300 | Vault 포함</div>
</div>
{{-- Enterprise --}}
<div class="gw-tier-card" style="flex: 1 1 200px; max-width: 280px;">
<div class="text-center mb-3">
<span class="gw-badge gw-badge-purple">Enterprise</span>
</div>
<div class="text-center">
<div class="text-3xl font-bold text-gray-900">견적</div>
<div class="text-xs text-gray-500">영업팀 문의 (맞춤 가격)</div>
</div>
<div class="mt-4 space-y-2 text-sm text-gray-600">
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> 무제한 스토리지</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Meet 1,000</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> 노이즈 캔슬링</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Vault + DLP + 보안센터</div>
<div class="flex items-center gap-2"><span class="gw-check font-bold">O</span> Gemini AI 프리미엄</div>
</div>
<div class="mt-3 text-xs text-gray-400 text-center">사용자 무제한</div>
</div>
</div>
<div class="mt-4 gw-info-box bg-blue-50 border border-blue-200 text-blue-800">
<strong>연간 약정 vs 월정액:</strong> 월정액(Flexible) 요금은 연간 약정 대비 <strong>20% 높습니다</strong>.
: Starter 월정액 $8.40, Standard $16.80, Plus $26.40. 1 이상 사용 예정이면 연간 약정이 유리합니다.
</div>
</div>
</div>
{{-- ─── 섹션 2: 주요 기능 비교 ─── --}}
<div class="gw-section-card">
<div class="gw-section-header">
<h2>2. 주요 기능 비교</h2>
</div>
<div class="p-5">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">기능</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">Starter ($7)</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">Standard ($14)</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">Plus ($22)</th>
<th class="text-center py-2.5 px-3 text-gray-600 font-medium" style="width: 18%;">Enterprise</th>
</tr>
</thead>
<tbody>
@php
$features = [
['name' => '스토리지 (인당)', 'starter' => '30GB', 'standard' => '2TB', 'plus' => '5TB', 'enterprise' => '무제한'],
['name' => 'Meet 최대 참여자', 'starter' => '100명', 'standard' => '150명', 'plus' => '500명', 'enterprise' => '1,000명'],
['name' => 'Meet 녹화', 'starter' => '-', 'standard' => 'O', 'plus' => 'O', 'enterprise' => 'O'],
['name' => 'Google Vault', 'starter' => '-', 'standard' => '-', 'plus' => 'O', 'enterprise' => 'O'],
['name' => 'DLP (데이터 유출 방지)', 'starter' => '-', 'standard' => '-', 'plus' => 'O', 'enterprise' => 'O'],
['name' => '보안 센터', 'starter' => '-', 'standard' => '-', 'plus' => '-', 'enterprise' => 'O'],
['name' => 'Gemini AI', 'starter' => '기본', 'standard' => '기본', 'plus' => '기본', 'enterprise' => '프리미엄'],
['name' => 'AppSheet', 'starter' => '-', 'standard' => '-', 'plus' => '-', 'enterprise' => 'O (Core)'],
['name' => '고급 엔드포인트 관리', 'starter' => '-', 'standard' => '-', 'plus' => 'O', 'enterprise' => 'O'],
];
@endphp
@foreach($features as $feat)
<tr class="border-b border-gray-100 hover:bg-gray-50">
<td class="py-2.5 px-3 font-medium text-gray-800">{{ $feat['name'] }}</td>
<td class="py-2.5 px-3 text-center {{ $feat['starter'] === '-' ? 'text-gray-300' : 'text-gray-700' }}">{{ $feat['starter'] }}</td>
<td class="py-2.5 px-3 text-center {{ $feat['standard'] === '-' ? 'text-gray-300' : 'text-gray-700' }}">{{ $feat['standard'] }}</td>
<td class="py-2.5 px-3 text-center {{ $feat['plus'] === '-' ? 'text-gray-300' : 'text-emerald-600 font-semibold' }}">{{ $feat['plus'] }}</td>
<td class="py-2.5 px-3 text-center {{ $feat['enterprise'] === '-' ? 'text-gray-300' : 'text-gray-700' }}">{{ $feat['enterprise'] }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="mt-4 gw-info-box bg-purple-50 border border-purple-200 text-purple-800">
<strong>Gemini AI 통합 (2025.01.15~):</strong> 모든 Workspace 플랜에 Gemini AI가 기본 포함됩니다.
Gmail, Docs, Sheets, Slides, Meet에서 AI 기능을 사용할 있으며, Enterprise 플랜에서는 프리미엄 AI 기능(고급 보안 분석, NotebookLM Plus ) 추가됩니다.
</div>
</div>
</div>
{{-- ─── 섹션 3: 우리 회사 예상 비용 ─── --}}
<div class="gw-section-card">
<div class="gw-section-header">
<h2>3. 예상 비용 시뮬레이션</h2>
</div>
<div class="p-5">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">계정 </th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">Starter ($7)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">Standard ($14)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">Plus ($22)</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">비고</th>
</tr>
</thead>
<tbody>
@php
$accountCounts = [5, 10, 15, 20, 30];
@endphp
@foreach($accountCounts as $count)
<tr class="border-b border-gray-100 hover:bg-gray-50 {{ $count === 10 ? 'highlight-row' : '' }}">
<td class="py-2.5 px-3 font-medium text-gray-800">
{{ $count }}
@if($count === 10) <span class="gw-badge gw-badge-green ml-1">기준</span> @endif
</td>
<td class="py-2.5 px-3 text-right text-gray-700">${{ number_format($count * 7) }}/</td>
<td class="py-2.5 px-3 text-right text-gray-700">${{ number_format($count * 14) }}/</td>
<td class="py-2.5 px-3 text-right font-semibold text-emerald-600">${{ number_format($count * 22) }}/</td>
<td class="py-2.5 px-3 text-right text-xs text-gray-400"> ${{ number_format($count * 22 * 12) }}</td>
</tr>
@endforeach
</tbody>
</table>
<div class="flex gap-4 mt-4" style="flex-wrap: wrap;">
<div class="p-4 bg-emerald-50 border border-emerald-200 rounded-lg" style="flex: 1 1 280px;">
<div class="text-sm text-emerald-700">10 기준 Plus 선택 </div>
<div class="text-2xl font-bold text-emerald-700 mt-1"> $220 <span class="text-base font-normal">( 30만원)</span></div>
<div class="text-sm text-emerald-600 mt-1"> $2,640 | Vault + DLP 포함</div>
</div>
<div class="p-4 bg-blue-50 border border-blue-200 rounded-lg" style="flex: 1 1 280px;">
<div class="text-sm text-blue-700">10 기준 Starter 선택 </div>
<div class="text-2xl font-bold text-blue-700 mt-1"> $70 <span class="text-base font-normal">( 9.5만원)</span></div>
<div class="text-sm text-blue-600 mt-1"> $840 | 기본 기능만</div>
</div>
</div>
</div>
</div>
{{-- ─── 섹션 4: 요금 인상 히스토리 ─── --}}
<div class="gw-section-card">
<div class="gw-section-header">
<h2>4. 요금 인상 히스토리</h2>
</div>
<div class="p-5">
<div class="gw-info-box bg-amber-50 border border-amber-200 text-amber-800 mb-4">
<strong>2025.03.17 인상:</strong> Gemini AI 통합에 따른 가격 변경. 모든 플랜에 AI 기능이 기본 포함되면서 단가가 인상되었습니다.
</div>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-gray-200">
<th class="text-left py-2.5 px-3 text-gray-600 font-medium" style="width: 25%;">플랜</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">이전 가격</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 20%;">현재 가격</th>
<th class="text-right py-2.5 px-3 text-gray-600 font-medium" style="width: 15%;">인상폭</th>
<th class="text-left py-2.5 px-3 text-gray-600 font-medium">변경 사유</th>
</tr>
</thead>
<tbody>
@php
$priceHistory = [
['plan' => 'Business Starter', 'before' => 6, 'after' => 7, 'reason' => 'Gemini AI 기본 포함'],
['plan' => 'Business Standard', 'before' => 12, 'after' => 14, 'reason' => 'Gemini AI 기본 포함'],
['plan' => 'Business Plus', 'before' => 18, 'after' => 22, 'reason' => 'Gemini AI + 보안 강화'],
];
@endphp
@foreach($priceHistory as $row)
@php $diff = $row['after'] - $row['before']; $pct = round(($diff / $row['before']) * 100); @endphp
<tr class="border-b border-gray-100 hover:bg-gray-50">
<td class="py-2.5 px-3 font-medium text-gray-800">{{ $row['plan'] }}</td>
<td class="py-2.5 px-3 text-right text-gray-400 line-through">${{ $row['before'] }}</td>
<td class="py-2.5 px-3 text-right font-semibold text-gray-800">${{ $row['after'] }}</td>
<td class="py-2.5 px-3 text-right text-red-500 font-semibold">+${{ $diff }} ({{ $pct }}%)</td>
<td class="py-2.5 px-3 text-gray-600">{{ $row['reason'] }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<p class="text-xs text-gray-400 text-center"> Google Workspace 공식 가격 페이지 기준 (2025.03.17 개정). 실제 청구 금액은 결제 통화 세금에 따라 달라질 있습니다.</p>
</div>
@endsection

View File

@@ -36,6 +36,9 @@
use App\Http\Controllers\ClaudeCode\CoworkController as ClaudeCodeCoworkController;
use App\Http\Controllers\ClaudeCode\PricingController as ClaudeCodePricingController;
use App\Http\Controllers\ClaudeCode\UsagePlanController as ClaudeCodeUsagePlanController;
use App\Http\Controllers\GoogleCloud\WorkspacePolicyController as GoogleCloudWorkspacePolicyController;
use App\Http\Controllers\GoogleCloud\WorkspacePricingController as GoogleCloudWorkspacePricingController;
use App\Http\Controllers\GoogleCloud\CloudApiPricingController as GoogleCloudCloudApiPricingController;
use App\Http\Controllers\Lab\StrategyController;
use App\Http\Controllers\MenuController;
use App\Http\Controllers\MenuSyncController;
@@ -736,6 +739,26 @@
Route::get('/usage-plan/download', [ClaudeCodeUsagePlanController::class, 'download'])->name('usage-plan.download');
});
/*
|--------------------------------------------------------------------------
| Google Cloud Routes
|--------------------------------------------------------------------------
*/
Route::prefix('google-cloud')->name('google-cloud.')->group(function () {
Route::get('/workspace-policy', [GoogleCloudWorkspacePolicyController::class, 'index'])
->name('workspace-policy.index');
Route::get('/workspace-pricing', [GoogleCloudWorkspacePricingController::class, 'index'])
->name('workspace-pricing.index');
Route::get('/workspace-pricing/download', [GoogleCloudWorkspacePricingController::class, 'download'])
->name('workspace-pricing.download');
Route::get('/cloud-api-pricing', [GoogleCloudCloudApiPricingController::class, 'index'])
->name('cloud-api-pricing.index');
Route::get('/cloud-api-pricing/download', [GoogleCloudCloudApiPricingController::class, 'download'])
->name('cloud-api-pricing.download');
});
/*
|--------------------------------------------------------------------------
| R&D Labs Routes (5130 마이그레이션)