# Invyone 부서관리 — SRM_SAMYANGFOOD 대비 부족한 점 분석

> **V1 적용 완료 (2026-05-04, slim scope)**
> Phase 1 (DELETED_AT schema) + Slice 2.1 (soft-delete + 복구) + Slice 2.2 (DepartmentPicker) 적용 완료. 메타 + 3 테넌트 (test01/test02/siflex) 자동 동기화. 변경이력·직책 모델은 V2 행 (사용자 결정).
>
> 적용 우선순위 표 매핑:
> - ✅ #7 Soft-delete (DELETE → DELETED_AT 마킹 + 복구 endpoint + 토글 UI)
> - ✅ #2 부서 선택 팝업 — 컴포넌트 자체 (V1.1 에서 다른 화면 마이그레이션)
> - ⏸️ #1 변경이력 — V2 (감사 요구사항 발생 시)
> - ⏸️ #3 직책 — V2 (결재 모듈 도입 시 함께)
> - 그 외 #4·5·6·8·9·10 모두 V2+


- 작성일: 2026-05-04
- 비교 대상
  - **invyone** : `C:\Dev\projects\invyone` (Spring Boot + Next.js 멀티테넌트 로우코드)
  - **SRM_SAMYANGFOOD** : `C:\Dev\projects\SRM_SAMYANGFOOD` (Spring + JSP 레거시 SAP 연동 SRM)
- 비교 범위 : 부서관리(부서/조직/Dept) 모듈 한정 — 백엔드/스키마/프론트/연동/감사

---

## 0. 한 줄 요약

Invyone 은 **단일 회사 단위의 부서 CRUD/계층/멤버 할당** 은 잘 작동하지만, 한국형 ERP/SAP 연동 환경에서 표준이 된 **8 가지 축** (결재 라인 통합, 회계/Cost Center 연계, 변경 이력, 외부 시스템 동기화, 직책 모델, 부서 선택 팝업, 법인 분리, 본격적 단계 표현) 이 모두 빠져있다. 현재 코드는 **MVP 수준**이고, ERP 시장 진입 전 보강이 필요.

---

## 1. 두 시스템 스냅샷

### 1.1 SRM_SAMYANGFOOD 부서관리 핵심
- **컨트롤러** : `com.st_ones.everadmin.system.dept.web.DEPT01_Controller` (212줄)
- **서비스** : `DEPT01_Service` (148줄)
- **메인 테이블** : `STOCOGDP` — 부서 마스터, `STOCOGDT` — 디테일
- **외부 동기화 테이블** : `M_DEPT` (그룹웨어/SAP-인접) ← Quartz 배치 `GwDept` 가 정기 풀링
- **UI 화면 4종**
  - `DEPT01_010` — 본부/부/팀/파트 4-pane 드릴다운 그리드 (gridT/M/B/DP)
  - `DEPT01_020` — 9-단계 TreeGrid + in-cell edit + 자식 카운트
  - `DEPT01_020P01` — 부서 상세 팝업 (depth 선택 + insert/update merge)
  - `DEPT01_030` — 다른 화면 재사용용 부서 선택 트리 (multi/single)

### 1.2 Invyone 부서관리 핵심
- **컨트롤러** : `com.erp.controller.DepartmentController` — `/api/departments`
- **서비스** : `com.erp.service.DepartmentService` (BaseService 상속, sqlSession 직접)
- **매퍼** : `mapper/department.xml` (namespace: `department`)
- **테이블** : `DEPT_INFO` (22 컬럼), `USER_DEPT` (사용자↔부서 m:n + IS_PRIMARY)
- **UI 화면 2종**
  - `frontend/app/(main)/admin/userMng/deptMngList/page.tsx` (legacy 단독 페이지)
  - `frontend/app/(main)/admin/userMng/companyList/[companyCode]/departments/page.tsx` (메인) — `DepartmentStructure` + `DepartmentMembers` 컴포넌트

---

## 2. 갭 — Tier 별 정리

### 🔴 Tier 1 — 운영 표면화 (즉시 막힘)

