# [특허 기술문서 1] SAM 고객사 맞춤형 ERP/MES 자동 구성 — 처리 흐름도 > **문서 목적**: 변리사 제출용 — 방법특허 청구항 근거 자료 > **대상**: 축1 플랫폼 방법특허 (고객사별 맞춤형 시스템 자동 생성 방법) > **작성일**: 2026-03-20 > **출원인**: (주)코드브릿지엑스 --- ## 1. 발명이 해결하는 과제 ### 1.1 기존 ERP 도입의 문제 중소 제조업체가 ERP/MES를 도입하려면: ``` ❌ 기존 방식 (6개월~1년 소요) ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ ① 현장 방문 │→ │ ② 업무 분석 │→ │ ③ 커스터마이징 │→ │ ④ 데이터 이관 │ │ (1~2주) │ │ (1~2개월) │ │ (3~6개월) │ │ (1~2개월) │ │ 컨설턴트 파견│ │ 인터뷰+문서화 │ │ 코드 포크 │ │ 수동 매핑 │ └─────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ 비용: 3,000만~2억원 / 인력: 2~5명 / 실패율: 40~60% ``` **핵심 문제**: 모든 과정이 **사람 의존적**이며, 업체마다 처음부터 반복해야 한다. ### 1.2 본 발명의 해결 ``` ✅ SAM 방식 (1주일 이내) ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ ① 로우데이터 │→ │ ② AI 분석 │→ │ ③ 자동 구성 │ │ 비대면 수집 │ │ + 패턴 매칭 │ │ + 자동 초기화 │ │ (1~2일) │ │ (수분 이내) │ │ (수초 이내) │ └──────────────┘ └──────────────┘ └──────────────┘ 비용: 기존 대비 1/10 / 인력: AI + 1명 / 성공률: 실증 완료 ``` --- ## 2. 전체 처리 흐름도 — 5단계 자동화 파이프라인 ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 단계 1: 로우데이터 수집 (비대면, 3채널) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 채널 A 채널 B 채널 C ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ 기존 견적서 양식 │ │ 체크리스트형 설문 │ │ 음성 인터뷰 │ │ 파일 업로드 │ │ (인터뷰 시나리오) │ │ (전화/화상 녹음) │ │ │ │ │ │ │ │ • 엑셀/PDF 견적서│ │ • 카테고리별 질문 │ │ • 브라우저 STT │ │ • BOM 양식 │ │ • 체크박스+서술형 │ │ • Google Cloud STT│ │ • 단가표 │ │ • 진행률 실시간 │ │ • 화자 분리 │ │ • 공정 흐름표 │ │ 추적 (%) │ │ (Diarization) │ └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │ │ │ ▼ ▼ ▼ 구조화된 데이터 설문 응답 JSON 텍스트 변환본 (파일 파싱 결과) (질문별 체크/서술) (화자별 분리) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 단계 2: 전처리 및 정규화 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┌──────────────────────────────────────────────────────────┐ │ 전처리 엔진 │ │ │ │ [A] 파일 파싱 │ │ 엑셀 → 행/열 구조 추출 → 컬럼 유형 추론 │ │ PDF → 테이블 영역 감지 → 텍스트 추출 │ │ │ │ [B] 설문 응답 정규화 │ │ InterviewAnswer → 카테고리별 집계 │ │ 체크박스: is_checked 기반 이진 분류 │ │ 서술형: answer_text 키워드 추출 │ │ 진행률: answered_questions / total_questions │ │ │ │ [C] 음성 텍스트 정제 │ │ STT 결과 → 문장 분리 → 화자별 그룹핑 │ │ 업무 키워드 추출 → 도메인 태깅 │ │ │ │ ────────────────────────────────────────────────────── │ │ 출력: 통합 분석 입력 데이터 (JSON) │ │ {company_info, collected_answers, documents, keywords} │ └───────────────────────────┬──────────────────────────────┘ │ ▼ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 단계 3: AI 분석 — 업종·규모·공정 패턴 도출 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┌──────────────────────────────────────────────────────────┐ │ AI 분석 엔진 (LLM) │ │ │ │ 입력: │ │ • 통합 분석 입력 데이터 (단계 2 출력) │ │ • 도메인 지식 베이스 (20만줄+ 기술 문서) │ │ • 모듈 카탈로그 (가용한 ERP/MES 기능 목록) │ │ │ │ 처리: │ │ ① 업종 분류 (제조/시공/유통 + 세부 업종) │ │ ② 규모 판별 (매출/직원수/거래처수 기반) │ │ ③ 핵심 업무 프로세스 도출 │ │ (견적→수주→생산→출하→정산 등) │ │ ④ 필요 모듈 매칭 (모듈 카탈로그 대조) │ │ ⑤ BOM 구조 패턴 추론 (견적서 양식 분석) │ │ ⑥ 수식 템플릿 선택/생성 │ │ (면적/중량/수량 기반 계산 방식 결정) │ │ │ │ 출력: │ │ { │ │ company_analysis: 업종/규모/특성, │ │ business_domains: 핵심 업무 영역[], │ │ recommended_modules: 필요 모듈[], │ │ bom_structure: BOM 패턴 정의, │ │ formula_templates: 수식 템플릿[], │ │ customization_plan: 커스터마이징 계획 │ │ } │ └───────────────────────────┬──────────────────────────────┘ │ ▼ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 단계 4: 테넌트 자동 생성 및 시스템 초기화 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┌──────────────────────────────────────────────────────────┐ │ RegisterService + TenantBootstrapper │ │ │ │ [4-1] 테넌트 코드 자동 생성 │ │ 한글 회사명 → 유니코드 초성 추출 │ │ (0xAC00 기준 588 단위 나눗셈) │ │ → 영문 변환 (ㄱ→G, ㄲ→KK, ...) │ │ → 36진수 4자리 순번 부여 │ │ → 코드 생성 (예: "경동기업" → "KDKO0001") │ │ → 최대 1,679,616개 테넌트 지원 (36^4) │ │ │ │ [4-2] 테넌트 레코드 생성 │ │ Tenant::create(code, status='trial') │ │ │ │ [4-3] 메뉴 계층 자동 복제 │ │ MenuBootstrapService::cloneGlobalMenusForTenant() │ │ global_menus → menus (부모-자식 ID 재매핑) │ │ │ │ [4-4] 사용자 + 역할 + 권한 자동 설정 │ │ User 생성 → Role('system_manager') 생성 │ │ → 메뉴별×5종(view/create/update/delete/approve) │ │ 권한 일괄 부여 │ │ │ │ [4-5] 레시피 기반 부트스트래핑 (4단계) │ │ ┌──────────────────────────────────────┐ │ │ │ RecipeRegistry('STANDARD') │ │ │ │ │ │ │ │ Step 1: CapabilityProfilesStep │ │ │ │ → 완제품/서브어셈블리/구매부품/팬텀│ │ │ │ → 4속성 조합으로 품목 유형 정의 │ │ │ │ │ │ │ │ Step 2: CategoriesStep │ │ │ │ → 기본 카테고리 자동 생성 │ │ │ │ │ │ │ │ Step 3: SettingsStep │ │ │ │ → 기본 시스템 설정 3종 자동 구성 │ │ │ │ │ │ │ │ Step 4: ApprovalFormsStep │ │ │ │ → 5개 결재 양식 자동 생성 │ │ │ │ → JSON 필드 정의 (7종 입력 유형) │ │ │ └──────────────────────────────────────┘ │ │ │ │ 모든 Step은 멱등성(idempotent) 보장 │ │ — 재실행 시 데이터 중복 없이 안전 │ │ — updateOrInsert 패턴으로 구현 │ │ │ │ 실행 이력: tenant_bootstrap_runs 테이블 │ │ → status(RUNNING/SUCCESS/FAILED) │ │ → steps[], log[] (JSON 진행 상태 기록) │ └───────────────────────────┬──────────────────────────────┘ │ ▼ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 단계 5: 테넌트별 동적 커스터마이징 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┌──────────────────────────────────────────────────────────┐ │ 동적 필드 + 수식 엔진 구성 │ │ │ │ [5-A] 동적 필드 3계층 자동 구성 │ │ ┌─ item_pages (품목 유형별 페이지 생성) │ │ │ └─ item_sections (섹션 분류) │ │ │ └─ item_fields (필드 정의) │ │ │ ├─ field_type: 6종 │ │ │ │ (textbox/number/dropdown/ │ │ │ │ checkbox/date/textarea) │ │ │ ├─ validation_rules: JSON │ │ │ │ {min, max, pattern} │ │ │ ├─ display_condition: JSON │ │ │ │ {field_id, operator, value} │ │ │ │ → DB 수준 조건부 렌더링 │ │ │ └─ options: JSON (드롭다운 선택지) │ │ │ │ │ └─ 프론트엔드: API 메타데이터로 폼 자동 생성 │ │ │ │ [5-B] 전역/테넌트 오버레이 설정 │ │ SettingFieldDef (전역 필드 정의, 불변) │ │ + TenantFieldSetting (테넌트별 재정의, 가변) │ │ → buildEffectiveRow() 합성 │ │ → is_core=true 필드는 설정 없어도 자동 활성 │ │ │ │ [5-C] 수식 엔진 자동 라우팅 (Zero-Config) │ │ FormulaHandlerFactory::make(tenantId) │ │ → class_exists("Handlers/Tenant{id}/...") │ │ → 파일 존재만으로 자동 발견 (DB/설정파일 불필요) │ │ → 없으면 제네릭 DB 수식 기반 계산으로 폴백 │ │ │ │ [5-D] 멀티테넌트 데이터 자동 격리 │ │ BelongsToTenant trait → TenantScope │ │ → 모든 Eloquent 쿼리에 WHERE tenant_id = ? 주입 │ │ → 267개 모델 전체 적용 │ │ → 개발자 실수와 무관하게 아키텍처 수준 차단 │ └──────────────────────────────────────────────────────────┘ ``` --- ## 3. 필수 구성 요소 (Essential Elements) — 청구항 기초 > 변리사 요청: "자동화 프로세스에서 반드시 거쳐야 하는 단계를 특정" ### 3.1 생략 불가한 필수 단계 | 단계 | 필수 구성 요소 | 생략 시 결과 | SAM 구현 | |:----:|-------------|-----------|---------| | 1 | 복수 채널 로우데이터 수집 | 고객사 업무 파악 불가 | InterviewScenario (5모델) | | 2 | 데이터 전처리 및 정규화 | AI 분석 입력 불가 | 파일 파싱 + STT + 응답 정규화 | | 3 | AI 기반 업종·공정 패턴 도출 | 수동 분석 필요 (기존과 동일) | LLM + 도메인 지식 베이스 | | 4a | 테넌트 코드 자동 생성 | 수동 코드 부여 필요 | 한글 초성 유니코드 알고리즘 | | 4b | 레시피 기반 단계별 초기화 | 수동 설정 필요 | TenantBootstrapper (4 Steps) | | 5a | 동적 필드 자동 구성 | 고정 스키마 한계 | ItemMaster 3계층 | | 5b | 수식 엔진 자동 라우팅 | 테넌트별 코드 전면 수정 | Zero-Config Factory Pattern | | 5c | 행 수준 데이터 자동 격리 | 데이터 유출 위험 | BelongsToTenant Global Scope | ### 3.2 청구항 초안 (변리사 검토용) **독립항 1 (플랫폼 방법특허):** > 컴퓨터로 구현되는 멀티테넌트 ERP/MES 시스템의 고객사별 맞춤형 자동 구성 방법으로서, > > (a) 복수의 채널을 통해 고객사의 업무 데이터를 비대면으로 수집하는 단계; > (b) 수집된 데이터를 정규화하여 통합 분석 입력을 생성하는 단계; > (c) AI 모델을 이용하여 상기 통합 분석 입력으로부터 업종, 규모 및 업무 프로세스 패턴을 도출하는 단계; > (d) 도출된 패턴을 기반으로 테넌트 식별 코드를 자동 생성하고, 사전 정의된 레시피에 따라 시스템 구성 요소를 단계별로 자동 초기화하는 단계; > (e) 초기화된 시스템의 데이터 필드, 메뉴 구조 및 권한을 고객사 특성에 맞게 동적으로 조정하되, 행 수준 데이터 격리를 자동 적용하는 단계; > > 를 포함하는 것을 특징으로 하는 방법. **종속항 후보:** | # | 종속 대상 | 한정 내용 | |---|----------|---------| | 2 | 항 1의 (a) | 상기 복수의 채널은 파일 업로드, 체크리스트형 설문, 및 음성 인터뷰 녹음을 포함 | | 3 | 항 1의 (a) | 상기 설문은 마스터 질문 세트를 프로젝트별로 완전 복제하여 독립 운용 | | 4 | 항 1의 (d) | 상기 테넌트 코드는 한글 회사명의 유니코드 초성을 추출하여 영문 변환하고 36진수 순번을 결합 | | 5 | 항 1의 (d) | 상기 레시피는 복수의 단계(Step)를 순차 실행하되, 각 단계는 멱등성을 보장하며, 실행 이력을 데이터베이스에 기록 | | 6 | 항 1의 (e) | 상기 동적 필드는 3계층 구조(페이지-섹션-필드)로 정의되고, 조건부 표시 규칙을 JSON으로 저장 | | 7 | 항 1의 (e) | 상기 동적 조정은 전역 필드 정의와 테넌트별 설정을 오버레이 합성하여 수행 | | 8 | 항 1의 (e) | 상기 수식 엔진은 파일 시스템 기반 자동 발견으로 테넌트별 핸들러를 라우팅하되, 설정 파일 및 데이터베이스 매핑 없이 클래스 존재 여부만으로 판별 | **독립항 2 (역방향 AI 동적 설문):** > 컴퓨터로 구현되는 ERP/MES 도입을 위한 고객사 업무 분석 방법으로서, > > (a) AI 모델이 고객사 담당자에게 업무 방식에 관한 질문을 제시하는 단계; > (b) 담당자의 응답을 실시간으로 분석하여 후속 질문을 동적으로 생성하는 단계; > (c) 수집된 응답의 전체 집합으로부터 업무 프로세스 모델을 자동 도출하는 단계; > (d) 도출된 업무 프로세스 모델을 ERP/MES 모듈 구성 및 시스템 설정으로 자동 변환하는 단계; > > 를 포함하는 것을 특징으로 하는 방법. --- ## 4. SAM만의 독창적 처리 방식 — 선행기술 대비 ### 4.1 선행기술과의 차별점 | 요소 | 젠소프트 "하이퍼 오토메이션" | 이카운트 ERP | **SAM** | |------|:----:|:----:|:----:| | 업종 특화 BOM 수식 | ❌ 범용 | ❌ 없음 | ✅ 10단계 파이프라인 | | 비대면 3채널 수집 | ❌ | ❌ | ✅ 파일+설문+음성 | | 한글 초성 코드 생성 | ❌ | ❌ | ✅ 유니코드 알고리즘 | | 레시피 기반 부트스트래핑 | ❌ | ❌ | ✅ 멱등성 보장 Step | | 동적 필드 3계층 | △ 고정 스키마 | △ 고정 필드 | ✅ page→section→field | | 조건부 렌더링 (DB 수준) | ❌ | ❌ | ✅ display_condition JSON | | Zero-Config 핸들러 | ❌ | ❌ | ✅ 파일 존재만으로 발견 | | 행 수준 자동 격리 | △ DB 분리 | ❌ 단일 테넌트 | ✅ Global Scope 267모델 | | 전역/테넌트 오버레이 | ❌ | ❌ | ✅ buildEffectiveRow() | ### 4.2 기술적 진보성 근거 **① 레시피 기반 멱등적 초기화 파이프라인** 기존 SaaS 온보딩은 스크립트 1회 실행 방식으로, 실패 시 롤백/재시도가 어렵다. SAM은: - `TenantBootstrapStep` 인터페이스로 각 단계의 멱등성을 강제 - `updateOrInsert` 패턴으로 재실행해도 데이터 중복 없음 - `tenant_bootstrap_runs` 테이블로 실행 이력 추적 (RUNNING/SUCCESS/FAILED) - `RecipeRegistry`로 레시피(LITE/STANDARD)별 다른 단계 조합 선택 **② 한글 유니코드 기반 테넌트 코드 자동 생성** 외부 라이브러리 없이 유니코드 0xAC00~0xD7A3 범위의 한글 자모 분리를 직접 구현: ``` code = mb_ord(char) index = floor((code - 0xAC00) / 588) ← 19개 초성 인덱스 초성 → 영문 매핑 (ㄱ→G, ㄴ→N, ㄷ→D, ...) + 36진수 4자리 시퀀스 (0~9, A~Z) → 최대 1,679,616개(36^4) 테넌트 순환 지원 ``` **③ Zero-Config 테넌트 수식 핸들러 라우팅** ```php class_exists("App\\Services\\Quote\\Handlers\\Tenant{$tenantId}\\FormulaHandler") ``` 38줄의 Factory가 DB 조회, 설정 파일, 레지스트리 없이 **파일 시스템만으로** 테넌트별 계산 엔진을 자동 발견한다. 새 업체 추가 = PHP 파일 1개 생성. **④ 3계층 동적 필드 + DB 수준 조건부 렌더링** 일반 SaaS의 커스텀 필드는 key-value 평면 구조이다. SAM은: - page → section → field 3계층 트리 - `display_condition` JSON으로 **다른 필드의 값에 따라 표시/숨김** 결정 - 이 조건이 DB에 저장되어 **코드 배포 없이** 변경 가능 - 프론트엔드는 API 메타데이터로 폼을 동적 생성 --- ## 5. 증빙 코드 및 문서 목록 | 증빙 | 경로 | 줄 수 | 역할 | |------|------|:-----:|------| | 테넌트 부트스트래퍼 | `api/app/Services/TenantBootstrapper.php` | 56 | 파이프라인 오케스트레이터 | | 레시피 레지스트리 | `api/app/Services/TenantBootstrap/RecipeRegistry.php` | 40 | 레시피→Step 매핑 | | 회원가입 서비스 | `api/app/Services/RegisterService.php` | 154 | 12단계 온보딩 시퀀스 | | 메뉴 복제 서비스 | `api/app/Services/MenuBootstrapService.php` | 291 | 글로벌→테넌트 계층 복제 | | 테넌트 코드 생성 | `api/app/Helpers/TenantCodeGenerator.php` | 114 | 한글 초성 알고리즘 | | 동적 필드 서비스 | `api/app/Services/TenantFieldSettingService.php` | 212 | 전역/테넌트 오버레이 | | 수식 핸들러 팩토리 | `api/app/Services/Quote/FormulaHandlerFactory.php` | 38 | Zero-Config 발견 | | 인터뷰 서비스 | `mng/app/Services/Sales/InterviewScenarioService.php` | 732 | 설문 온보딩 | | AI 견적 엔진 설계 | `docs/plans/ai-quotation-engine-plan.md` | 929 | 2단계 AI 파이프라인 | | 인터뷰 시스템 문서 | `docs/features/sales/interviews.md` | 282 | 설문 시스템 | --- **최종 업데이트**: 2026-03-20