Files
sam-kd/strategy/MVPtaxaffairs.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

1425 lines
58 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MVP 세무전략 - 6주 실행 계획</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
min-height: 100vh;
overflow-x: hidden;
}
.presentation-container {
width: 100%;
height: 100vh;
position: relative;
overflow: hidden;
}
.slide {
width: 100%;
height: 100vh;
display: none;
align-items: flex-start;
justify-content: center;
padding: 40px;
position: absolute;
top: 0;
left: 0;
overflow-y: auto;
overflow-x: hidden;
}
.slide.active {
display: flex;
animation: slideInRight 0.5s ease-out;
}
.slide-content {
background: rgba(255, 255, 255, 0.95);
border-radius: 20px;
padding: 60px;
max-width: 1200px;
width: 100%;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
animation: fadeIn 0.8s ease-out;
margin: auto 0;
}
h1 {
color: #28a745;
font-size: 3em;
margin-bottom: 20px;
text-align: center;
}
h2 {
color: #20c997;
font-size: 2.5em;
margin-bottom: 30px;
text-align: center;
border-bottom: 3px solid #28a745;
padding-bottom: 15px;
}
h3 {
color: #28a745;
font-size: 1.8em;
margin: 25px 0 15px 0;
}
h4 {
color: #20c997;
font-size: 1.3em;
margin: 15px 0 10px 0;
}
p, li {
font-size: 1.2em;
line-height: 1.8;
color: #333;
margin-bottom: 15px;
}
ul, ol {
margin-left: 30px;
}
.week-card {
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
color: white;
padding: 30px;
border-radius: 15px;
margin: 20px 0;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.week-card h3 {
color: white;
margin-top: 0;
border-bottom: 2px solid rgba(255, 255, 255, 0.3);
padding-bottom: 10px;
margin-bottom: 20px;
}
.week-card p, .week-card li {
color: white;
}
.task-list {
background: #f8f9ff;
padding: 20px;
border-radius: 10px;
margin: 15px 0;
border-left: 4px solid #28a745;
}
.task-list h4 {
margin-top: 0;
}
.deliverable-box {
background: #fff3cd;
border-left: 5px solid #ffc107;
padding: 20px;
border-radius: 10px;
margin: 15px 0;
}
.deliverable-box h4 {
color: #856404;
margin-top: 0;
}
.deliverable-box p, .deliverable-box li {
color: #856404;
}
.success-metrics {
background: #d4edda;
border-left: 5px solid #28a745;
padding: 20px;
border-radius: 10px;
margin: 15px 0;
}
.success-metrics h4 {
color: #155724;
margin-top: 0;
}
.success-metrics p, .success-metrics li {
color: #155724;
}
.comparison-table {
width: 100%;
border-collapse: collapse;
margin: 25px 0;
font-size: 1em;
}
.comparison-table th,
.comparison-table td {
padding: 12px;
border: 1px solid #ddd;
text-align: left;
}
.comparison-table thead tr {
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
color: white;
}
.comparison-table tbody tr:nth-of-type(even) {
background: #f3f3f3;
}
.highlight-box {
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
color: white;
padding: 30px;
border-radius: 15px;
margin: 20px 0;
text-align: center;
}
.highlight-box p {
color: white;
}
.navigation {
position: fixed;
bottom: 30px;
right: 30px;
display: flex;
gap: 15px;
z-index: 1000;
}
.nav-btn {
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
color: white;
border: none;
padding: 15px 30px;
border-radius: 50px;
cursor: pointer;
font-size: 1.1em;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
}
.nav-btn:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
}
.home-btn {
position: fixed;
top: 30px;
left: 30px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 12px 25px;
border-radius: 50px;
cursor: pointer;
font-size: 1em;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
z-index: 1000;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 8px;
font-weight: 600;
}
.home-btn:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
}
.slide-number {
position: fixed;
bottom: 30px;
left: 30px;
background: rgba(255, 255, 255, 0.9);
padding: 10px 20px;
border-radius: 25px;
font-size: 1.1em;
color: #28a745;
font-weight: bold;
z-index: 1000;
}
@keyframes slideInRight {
from {
transform: translateX(100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@media (max-width: 768px) {
.slide-content {
padding: 30px;
}
h1 {
font-size: 2em;
}
h2 {
font-size: 1.8em;
}
h3 {
font-size: 1.4em;
}
h4 {
font-size: 1.1em;
}
p, li {
font-size: 1em;
}
.navigation {
bottom: 15px;
right: 15px;
}
.nav-btn {
padding: 10px 20px;
font-size: 0.9em;
}
.slide-number {
bottom: 15px;
left: 15px;
padding: 8px 15px;
font-size: 0.9em;
}
.home-btn {
top: 15px;
left: 15px;
padding: 10px 20px;
font-size: 0.9em;
}
.comparison-table {
font-size: 0.8em;
}
.comparison-table th,
.comparison-table td {
padding: 8px;
}
}
</style>
</head>
<body>
<!-- Home Button -->
<a href="../index.php" class="home-btn">
<span>🏠</span>
<span>홈으로</span>
</a>
<div class="presentation-container">
<!-- Slide 1: Cover -->
<div class="slide active">
<div class="slide-content">
<h1>MVP 세무전략</h1>
<h2 style="border: none; color: #28a745;">6주 실행 계획</h2>
<div style="text-align: center; margin-top: 50px;">
<p style="font-size: 1.5em; color: #20c997;">즉시 실행 가능한 핵심 세무 솔루션</p>
<p style="margin-top: 30px; color: #666;">1인 파트별 현실적 구현 방안</p>
<div class="highlight-box" style="margin-top: 50px;">
<p style="font-size: 1.3em;"><strong>목표:</strong> 6주 안에 실무에서 사용 가능한 세무 솔루션 MVP 완성</p>
</div>
</div>
</div>
</div>
<!-- Slide 2: Overview & Philosophy -->
<div class="slide">
<div class="slide-content">
<h2>MVP 철학 및 범위</h2>
<div class="highlight-box">
<h3 style="color: white; margin-top: 0;">핵심 원칙</h3>
<p style="font-size: 1.2em;">"완벽한 전체보다 작동하는 핵심"</p>
</div>
<div style="margin-top: 30px;">
<h3>🎯 MVP 목표</h3>
<ul>
<li>즉시 사용 가능한 핵심 기능에 집중</li>
<li>각 파트 1인이 6주 내 완성 가능한 범위</li>
<li>실무에서 가장 빈번한 업무 자동화 우선</li>
<li>점진적 확장 가능한 기반 구조</li>
</ul>
</div>
<div style="margin-top: 30px;">
<h3>🚫 MVP 범위 밖</h3>
<ul>
<li>AI 기반 예측 및 추천 (Phase 2 이후)</li>
<li>외부 ERP 시스템 연동 (Phase 2 이후)</li>
<li>모바일 앱 (Phase 2 이후)</li>
<li>복잡한 절세 시뮬레이션 (Phase 2 이후)</li>
</ul>
</div>
<div style="margin-top: 30px;">
<h3>✅ MVP 핵심 기능</h3>
<ul>
<li>부가세 신고 데이터 수집 및 관리</li>
<li>기본 세무 계산 및 검증</li>
<li>간단한 대시보드 및 리포트</li>
<li>세무 일정 관리 및 알림</li>
</ul>
</div>
</div>
</div>
<!-- Slide 3: Team Structure -->
<div class="slide">
<div class="slide-content">
<h2>팀 구성 및 역할 (1인 파트)</h2>
<table class="comparison-table">
<thead>
<tr>
<th>역할</th>
<th>주요 책임</th>
<th>6주 목표</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>기획 1명</strong></td>
<td>요구사항 정의, 기능 명세, 테스트 시나리오</td>
<td>MVP 기능 명세서, 사용자 스토리 10개, 테스트 케이스</td>
</tr>
<tr>
<td><strong>디자인 1명</strong></td>
<td>화면 설계, UI 디자인, 프로토타입</td>
<td>5개 핵심 화면 디자인, 기본 컴포넌트 라이브러리</td>
</tr>
<tr>
<td><strong>백엔드 1명</strong></td>
<td>API 개발, 데이터베이스 설계, 비즈니스 로직</td>
<td>핵심 API 15개, DB 스키마, 세무 계산 엔진</td>
</tr>
<tr>
<td><strong>프론트엔드 1명</strong></td>
<td>화면 구현, API 연동, 사용자 경험</td>
<td>5개 핵심 화면, 데이터 시각화, 반응형 UI</td>
</tr>
</tbody>
</table>
<div class="deliverable-box" style="margin-top: 30px;">
<h4>⚠️ 현실적 제약 사항</h4>
<ul>
<li>각 파트 1명이므로 병목 현상 발생 가능</li>
<li>동시 작업 최대화를 위한 명확한 인터페이스 정의 필요</li>
<li>주간 동기화 미팅으로 의존성 관리</li>
<li>우선순위 조정을 통한 6주 내 완성 보장</li>
</ul>
</div>
</div>
</div>
<!-- Slide 4: Week 1-2 -->
<div class="slide">
<div class="slide-content">
<h2>Week 1-2: 기반 구축 및 핵심 설계</h2>
<div class="week-card">
<h3>🏗️ Week 1-2 목표</h3>
<p>프로젝트 기반 설정 및 핵심 아키텍처 구축</p>
</div>
<div class="task-list">
<h4>📋 기획 (Week 1-2)</h4>
<ul>
<li><strong>Week 1:</strong> MVP 기능 명세서 작성
<ul>
<li>부가세 신고 프로세스 정의</li>
<li>사용자 스토리 10개 작성</li>
<li>데이터 모델 초안</li>
</ul>
</li>
<li><strong>Week 2:</strong> 화면 플로우 및 테스트 케이스
<ul>
<li>화면 전환 플로우 다이어그램</li>
<li>API 명세 초안 (백엔드 협업)</li>
<li>핵심 테스트 케이스 20개</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>🎨 디자인 (Week 1-2)</h4>
<ul>
<li><strong>Week 1:</strong> 디자인 시스템 구축
<ul>
<li>컬러 팔레트 및 타이포그래피</li>
<li>기본 컴포넌트 (버튼, 입력, 카드)</li>
<li>와이어프레임 5개 화면</li>
</ul>
</li>
<li><strong>Week 2:</strong> 핵심 화면 디자인
<ul>
<li>대시보드 디자인</li>
<li>부가세 데이터 입력 화면</li>
<li>리포트 화면</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>⚙️ 백엔드 (Week 1-2)</h4>
<ul>
<li><strong>Week 1:</strong> 프로젝트 설정
<ul>
<li>Node.js + Express 프로젝트 초기화</li>
<li>PostgreSQL 데이터베이스 설정</li>
<li>JWT 인증 구현</li>
</ul>
</li>
<li><strong>Week 2:</strong> 핵심 DB 및 API
<ul>
<li>데이터베이스 스키마 구축 (5개 테이블)</li>
<li>사용자 관리 API 4개</li>
<li>부가세 데이터 CRUD API 5개</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>💻 프론트엔드 (Week 1-2)</h4>
<ul>
<li><strong>Week 1:</strong> 프로젝트 설정
<ul>
<li>React + TypeScript 프로젝트 초기화</li>
<li>라우팅 및 상태 관리 설정</li>
<li>공통 컴포넌트 3개 구현</li>
</ul>
</li>
<li><strong>Week 2:</strong> 레이아웃 및 인증
<ul>
<li>기본 레이아웃 (헤더, 사이드바)</li>
<li>로그인/회원가입 화면</li>
<li>API 연동 설정</li>
</ul>
</li>
</ul>
</div>
<div class="deliverable-box">
<h4>📦 Week 1-2 산출물</h4>
<ul>
<li>MVP 기능 명세서 (기획)</li>
<li>디자인 시스템 및 와이어프레임 (디자인)</li>
<li>인증 API + DB 스키마 (백엔드)</li>
<li>프로젝트 기반 + 로그인 UI (프론트엔드)</li>
</ul>
</div>
</div>
</div>
<!-- Slide 5: Week 3-4 -->
<div class="slide">
<div class="slide-content">
<h2>Week 3-4: 핵심 기능 구현</h2>
<div class="week-card">
<h3>⚡ Week 3-4 목표</h3>
<p>부가세 관리 및 대시보드 핵심 기능 완성</p>
</div>
<div class="task-list">
<h4>📋 기획 (Week 3-4)</h4>
<ul>
<li><strong>Week 3:</strong> 상세 프로세스 정의
<ul>
<li>부가세 계산 로직 명세</li>
<li>데이터 검증 규칙 정의</li>
<li>리포트 템플릿 설계</li>
</ul>
</li>
<li><strong>Week 4:</strong> QA 준비
<ul>
<li>테스트 시나리오 작성</li>
<li>버그 트래킹 시스템 준비</li>
<li>사용자 가이드 초안</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>🎨 디자인 (Week 3-4)</h4>
<ul>
<li><strong>Week 3:</strong> 나머지 화면 디자인
<ul>
<li>데이터 입력 폼 상세 디자인</li>
<li>리포트 레이아웃</li>
<li>알림 센터 UI</li>
</ul>
</li>
<li><strong>Week 4:</strong> 디자인 QA 및 개선
<ul>
<li>프론트엔드 구현 리뷰</li>
<li>반응형 디자인 검증</li>
<li>UX 개선 사항 반영</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>⚙️ 백엔드 (Week 3-4)</h4>
<ul>
<li><strong>Week 3:</strong> 세무 계산 엔진
<ul>
<li>부가세 계산 로직 구현</li>
<li>데이터 검증 미들웨어</li>
<li>리포트 생성 API 3개</li>
</ul>
</li>
<li><strong>Week 4:</strong> 알림 및 일정 관리
<ul>
<li>일정 관리 API 3개</li>
<li>알림 시스템 구현</li>
<li>파일 업로드 API</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>💻 프론트엔드 (Week 3-4)</h4>
<ul>
<li><strong>Week 3:</strong> 대시보드 및 입력 화면
<ul>
<li>대시보드 KPI 카드</li>
<li>부가세 데이터 입력 폼</li>
<li>데이터 테이블 (정렬, 필터)</li>
</ul>
</li>
<li><strong>Week 4:</strong> 리포트 및 알림
<ul>
<li>리포트 화면 및 차트</li>
<li>일정 관리 캘린더</li>
<li>알림 센터 UI</li>
</ul>
</li>
</ul>
</div>
<div class="deliverable-box">
<h4>📦 Week 3-4 산출물</h4>
<ul>
<li>테스트 시나리오 및 사용자 가이드 (기획)</li>
<li>전체 화면 디자인 완료 (디자인)</li>
<li>세무 계산 엔진 + 알림 시스템 (백엔드)</li>
<li>대시보드 + 리포트 화면 (프론트엔드)</li>
</ul>
</div>
</div>
</div>
<!-- Slide 6: Week 5-6 -->
<div class="slide">
<div class="slide-content">
<h2>Week 5-6: 통합 테스트 및 런칭 준비</h2>
<div class="week-card">
<h3>🚀 Week 5-6 목표</h3>
<p>통합, 테스트, 버그 수정 및 MVP 런칭</p>
</div>
<div class="task-list">
<h4>📋 기획 (Week 5-6)</h4>
<ul>
<li><strong>Week 5:</strong> 통합 테스트 진행
<ul>
<li>End-to-End 테스트 수행</li>
<li>버그 우선순위 관리</li>
<li>사용자 가이드 완성</li>
</ul>
</li>
<li><strong>Week 6:</strong> 런칭 준비
<ul>
<li>최종 테스트 및 검수</li>
<li>릴리스 노트 작성</li>
<li>Phase 2 백로그 정리</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>🎨 디자인 (Week 5-6)</h4>
<ul>
<li><strong>Week 5:</strong> 디자인 QA
<ul>
<li>크로스 브라우저 테스트</li>
<li>반응형 디자인 검증</li>
<li>접근성 체크</li>
</ul>
</li>
<li><strong>Week 6:</strong> 마케팅 자료
<ul>
<li>프로덕트 스크린샷</li>
<li>데모 시나리오 준비</li>
<li>UI 개선 사항 문서화</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>⚙️ 백엔드 (Week 5-6)</h4>
<ul>
<li><strong>Week 5:</strong> 성능 최적화
<ul>
<li>API 성능 테스트 및 최적화</li>
<li>데이터베이스 인덱스 최적화</li>
<li>에러 핸들링 개선</li>
</ul>
</li>
<li><strong>Week 6:</strong> 배포 준비
<ul>
<li>프로덕션 환경 설정</li>
<li>백업 및 모니터링 구성</li>
<li>API 문서화 완료</li>
</ul>
</li>
</ul>
</div>
<div class="task-list">
<h4>💻 프론트엔드 (Week 5-6)</h4>
<ul>
<li><strong>Week 5:</strong> 버그 수정 및 최적화
<ul>
<li>통합 테스트 버그 수정</li>
<li>성능 최적화 (번들 사이즈)</li>
<li>로딩 상태 및 에러 처리</li>
</ul>
</li>
<li><strong>Week 6:</strong> 최종 점검 및 배포
<ul>
<li>프로덕션 빌드 최적화</li>
<li>브라우저 호환성 검증</li>
<li>배포 및 모니터링</li>
</ul>
</li>
</ul>
</div>
<div class="deliverable-box">
<h4>📦 Week 5-6 산출물</h4>
<ul>
<li>테스트 리포트 및 릴리스 노트 (기획)</li>
<li>마케팅 자료 및 UI 문서 (디자인)</li>
<li>프로덕션 API + 모니터링 (백엔드)</li>
<li>배포된 프로덕션 웹앱 (프론트엔드)</li>
</ul>
</div>
</div>
</div>
<!-- Slide 7: Success Metrics -->
<div class="slide">
<div class="slide-content">
<h2>성공 지표 및 완료 기준</h2>
<div class="highlight-box">
<h3 style="color: white; margin-top: 0;">MVP 완료 정의</h3>
<p style="font-size: 1.2em;">"실제 사용자가 부가세 신고 데이터를 입력하고 리포트를 생성할 수 있어야 함"</p>
</div>
<div style="margin-top: 30px;">
<h3>✅ 필수 완료 항목</h3>
<table class="comparison-table">
<thead>
<tr>
<th>항목</th>
<th>완료 기준</th>
<th>검증 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>사용자 인증</strong></td>
<td>회원가입, 로그인, 권한 관리</td>
<td>3명의 사용자가 동시 로그인 가능</td>
</tr>
<tr>
<td><strong>데이터 입력</strong></td>
<td>부가세 매입매출 데이터 입력 및 수정</td>
<td>100건 데이터 입력 및 검증</td>
</tr>
<tr>
<td><strong>계산 엔진</strong></td>
<td>부가세 자동 계산 및 검증</td>
<td>10개 테스트 케이스 통과</td>
</tr>
<tr>
<td><strong>대시보드</strong></td>
<td>주요 KPI 실시간 표시</td>
<td>3초 이내 데이터 로딩</td>
</tr>
<tr>
<td><strong>리포트</strong></td>
<td>부가세 신고 리포트 생성</td>
<td>PDF 또는 Excel 다운로드</td>
</tr>
<tr>
<td><strong>일정 관리</strong></td>
<td>신고 일정 등록 및 알림</td>
<td>이메일 알림 발송 확인</td>
</tr>
</tbody>
</table>
</div>
<div class="success-metrics" style="margin-top: 30px;">
<h4>📊 정량적 목표</h4>
<ul>
<li><strong>기능 완성도:</strong> 핵심 기능 6개 100% 동작</li>
<li><strong>API 응답 속도:</strong> 평균 500ms 이하</li>
<li><strong>버그 제로:</strong> Critical 버그 0건</li>
<li><strong>코드 커버리지:</strong> 핵심 기능 80% 이상</li>
<li><strong>사용자 테스트:</strong> 5명 이상 실제 사용 가능</li>
</ul>
</div>
<div class="deliverable-box" style="margin-top: 30px;">
<h4>⚠️ 리스크 관리</h4>
<ul>
<li><strong>일정 지연 리스크:</strong> 주간 진도 체크 및 우선순위 조정</li>
<li><strong>기술 리스크:</strong> 1-2주차에 기술 검증 완료</li>
<li><strong>통합 리스크:</strong> 4주차부터 점진적 통합 시작</li>
<li><strong>품질 리스크:</strong> 주간 코드 리뷰 및 테스트</li>
</ul>
</div>
</div>
</div>
<!-- Slide 8: Technical Stack -->
<div class="slide">
<div class="slide-content">
<h2>기술 스택 (실용적 선택)</h2>
<div style="margin-top: 30px;">
<h3>⚙️ 백엔드 스택</h3>
<table class="comparison-table">
<thead>
<tr>
<th>기술</th>
<th>선택 이유</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Node.js + Express</strong></td>
<td>빠른 개발 속도, 생태계 풍부, JavaScript 통일</td>
</tr>
<tr>
<td><strong>PostgreSQL</strong></td>
<td>안정성, JSON 지원, 무료 오픈소스</td>
</tr>
<tr>
<td><strong>JWT 인증</strong></td>
<td>간단한 구현, 확장 가능</td>
</tr>
<tr>
<td><strong>PDF 생성: PDFKit</strong></td>
<td>Node.js 네이티브, 한글 지원</td>
</tr>
</tbody>
</table>
</div>
<div style="margin-top: 30px;">
<h3>💻 프론트엔드 스택</h3>
<table class="comparison-table">
<thead>
<tr>
<th>기술</th>
<th>선택 이유</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>React 18 + TypeScript</strong></td>
<td>타입 안전성, 생산성, 대중성</td>
</tr>
<tr>
<td><strong>Vite</strong></td>
<td>빠른 개발 서버, 간단한 설정</td>
</tr>
<tr>
<td><strong>Material-UI (MUI)</strong></td>
<td>빠른 UI 구축, 디자인 일관성</td>
</tr>
<tr>
<td><strong>React Query</strong></td>
<td>서버 상태 관리 간소화</td>
</tr>
<tr>
<td><strong>Recharts</strong></td>
<td>간단한 차트 라이브러리</td>
</tr>
</tbody>
</table>
</div>
<div style="margin-top: 30px;">
<h3>🛠️ 개발 도구</h3>
<ul>
<li><strong>버전 관리:</strong> Git + GitHub</li>
<li><strong>협업:</strong> Slack, Notion</li>
<li><strong>디자인:</strong> Figma</li>
<li><strong>테스트:</strong> Vitest, React Testing Library</li>
<li><strong>배포:</strong> Vercel (프론트), Railway (백엔드)</li>
</ul>
</div>
<div class="deliverable-box" style="margin-top: 30px;">
<h4>💡 기술 결정 원칙</h4>
<ul>
<li>검증된 기술 우선 (실험적 기술 배제)</li>
<li>학습 곡선 최소화 (팀원 역량 고려)</li>
<li>커뮤니티 및 문서 풍부</li>
<li>무료 또는 저비용 솔루션</li>
</ul>
</div>
</div>
</div>
<!-- Slide 9: Database Design -->
<div class="slide">
<div class="slide-content">
<h2>데이터베이스 설계 (MVP 범위)</h2>
<div style="margin-top: 30px;">
<h3>📊 핵심 테이블 (5개)</h3>
<table class="comparison-table">
<thead>
<tr>
<th>테이블명</th>
<th>주요 필드</th>
<th>용도</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>users</strong></td>
<td>id, email, password, role, company_name</td>
<td>사용자 계정 관리</td>
</tr>
<tr>
<td><strong>vat_data</strong></td>
<td>id, user_id, period, type, amount, description, date</td>
<td>부가세 매입매출 데이터</td>
</tr>
<tr>
<td><strong>tax_calculations</strong></td>
<td>id, user_id, period, total_sales, total_purchase, vat_payable</td>
<td>부가세 계산 결과</td>
</tr>
<tr>
<td><strong>tax_schedules</strong></td>
<td>id, user_id, title, due_date, type, status</td>
<td>세무 일정 관리</td>
</tr>
<tr>
<td><strong>notifications</strong></td>
<td>id, user_id, message, type, is_read, created_at</td>
<td>알림 관리</td>
</tr>
</tbody>
</table>
</div>
<div style="margin-top: 30px; background: #f8f9ff; padding: 20px; border-radius: 10px;">
<h4>🔗 데이터 관계</h4>
<ul>
<li><strong>users → vat_data:</strong> 1:N (사용자 한 명이 여러 데이터)</li>
<li><strong>users → tax_calculations:</strong> 1:N (사용자 한 명이 여러 계산 결과)</li>
<li><strong>users → tax_schedules:</strong> 1:N (사용자 한 명이 여러 일정)</li>
<li><strong>users → notifications:</strong> 1:N (사용자 한 명이 여러 알림)</li>
</ul>
</div>
<div class="success-metrics" style="margin-top: 30px;">
<h4>✅ 데이터 검증 규칙</h4>
<ul>
<li>금액 필드: 0 이상의 숫자, 최대 12자리</li>
<li>기간: YYYY-MM 형식, 현재 날짜 기준 과거 5년 이내</li>
<li>타입: 매출/매입 enum으로 제한</li>
<li>필수 필드: user_id, period, amount는 NOT NULL</li>
</ul>
</div>
</div>
</div>
<!-- Slide 10: API Design -->
<div class="slide">
<div class="slide-content">
<h2>API 설계 (15개 핵심 API)</h2>
<div style="margin-top: 30px;">
<h3>🔐 인증 API (4개)</h3>
<table class="comparison-table">
<thead>
<tr>
<th>엔드포인트</th>
<th>메서드</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>/api/auth/register</td>
<td>POST</td>
<td>회원가입</td>
</tr>
<tr>
<td>/api/auth/login</td>
<td>POST</td>
<td>로그인 및 JWT 발급</td>
</tr>
<tr>
<td>/api/auth/logout</td>
<td>POST</td>
<td>로그아웃</td>
</tr>
<tr>
<td>/api/auth/profile</td>
<td>GET</td>
<td>사용자 프로필 조회</td>
</tr>
</tbody>
</table>
</div>
<div style="margin-top: 30px;">
<h3>📊 부가세 데이터 API (5개)</h3>
<table class="comparison-table">
<thead>
<tr>
<th>엔드포인트</th>
<th>메서드</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>/api/vat-data</td>
<td>GET</td>
<td>부가세 데이터 목록 조회</td>
</tr>
<tr>
<td>/api/vat-data</td>
<td>POST</td>
<td>부가세 데이터 생성</td>
</tr>
<tr>
<td>/api/vat-data/:id</td>
<td>PUT</td>
<td>부가세 데이터 수정</td>
</tr>
<tr>
<td>/api/vat-data/:id</td>
<td>DELETE</td>
<td>부가세 데이터 삭제</td>
</tr>
<tr>
<td>/api/vat-data/import</td>
<td>POST</td>
<td>Excel 파일 일괄 업로드</td>
</tr>
</tbody>
</table>
</div>
<div style="margin-top: 30px;">
<h3>📈 리포트 & 일정 API (6개)</h3>
<table class="comparison-table">
<thead>
<tr>
<th>엔드포인트</th>
<th>메서드</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>/api/reports/calculate</td>
<td>POST</td>
<td>부가세 계산 실행</td>
</tr>
<tr>
<td>/api/reports/summary</td>
<td>GET</td>
<td>대시보드 요약 데이터</td>
</tr>
<tr>
<td>/api/reports/export</td>
<td>GET</td>
<td>PDF 리포트 다운로드</td>
</tr>
<tr>
<td>/api/schedules</td>
<td>GET/POST</td>
<td>일정 목록 조회 및 생성</td>
</tr>
<tr>
<td>/api/schedules/:id</td>
<td>PUT/DELETE</td>
<td>일정 수정 및 삭제</td>
</tr>
<tr>
<td>/api/notifications</td>
<td>GET</td>
<td>알림 목록 조회</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Slide 11: UI Screens -->
<div class="slide">
<div class="slide-content">
<h2>핵심 화면 (5개)</h2>
<div style="margin-top: 30px;">
<h3>1⃣ 대시보드</h3>
<div class="task-list">
<h4>주요 요소</h4>
<ul>
<li><strong>KPI 카드 4개:</strong> 이번 달 매출액, 매입액, 부가세 예상액, 다음 신고일</li>
<li><strong>월별 추이 차트:</strong> 최근 6개월 매출/매입 추이</li>
<li><strong>알림 센터:</strong> 최근 알림 5개</li>
<li><strong>빠른 액션:</strong> 데이터 입력, 리포트 보기 버튼</li>
</ul>
</div>
</div>
<div style="margin-top: 30px;">
<h3>2⃣ 부가세 데이터 입력</h3>
<div class="task-list">
<h4>주요 요소</h4>
<ul>
<li><strong>입력 폼:</strong> 기간, 타입(매출/매입), 금액, 설명</li>
<li><strong>데이터 테이블:</strong> 입력된 데이터 목록 (편집/삭제)</li>
<li><strong>Excel 업로드:</strong> 대량 데이터 일괄 입력</li>
<li><strong>실시간 검증:</strong> 금액 형식, 필수 필드 체크</li>
</ul>
</div>
</div>
<div style="margin-top: 30px;">
<h3>3⃣ 부가세 리포트</h3>
<div class="task-list">
<h4>주요 요소</h4>
<ul>
<li><strong>기간 선택:</strong> 월/분기/연간 선택</li>
<li><strong>요약 정보:</strong> 총 매출, 총 매입, 납부할 부가세</li>
<li><strong>상세 내역:</strong> 항목별 집계 테이블</li>
<li><strong>PDF 다운로드:</strong> 리포트 PDF 변환</li>
</ul>
</div>
</div>
<div style="margin-top: 30px;">
<h3>4⃣ 일정 관리</h3>
<div class="task-list">
<h4>주요 요소</h4>
<ul>
<li><strong>캘린더 뷰:</strong> 월간 캘린더에 일정 표시</li>
<li><strong>일정 등록:</strong> 제목, 날짜, 타입(신고/납부) 입력</li>
<li><strong>알림 설정:</strong> D-7, D-3, D-1 알림 옵션</li>
<li><strong>일정 목록:</strong> 다가오는 일정 리스트</li>
</ul>
</div>
</div>
<div style="margin-top: 30px;">
<h3>5⃣ 설정</h3>
<div class="task-list">
<h4>주요 요소</h4>
<ul>
<li><strong>프로필 관리:</strong> 이름, 회사명, 이메일 수정</li>
<li><strong>알림 설정:</strong> 이메일 알림 on/off</li>
<li><strong>비밀번호 변경:</strong> 보안 설정</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Slide 12: Phase 2 Roadmap -->
<div class="slide">
<div class="slide-content">
<h2>Phase 2 계획 (MVP 이후)</h2>
<div class="highlight-box">
<h3 style="color: white; margin-top: 0;">MVP 성공 후 확장 로드맵</h3>
<p style="font-size: 1.2em;">사용자 피드백 기반 점진적 기능 확장</p>
</div>
<div style="margin-top: 30px;">
<h3>📈 Phase 2 목표 (3개월)</h3>
<ul>
<li><strong>다양한 세금 유형 지원:</strong> 원천세, 법인세, 종합소득세</li>
<li><strong>외부 시스템 연동:</strong> 더존, 영림원 회계 시스템 API 연동</li>
<li><strong>AI 기반 추천:</strong> 절세 전략 자동 제안</li>
<li><strong>모바일 앱:</strong> React Native 기반 모바일 버전</li>
</ul>
</div>
<div style="margin-top: 30px;">
<h3>🔮 Phase 3 목표 (6개월)</h3>
<ul>
<li><strong>전자 신고 자동화:</strong> 홈택스 자동 전송</li>
<li><strong>세무 컨설팅 AI:</strong> 자연어 기반 세무 상담</li>
<li><strong>다중 사용자/회사:</strong> SaaS 모델로 전환</li>
<li><strong>고급 분석:</strong> 업종별 벤치마킹, 절세 시뮬레이션</li>
</ul>
</div>
<div class="deliverable-box" style="margin-top: 30px;">
<h4>💡 확장 우선순위 결정 기준</h4>
<ul>
<li><strong>사용자 요청:</strong> 실제 사용자 피드백 반영</li>
<li><strong>사용 빈도:</strong> 가장 많이 사용되는 기능 개선</li>
<li><strong>비즈니스 가치:</strong> 수익화 및 차별화 기여도</li>
<li><strong>기술 복잡도:</strong> 구현 난이도와 리소스 고려</li>
</ul>
</div>
<div class="success-metrics" style="margin-top: 30px;">
<h4>🎯 장기 비전</h4>
<p>중소기업과 세무사를 위한 <strong>올인원 세무 자동화 플랫폼</strong>으로 성장</p>
<ul>
<li>월간 활성 사용자 1,000명 이상</li>
<li>세무 업무 시간 80% 절감</li>
<li>국내 중소기업 세무 솔루션 시장 점유율 Top 5</li>
</ul>
</div>
</div>
</div>
<!-- Slide 13: Final Summary -->
<div class="slide">
<div class="slide-content">
<h2>6주 MVP 요약</h2>
<div class="highlight-box">
<h3 style="color: white; margin-top: 0;">핵심 메시지</h3>
<p style="font-size: 1.3em;">"작지만 완벽하게 작동하는 솔루션을 6주 안에"</p>
</div>
<div style="margin-top: 40px;">
<h3>✅ 최종 체크리스트</h3>
<table class="comparison-table">
<thead>
<tr>
<th>주차</th>
<th>핵심 산출물</th>
<th>검증 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Week 1-2</strong></td>
<td>기반 구축 완료</td>
<td>로그인 성공, DB 연결 확인</td>
</tr>
<tr>
<td><strong>Week 3-4</strong></td>
<td>핵심 기능 완성</td>
<td>데이터 입력 및 계산 동작</td>
</tr>
<tr>
<td><strong>Week 5-6</strong></td>
<td>통합 및 배포</td>
<td>5명 사용자 실제 테스트</td>
</tr>
</tbody>
</table>
</div>
<div style="margin-top: 40px; text-align: center;">
<p style="font-size: 1.3em; color: #28a745;"><strong>성공 지표</strong></p>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-top: 30px;">
<div class="task-list">
<p style="font-size: 1.5em; color: #28a745; font-weight: bold; margin: 0;">6개</p>
<p style="font-size: 1em; margin: 5px 0 0 0;">핵심 기능</p>
</div>
<div class="task-list">
<p style="font-size: 1.5em; color: #28a745; font-weight: bold; margin: 0;">15개</p>
<p style="font-size: 1em; margin: 5px 0 0 0;">API 엔드포인트</p>
</div>
<div class="task-list">
<p style="font-size: 1.5em; color: #28a745; font-weight: bold; margin: 0;">5개</p>
<p style="font-size: 1em; margin: 5px 0 0 0;">핵심 화면</p>
</div>
<div class="task-list">
<p style="font-size: 1.5em; color: #28a745; font-weight: bold; margin: 0;">4명</p>
<p style="font-size: 1em; margin: 5px 0 0 0;">개발 팀원</p>
</div>
</div>
</div>
<div style="margin-top: 40px; padding: 30px; background: #f8f9ff; border-radius: 15px;">
<h3 style="text-align: center;">Next Actions</h3>
<ol style="font-size: 1.1em; margin-top: 20px;">
<li>팀 구성 및 킥오프 미팅 (Day 1)</li>
<li>개발 환경 설정 및 프로젝트 초기화 (Day 1-2)</li>
<li>주간 스프린트 시작 (매주 월요일)</li>
<li>주간 동기화 미팅 (매주 금요일)</li>
</ol>
</div>
</div>
</div>
<!-- Slide 14: Thank You -->
<div class="slide">
<div class="slide-content">
<h1 style="font-size: 4em; margin-bottom: 40px;">감사합니다</h1>
<div style="text-align: center;">
<p style="font-size: 1.5em; color: #28a745; margin-bottom: 30px;">MVP 세무전략 - 6주 실행 계획</p>
<div class="highlight-box" style="margin-top: 50px;">
<h3 style="color: white; margin-top: 0;">함께 만들어가는 성공</h3>
<p style="font-size: 1.2em;">작지만 확실한 시작으로 큰 목표를 향해</p>
</div>
<div style="margin-top: 50px; padding: 30px; background: #f8f9ff; border-radius: 15px;">
<h3>문의 및 피드백</h3>
<p style="margin-top: 20px;">본 계획안에 대한 의견이나 추가 논의가 필요하신 경우</p>
<p>프로젝트 팀으로 연락 주시기 바랍니다.</p>
</div>
</div>
</div>
</div>
</div>
<div class="slide-number">
<span id="currentSlide">1</span> / <span id="totalSlides">14</span>
</div>
<div class="navigation">
<button class="nav-btn" id="prevBtn" onclick="changeSlide(-1)">← 이전</button>
<button class="nav-btn" id="nextBtn" onclick="changeSlide(1)">다음 →</button>
</div>
<script>
let currentSlide = 1;
const totalSlides = 14;
let touchStartX = 0;
let touchEndX = 0;
document.getElementById('totalSlides').textContent = totalSlides;
function showSlide(n) {
const slides = document.querySelectorAll('.slide');
if (n > totalSlides) {
currentSlide = 1;
}
if (n < 1) {
currentSlide = totalSlides;
}
slides.forEach(slide => {
slide.classList.remove('active');
});
slides[currentSlide - 1].classList.add('active');
document.getElementById('currentSlide').textContent = currentSlide;
document.getElementById('prevBtn').disabled = (currentSlide === 1);
document.getElementById('nextBtn').disabled = (currentSlide === totalSlides);
}
function changeSlide(direction) {
currentSlide += direction;
showSlide(currentSlide);
}
document.addEventListener('keydown', function(event) {
if (event.key === 'ArrowLeft') {
changeSlide(-1);
} else if (event.key === 'ArrowRight' || event.key === ' ') {
event.preventDefault();
changeSlide(1);
}
});
document.addEventListener('touchstart', function(event) {
touchStartX = event.changedTouches[0].screenX;
});
document.addEventListener('touchend', function(event) {
touchEndX = event.changedTouches[0].screenX;
handleSwipe();
});
function handleSwipe() {
if (touchEndX < touchStartX - 50) {
changeSlide(1);
}
if (touchEndX > touchStartX + 50) {
changeSlide(-1);
}
}
showSlide(currentSlide);
</script>
</body>
</html>