#### 2.1 결재 라인 통합 부재
| | SRM | Invyone |
|---|---|---|
| 결재 참여 토글 | `STOCOGDP.APPROVE_USE_FLAG` | ❌ 없음 |
| 결재 라인 모델 | AUTH 시스템과 연결 | 없음 |
| 결재 매니저 | TEAM_LEADER_USER_ID + 별도 결재 체인 | `approval_manager` 한 명 필드만, 결재 흐름 미연결 |

**영향** : 결재 모듈을 붙이는 순간 부서 모델을 다시 손대야 한다.

#### 2.2 변경 이력 (Audit Trail) — 백엔드 0%
- 화면(`DepartmentStructure.tsx` 등) 에 `변경이력` 모달 스켈레톤만 있고 백엔드 테이블·쿼리 모두 부재.
- `DEPT_INFO` 컬럼 : `CREATED_DATE` 만, **UPDATED_DATE / UPDATED_BY 없음**.
- SRM 도 완벽하진 않지만 `REG_DATE / MOD_DATE` 는 있음.

**영향** : "누가 언제 부서명 바꿨냐" 추적 불가 → 감사·컴플라이언스 실패.

#### 2.3 부서 선택 재사용 컴포넌트 부재
- SRM `DEPT01_030` : 다른 화면에서 부서 골라야 할 때 띄우는 트리 팝업 (single/multi-select, 부모 클릭 시 자식 cascade).
- Invyone : `searchUsers` (사용자 검색) 만 있음. 부서 picker 가 없어서 다른 화면에서 부서 참조하려면 매번 자체 셀렉트 만들어야 함.

#### 2.4 회계 코드 / Cost Center 미연계
- SRM : `ACC_CODE`, `INDEPT`(내부부서), `DIVISION_YN`.
- Invyone : 없음. 회계/원가 모듈을 붙일 때 부서 schema 재설계 필요.

---

### 🟠 Tier 2 — 한국형 ERP 표준 누락

#### 2.5 직책 (Position) 모델 부재
| | SRM | Invyone |
|---|---|---|
| 부서장 | `TEAM_LEADER_USER_ID` | `dept_manager`, `org_head` (각 1명) |
| 사용자↔부서 관계 | DEPT_CD + 직급 별도 | `USER_DEPT.IS_PRIMARY` boolean 만 |

**영향** : "팀의 PL 3명, 팀장 1명, 부장 1명" 같은 한국 조직 모델 표현 불가.

#### 2.6 DEPT_TYPE 표현력 부족
| 시스템 | enum 값 |
|---|---|
| SRM | `100=Division / 200=Department / 300=Team / 400=SubTeam` + `LVL` 숫자 |
| Invyone | `dept / team / temp` 3종 (`temp` 의미도 모호) |

**영향** : 한국 조직의 "본부 → 실 → 부 → 팀 → 파트" 5단계 구분이 안 들어감.

#### 2.7 외부 시스템 동기화 인프라 부재
- SRM : `GwDept` Quartz 배치 → 그룹웨어 `M_DEPT` 풀링 → 재귀 CTE 트리 재구성 → 회사 코드별(BUYER_CD: 100/300/500/700/800) `STOCOGDP` 클리어 후 일괄 적재.
- Invyone : CSV 한 줄씩 import 외 정기 동기화 없음.

**영향** : ERP 마이그레이션 / SAP 연동 고객 받으면 즉각 장애.
**참고** : 로우코드 플랫폼 철학상 의도적 미구현일 수 있음 → 그러나 ERP 도메인 진입 시 필요.

#### 2.8 법인 / 사업자 정보 분산
- SRM : 부서 자체에 `DEPT_IRS_NUM`(사업자등록번호), `DEPT_CEO_NM`(대표자) — **부서 = 별도 법인 단위 운영 가능**.
- Invyone : 사업자번호·대표자는 `COMPANY_MNG` 에만. **한 회사 안에 복수 법인** (계열사·자회사) 표현 불가 → 회사를 나누는 수밖에 없음.

---

### 🟡 Tier 3 — UX / 조회 효율

