Files
sam-docs/system/api-structure.md
권혁성 d4e5f62413 docs: [종합정비] Phase 1 시스템 현황 문서 14개 작성
- system/overview.md: 전체 아키텍처 개요
- system/api-structure.md: API 구조 (220 모델, 1027 엔드포인트, 18 라우트 도메인)
- system/react-structure.md: React 구조 (249 페이지, 612 컴포넌트)
- system/mng-structure.md: MNG 구조 (171 컨트롤러, 436 Blade 뷰)
- system/docker-setup.md: Docker 7 컨테이너 구성
- system/database/README.md + 9개 도메인 스키마 (270+ 테이블)
  - core, hr, sales, production, finance, boards, files, system, erp-analysis

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:03:13 +09:00

6.7 KiB

API 서버 구조 현황

최종 갱신: 2026-02-27 기술 스택: Laravel 12 + PHP 8.4 + Sanctum + Spatie Permission + L5-Swagger


1. 프로젝트 규모

항목 수량
API 엔드포인트 ~1,027
컨트롤러 131
모델 220
서비스 180
FormRequest 271
미들웨어 9
Swagger 문서 110
마이그레이션 459
설정 파일 22

2. 디렉토리 구조

app/
├── Http/
│   ├── Controllers/Api/
│   │   ├── Admin/              글로벌 메뉴 관리
│   │   └── V1/                 메인 API (131개)
│   │       ├── Admin/          FCM 관리
│   │       ├── Audit/          감사 로그
│   │       ├── Construction/   시공 (작업지시, 결과, 설정)
│   │       ├── Design/         설계 (모델, 버전, BOM 템플릿)
│   │       ├── Documents/      문서 (템플릿, 생성)
│   │       ├── ESign/          전자서명
│   │       ├── ItemMaster/     품목 마스터 (9개)
│   │       └── [104 Root Controllers]
│   ├── Middleware/              9개
│   └── Requests/               271개 (FormRequest)
├── Models/                     220개 (32개 도메인)
├── Services/                   180개
├── Swagger/v1/                 110개 (OpenAPI 문서)
├── Helpers/                    4개
├── Observers/                  5개
├── Traits/                     모델/감사 트레이트
└── Exceptions/                 2개

3. 라우트 도메인별 엔드포인트

라우트 파일 엔드포인트 주요 기능
finance.php 180 재무 (결제, 청구서, 세금계산서, 급여)
hr.php 141 인사 (급여, 근태, 휴가, 대출)
common.php 128 공통 (코드, 분류, 카테고리, 필드)
sales.php 122 영업 (수주, 견적, 거래처, 출하)
boards.php 84 게시판 (동적 필드 지원)
inventory.php 79 재고 (자재, 입고, 창고)
production.php 67 생산 (작업지시, 작업실적, 공정)
design.php 61 설계 (모델, 버전, BOM 템플릿)
users.php 34 사용자 (프로필, 역할, 초대)
admin.php 29 관리자 (테넌트, 메뉴, FCM)
tenants.php 23 테넌트 (전환, 프로필)
files.php 20 파일 (업로드, 저장, 조회)
esign.php 18 전자서명 워크플로우
documents.php 17 문서 (템플릿, 생성)
auth.php 9 인증 (로그인, 로그아웃, 등록)
audit.php 7 감사 (로그, 이력)
stats.php 5 통계/리포트
app.php 3 앱 버전, 상태 체크
합계 ~1,027
routes/
├── api.php              메인 API 진입점
└── api/v1/
    ├── admin.php
    ├── app.php
    ├── audit.php
    ├── auth.php
    ├── boards.php
    ├── common.php
    ├── design.php
    ├── documents.php
    ├── esign.php
    ├── files.php
    ├── finance.php
    ├── hr.php
    ├── inventory.php
    ├── production.php
    ├── sales.php
    ├── stats.php
    ├── tenants.php
    └── users.php

4. 미들웨어

미들웨어 역할
ApiKeyMiddleware API 키 인증 + Sanctum 토큰 검증
ApiRateLimiter API 속도 제한
ApiVersionMiddleware API 버전 라우팅
CheckPermission 권한 기반 접근 제어
CheckSwaggerAuth Swagger UI 인증
CorsMiddleware CORS 정책
LogApiRequest API 요청/응답 로깅
PermMapper 권한 매핑 변환
SetAuditSessionVariables 감사 세션 컨텍스트

5. 아키텍처 패턴

인증 체계

  • 글로벌: API Key (모든 요청)
  • 사용자: Sanctum Bearer Token (Access 120분, Refresh 7일)
  • 내부: HMAC (INTERNAL_EXCHANGE_SECRET, mng ↔ api)

응답 포맷

{
  "success": true,
  "message": "message.key.from.lang",
  "data": { ... }
}
  • ApiResponse::handle() 헬퍼로 통일

핵심 패턴

  • Service-First: 비즈니스 로직 → Service 클래스
  • FormRequest 필수: Controller에서 직접 검증 금지
  • BelongsToTenant: 모든 비즈니스 모델에 tenant_id 격리
  • Auditable: created_by, updated_by, deleted_by 자동 기록
  • SoftDeletes: 대부분의 엔티티 논리 삭제

헬퍼

헬퍼 역할
ApiResponse JSON 응답 포맷 통일
ItemTypeHelper 품목 분류 로직
Legacy5130Calculator 레거시 5130 연동 계산
TenantCodeGenerator 테넌트별 코드 생성

6. 주요 의존성

패키지 버전 용도
laravel/framework ^12.0 코어 프레임워크
laravel/sanctum ^4.0 API 토큰 인증
spatie/laravel-permission ^6.21 RBAC 권한 관리
darkaonline/l5-swagger ^9.0 Swagger/OpenAPI 문서
maatwebsite/excel ^3.1 Excel 가져오기/내보내기
google/auth ^1.49 Google 인증
doctrine/dbal ^4.3 DB 추상화

7. 설정

config/
├── app.php              앱 메타데이터
├── audit.php            감사 로깅 (13개월 보존)
├── auth.php             인증 (Sanctum, API 키)
├── authz.php            인가 + 권한
├── cors.php             CORS 정책
├── custom.php           커스텀 앱 설정
├── database.php         DB 연결 (samdb, sam_stat)
├── fcm.php              Firebase Cloud Messaging
├── l5-swagger.php       Swagger 설정
├── pagination.php       페이지네이션 기본값
├── permission.php       Spatie Permission
├── products.php         제품별 설정
├── sanctum.php          Sanctum 토큰 설정
└── [기타 8개]

8. api ↔ mng ↔ react 관계

react (dev.sam.kr)  ──Server Actions──→  api (api.sam.kr)  ←──DB 공유──→  mng (mng.sam.kr)
                                              │
                                         MySQL (samdb)
  • api: DB 마이그레이션 유일 관리자 (459개). 모든 테이블 정의
  • mng: 자체 모델 (185개), 마이그레이션 없음. 동일 DB 직접 접근
  • react: Server Actions로 api 호출. DB 직접 접근 없음
  • 내부 통신: HMAC 기반 INTERNAL_EXCHANGE_SECRET (mng → api)
  • 파일 공유: mng가 api의 storage/app/tenants 마운트

Swagger 문서

  • 110개 OpenAPI 문서 파일
  • 도메인별 태그 구성
  • 보안 스키마: ApiKeyAuth + BearerAuth (Sanctum)
  • URL: api.sam.kr/api/documentation