| # | 항목 | SRM | Invyone |
|---|---|---|---|
| 2.9 | 자식 노드 카운트 표시 | 트리 노드별 자식 수 표시 | ❌ 펼쳐봐야 알 수 있음 |
| 2.10 | 4-단계 그리드 드릴다운 화면 | `DEPT01_010` 4-pane | ❌ 단일 트리만 |
| 2.11 | In-cell 편집 | TreeGrid 안에서 직접 | ❌ 모달/사이드폼만 |
| 2.12 | 드래그앤드롭 재배열 | (명시적은 없으나 SEQ + tree edit) | ❌ `sort_order` 필드 있음, UI 없음 |
| 2.13 | Org Chart 시각화 | (없음) | ❌ `show_in_chart` 필드 있음 → **죽은 필드** |
| 2.14 | 개인정보 마스킹 | `J*n D*e` 마스킹 | ❌ 없음 |

---

### 🟢 Tier 4 — 모델링 / 성능 / 안정성

#### 2.15 Denormalized 계층 path 부재
- SRM : `ITEM_CLS1` ~ `ITEM_CLS9` + `LVL` 9-단계 비정규화 → breadcrumb · 검색 · 정렬 한 방.
- Invyone : `parent_dept_code` 만 → 깊은 트리는 클라이언트 재귀 join.
- 트레이드오프 : SRM 갱신 비용↑ 조회 비용↓ / Invyone 그 반대.
- **5단계 이상 깊은 조직** 에서는 SRM 모델이 유리.

#### 2.16 Hard Delete (soft-delete 부재)
- SRM : `DEL_FLAG='1'` 논리 삭제 → 이력·복구 가능.
- Invyone : `DELETE` 가 진짜 row 제거 + `USER_DEPT` 강제 정리 → 잘못 지우면 복구 안 됨.

#### 2.17 부서 폐지 / 합병 절차 부재
- SRM : DEL_FLAG + 직원 재배치 + 결재 라인 재구성.
- Invyone : 멤버 자동 제거 후 hard delete — "이 부서 직원들 어디로?" 안내 없음.

---

## 3. 우선순위 권장 (보강 로드맵)

| 순위 | 작업 | 작업량 | 막힘 위험 | 기대 효과 |
|---|---|---|---|---|
| 1 | **변경 이력** : `UPDATED_DATE/BY` + `DEPT_HISTORY` 테이블 + 모달 백엔드 | S | 즉시 감사 실패 | stub → 동작 |
| 2 | **부서 선택 팝업** 컴포넌트 (DEPT01_030 류) | M | 다른 화면 만들 때마다 막힘 | 재사용성 폭발 |
| 3 | **직책 모델** : `USER_DEPT.ROLE_IN_DEPT` (팀장/팀원/매니저...) | S | 권한·결재 모듈에서 필수 | 진짜 조직 표현 |
| 4 | **DEPT_TYPE 확장** : 5-단계 + `LVL` 숫자 | S | 데이터 입력 시 표현 부족 | 단계별 정렬·필터 |
| 5 | **회계 코드** : `ACC_CODE` + 매핑 UI | M | 회계 모듈 붙이는 순간 막힘 | 비용 집계 가능 |
| 6 | **결재 워크플로우** 통합 (`APPROVE_USE_FLAG` + 결재 라인 모델) | L | 결재 모듈 별도 | 한국형 ERP 진입 |
| 7 | **Soft-delete** : `DELETED_AT` + 복구 흐름 | S | 잘못된 hard delete 위험 | 데이터 안정성 |
| 8 | **Org chart 화면** (`show_in_chart` 플래그 활용) | M | 죽은 필드 살리기 | 시각화 |
| 9 | **외부 동기화** : SAP/그룹웨어 API 풀러 | L | 마이그레이션 시 | 이관 가능 |
| 10 | **UX 개선** : 자식 카운트 / 드래그앤드롭 / 드릴다운 그리드 | M~L | UX 차원 | 사용성 |

---

## 4. 추가 관찰

### 4.1 Invyone 강점 (잊지 말 것)
- 멀티테넌시 (`COMPANY_CODE='*'` 글로벌 + 회사별 격리) — SRM 의 `GATE_CD + BUYER_CD` 보다 깔끔
- 사용자 다중 부서 + IS_PRIMARY — SRM 은 사용자 1↔1 부서 기본
- React 컴포넌트화 (`DepartmentStructure` + `DepartmentMembers`) — 재사용성·테스트 용이
- 트랜잭셔널 일관성 + 명확한 cascade (자식 부서 있으면 삭제 거부)

### 4.2 Invyone 의 "이상한" 부분
- `DEPT_TYPE='temp'` — 의미 미정의, 일회성 부서?
- `MASTER_SABUN` (legacy 사번) 컬럼 — 어디서 쓰는지 불분명
- `ERP_MANAGED='Y'` 기본값 — Y/N 인데 실제 분기 로직 안 보임
- `DATA_TYPE='real'|'temp'` — `DEPT_TYPE='temp'` 와 의미 충돌 가능성

### 4.3 모델링 결정 : 단일 회사 vs. 다법인
Invyone 이 향후 **한 회사 안에서 복수 법인** 운영 (그룹사·계열사 모델) 을 지원할지가 분기점.
- 지원 안 함 : 현재 모델 유지, 회사를 더 만들면 됨 (사업자번호는 COMPANY_MNG 에)
- 지원 : 부서에 `legal_entity_code` 추가 + 사업자 정보 분리 → 큰 마이그레이션

### 4.4 Tier 1~2 만 했을 때의 결과
대략 1~2 sprint 분량. 이걸로 일반 한국 중견기업 ERP 부서관리 표준은 **충분히 커버**.

---

## 5. 다음 액션

- [ ] 본 문서를 stake-holder (사용자/내부) 와 함께 검토 → 우선순위 합의
- [ ] Tier 1 (변경이력 + 부서 선택 팝업 + 직책 모델 + DEPT_TYPE 확장) 1차 설계 문서 작성
- [ ] 마이그레이션 (V018 ~) 초안
- [ ] Tier 1 구현 → Tier 2 → ...

---

## 부록 A. 참고 코드 위치

### Invyone
```
backend-spring/src/main/java/com/erp/controller/DepartmentController.java
backend-spring/src/main/java/com/erp/service/DepartmentService.java
backend-spring/src/main/resources/mapper/department.xml          (namespace: department)

frontend/app/(main)/admin/userMng/deptMngList/page.tsx
frontend/app/(main)/admin/userMng/companyList/[companyCode]/departments/page.tsx
frontend/lib/api/department.ts
frontend/types/department.ts
frontend/components/.../DepartmentStructure.tsx
frontend/components/.../DepartmentMembers.tsx
```

### SRM_SAMYANGFOOD
```
src/main/java/com/st_ones/everadmin/system/dept/web/DEPT01_Controller.java
src/main/java/com/st_ones/everadmin/system/dept/service/DEPT01_Service.java
src/main/java/com/st_ones/everadmin/system/dept/DEPT01_Mapper.java
src/main/java/com/st_ones/batch/gwDept/web/GwDept.java
src/main/java/com/st_ones/batch/gwDept/service/GwDept_Service.java
src/main/java/com/st_ones/batch/gwDept/DeptMapper.java
```

## 부록 B. 주요 컬럼 비교 매트릭스

| 의미 | SRM (`STOCOGDP`) | Invyone (`DEPT_INFO`) |
|---|---|---|
| PK | DEPT_CD | DEPT_CODE |
| 이름 | DEPT_NM | DEPT_NAME |
| 상위 | PARENT_DEPT_CD | PARENT_DEPT_CODE |
| 깊이 | LVL | ❌ 없음 |
| Path | ITEM_CLS1 ~ ITEM_CLS9 | ❌ 없음 |
| 단계타입 | DEPT_TYPE (4종) | DEPT_TYPE (3종) |
| 부서장 | TEAM_LEADER_USER_ID | DEPT_MANAGER, ORG_HEAD |
| 결재 토글 | APPROVE_USE_FLAG | ❌ 없음 |
| 회계코드 | ACC_CODE | ❌ 없음 |
| 사업자번호 | DEPT_IRS_NUM | ❌ 부서엔 없음 (회사에만) |
| 대표자 | DEPT_CEO_NM | ❌ 부서엔 없음 |
| 내부부서 | INDEPT | ❌ 없음 |
| 사업부 플래그 | DIVISION_YN | ❌ 없음 |
| 정렬 | SEQ | SORT_ORDER |
| 소프트삭제 | DEL_FLAG | ❌ hard delete |
| 회사범위 | GATE_CD + BUYER_CD | COMPANY_CODE (+ '*' 글로벌) |
| 등록일 | REG_DATE | CREATED_DATE |
| 수정일 | MOD_DATE | ❌ 없음 |
| 시작/종료 | ❌ | START_DATE / END_DATE |
| 위치 | ❌ | LOCATION, LOCATION_NAME, ZIPCODE, ADDRESS1/2 |
| 매출부서 | ❌ | SALES_YN |
| 차트표시 | ❌ | SHOW_IN_CHART |

(Invyone 에만 있는 항목도 일부 있음 — 위치/주소/SALES_YN/SHOW_IN_CHART. 현재 활용도는 낮음.)

---

# 부록 C. KDSCont ↔ SRM_SAMYANGFOOD 부서관리 공통 패턴

(2026-05-04 추가) — KDSCont 도 함께 비교해 본 결과, 두 시스템의 공통점이 단순 우연이 아니라 **동일 SI 벤더의 ERP 프레임워크 표준 청사진** 임이 확인됨. 그래서 이 공통 패턴이 사실상 **한국 ERP/SI 시장의 부서관리 표준** 으로 봐도 됨.

## C.1 결정적 발견 — 같은 SI 벤더 산출물

| 항목 | KDSCont | SRM_SAMYANGFOOD |
|---|---|---|
| 패키지 root | `com.st_ones.eversrm` | `com.st_ones.everadmin` |
| 부서 테이블 | **STOCOGDP** | **STOCOGDP** (동일) |
| 화면 코드 체계 | MOGA0030/0031/0032 | DEPT01_010/020/030 |
| 베이스 클래스 | BaseController / BaseService | BaseController / BaseService |
| 매퍼 방식 | MyBatis XML + Mapper interface | MyBatis XML + Mapper interface |

→ **stones (st_ones)** 라는 동일 SI 의 ERP 프레임워크 위 다른 프로젝트. 두 시스템의 공통점 = **stones 표준** = 한국 ERP/SI 의 사실상 표준.

---

## C.2 데이터 모델 — 95% 일치하는 부분

### C.2.1 테이블 / PK 구조
```
STOCOGDP (부서 마스터)
  PK : (GATE_CD, BUYER_CD, DEPT_CD)
  ├ 멀티테넌시 : GATE_CD (시스템 단위) + BUYER_CD (회사 단위)
  └ 부서 식별 : DEPT_CD
```

### C.2.2 핵심 컬럼 (둘 다 동일)
| 컬럼 | 의미 | 비고 |
|---|---|---|
| `DEPT_CD` | 부서 코드 (PK) | **사용자 직접 입력** + 중복 체크 (auto-gen 아님) |
| `DEPT_NM` | 한국어 부서명 | KDSCont 는 `DEPT_NM_ENG` 영어 칼럼도 있음 |
| `PARENT_DEPT_CD` | 상위 부서 코드 | self-FK; level 1 은 BUYER_CD 가리킴 |
| `LVL` | 깊이 (0=회사 root) | KDSCont 0~4 / SRM 0~9 |
| `DEPT_TYPE` | 단계 enum (100~400) | ★ 핵심 — 100단위 4단계 |
| `SEQ` | 같은 부모 안에서 정렬 | |
| `ACC_CODE` | 회계/Cost Center 코드 | |
| `TEAM_LEADER_USER_ID` | 부서장 user_id (1명) | m:n 아님, 단일 |
| `DIVISION_YN` | 사업부 여부 | |
| `DEL_FLAG` | 소프트 삭제 ('0'/'1') | |
| `REG_DATE`, `MOD_DATE` | 감사 타임스탬프 | |
| `REG_USER_ID`, `MOD_USER_ID` | 감사 사용자 | |
| `ITEM_CLS1` ~ `ITEM_CLS{depth}` | 비정규화 path 세그먼트 | breadcrumb 용 |

### C.2.3 DEPT_TYPE 100/200/300/400 컨벤션 (★ stones 표준)
| 코드 | KDSCont | SRM | 한국 조직 의미 |
|---|---|---|---|
| 100 | 부 (Division) | Division | 본부/사업부 |
| 200 | 팀 (Team) | Department | 부 |
| 300 | 조 (Section) | Team | 팀 |
| 400 | 계 (Sub-section) | SubTeam | 파트 |

핵심 : **100단위 부여, 4-단계 cap, enum 기반 타입 분리**. 한국 SI 시장 사실상 표준.

### C.2.4 계층 표현 — 비정규화 path 컬럼
```
ITEM_CLS1=회사명  ITEM_CLS2=부  ITEM_CLS3=팀  ITEM_CLS4=조  ITEM_CLS5=계
ITEM_CLS_PATH_NM = "회사명 > 부 > 팀 > 조"  (concat)
```
양쪽 모두 `parent_dept_cd` 만으로는 안 풀고 path 세그먼트를 박아둠 → 트리·검색·breadcrumb 한 방.

### C.2.5 멀티테넌시 — `GATE_CD + BUYER_CD` 복합
- `GATE_CD` : 시스템/오퍼레이션 단위 (super-user 만 관리)
- `BUYER_CD` : 회사 단위
- 모든 부서 쿼리는 `WHERE GATE_CD=? AND BUYER_CD=?` 필수.

---

## C.3 UI 패턴 — 동일한 화면 구성

### C.3.1 화면 2종 세트 (★)
| 화면 | KDSCont | SRM |
|---|---|---|
| 4-단계 그리드 드릴다운 | MOGA0030 | DEPT01_010 |
| 트리뷰 + in-cell edit | MOGA0031/0032 | DEPT01_020 |
| 부서 상세 팝업 | (그리드 cell 클릭) | DEPT01_020P01 |
| 부서 선택 재사용 팝업 | SP0067/0066 | DEPT01_030 |

### C.3.2 그리드 드릴다운
- 4 패널 grid: LV1 / LV2 / LV3 / LV4
- 라디오로 활성 grid 전환
- LV1 cell 클릭 → LV2 cascade 로드 → ...

### C.3.3 트리뷰 + 인라인 편집
- 회사 root (LV0) 부터 풀 트리 펼침
- ACC_CODE / 부서장 등 selected row 만 편집 → hidden grid 모아서 일괄 저장

### C.3.4 개인정보 마스킹 (★ 양쪽 동일)
- `GETUSERNAME(gateCd, userId, langCd)` 함수가 마스킹 처리
- 첫글자 + `*` + 마지막 N자 (예: `홍*동`, `J*n D*e`)

### C.3.5 사용자 입력 + 중복 체크 (auto-gen 아님)
- DEPT_CD 사용자 직접 입력 → save 시 unique 체크
- SAP/외부 시스템 코드 매핑을 위한 의도적 사용자 제어

---

## C.4 컨벤션 공통점 — invyone 과 다른 부분

| | stones (KDSCont · SRM) | invyone |
|---|---|---|
| 매퍼 | XML + Mapper interface (`@Mapper`) | XML namespace 만, **Mapper interface 금지** |
| DTO | Map + 일부 VO | Map<String, Object> 만 (DTO 금지) |
| 화면 코드 | 4-digit (MOGA0030 / DEPT01_010) | URL 기반 |
| Save 패턴 | MyBatis MERGE / UPSERT | INSERT / UPDATE 분리 |
| 다국어 | DEPT_NM + DEPT_NM_ENG | 미지원 |
| 부서 코드 | 사용자 입력 + 중복체크 | 자동 생성 (`DEPT_<n>`) |

---

## C.5 Invyone 에 시사하는 것

### C.5.1 받아들여야 할 것 (★ 한국 SI 표준)
- **DEPT_TYPE = 100/200/300/400** 4단계 enum (현재 invyone 은 dept/team/temp 3종 → 표현력 부족)
- **`LVL` 숫자 컬럼**
- **`ITEM_CLS1~5` 비정규화 path** + `ITEM_CLS_PATH_NM` 자동 갱신
- **`ACC_CODE`** (Cost Center)
- **`DIVISION_YN`**
- **`REG_USER_ID / MOD_USER_ID / MOD_DATE`** 감사 컬럼
- **`DEL_FLAG`** 소프트삭제 (현재 hard delete)

### C.5.2 UI 에서 받아들여야 할 것
- **4-단계 그리드 드릴다운** 화면 (현재 invyone 은 단일 트리만)
- **부서 선택 팝업** 컴포넌트 (재사용)
- **부서장 user picker + 개인정보 마스킹**

### C.5.3 받아들이지 말 것 (invyone 이 더 나은 부분)
- **GATE_CD + BUYER_CD 2단계 멀티테넌시** → invyone 의 단일 `COMPANY_CODE + '*'` 가 더 깔끔.
- **`@Mapper` interface** → invyone 의 sqlSession 직접 사용이 더 가볍고 CLAUDE.md 원칙과 부합.
- **사용자 직접 입력 DEPT_CD** → 외부 시스템 매핑 필요할 때 옵션으로만, 기본 자동생성 유지.
- **다국어 컬럼** → 진짜 글로벌 진출 전엔 over-engineering, 나중에.

### C.5.4 stones 모델에 없는데 invyone 이 이미 더 나은 부분
- 사용자 ↔ 부서 m:n + IS_PRIMARY (stones 는 1:1)
- 시작/종료 일자 (START_DATE/END_DATE)
- 위치 정보 (LOCATION/ADDRESS)
- React 컴포넌트화

---

## C.6 결론 — 우선순위 보강

본문 §3 의 우선순위에서 **확신도가 올라간 항목** (KDSCont 에서도 동일 패턴 확인):

1. ✓ **DEPT_TYPE 4-단계 enum (100/200/300/400)** — 한국 SI 표준
2. ✓ **ACC_CODE 회계 코드** — 한국 SI 표준
3. ✓ **변경 이력 (MOD_DATE / MOD_USER_ID)** — 한국 SI 표준
4. ✓ **DIVISION_YN** — 한국 SI 표준
5. ✓ **소프트 삭제 (DEL_FLAG)** — 한국 SI 표준
6. ✓ **부서장 user picker + 마스킹** — 한국 SI 표준
7. ✓ **`ITEM_CLS1~N` 비정규화 path** — 한국 SI 표준 (성능·breadcrumb 동시 해결)

특히 **`ITEM_CLS1~N` 비정규화 path** 는 양쪽 모두 채택한 만큼, invyone 도 이걸 따르면 깊은 트리 성능 + breadcrumb 표시를 한 번에 잡을 수 있음.

---

## C.7 참고 코드 위치

### KDSCont
```
src/main/java/com/st_ones/eversrm/manager/org/web/MOGA0030Controller.java   (4-단계 grid)
src/main/java/com/st_ones/eversrm/manager/org/web/MOGA0031Controller.java   (트리뷰)
src/main/java/com/st_ones/eversrm/manager/org/web/MOGA0032Controller.java   (트리뷰 변형)
src/main/java/com/st_ones/eversrm/manager/org/web/MOGA0020Controller.java   (회사관리)
src/main/java/com/st_ones/eversrm/manager/org/web/MOGA0010Controller.java   (게이트관리)
src/main/resources/mappers/com/st_ones/eversrm/manager/org/MOGA0030~32Mapper.xml
src/main/webapp/WEB-INF/views/eversrm/manager/org/MOGA0030~32.jsp
```

### SRM_SAMYANGFOOD
```
src/main/java/com/st_ones/everadmin/system/dept/web/DEPT01_Controller.java
src/main/java/com/st_ones/everadmin/system/dept/service/DEPT01_Service.java
src/main/java/com/st_ones/everadmin/system/dept/DEPT01_Mapper.java
src/main/java/com/st_ones/batch/gwDept/web/GwDept.java                       (그룹웨어 sync 배치)
```
