155 lines
6.7 KiB
Markdown
155 lines
6.7 KiB
Markdown
|
|
# NerdNavisCore 범용성 분석
|
||
|
|
|
||
|
|
> **작성일**: 2026-04-14
|
||
|
|
> **조사 범위**: `D:/NerdNavis/FilGoodBandits/DeckBuilding/` Unity 프로젝트
|
||
|
|
> **판정 기준**: C11 개발 관점 원칙 중 "코드의 범용성"
|
||
|
|
>
|
||
|
|
> ⚠️ **상태 변경 (2026-04-14 PD님 지시)**
|
||
|
|
> 기존 `NerdNavisCore`는 **타 회사 소유로 전환**, 담당자 퇴사.
|
||
|
|
> 본 문서는 **참고·아카이브 용도**로만 유지되며, 코드 차용은 하지 않음.
|
||
|
|
> 너드나비스 자체 범용 코어를 별도로 신규 제작 (`06_신규코어_설계안_v1.md` 참조).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 요약
|
||
|
|
|
||
|
|
| 항목 | 결과 |
|
||
|
|
|------|------|
|
||
|
|
| **코어 범용성 점수** | **78 / 100** |
|
||
|
|
| **C11 준수 판정** | ✅ **합격** |
|
||
|
|
| **오염도** | **0%** (프로젝트 특수 로직 없음) |
|
||
|
|
| **다음 프로젝트 재사용률** | ~80% (즉시 사용 가능) |
|
||
|
|
|
||
|
|
## 코어 구성 (91개 파일, ~14,000 lines)
|
||
|
|
|
||
|
|
### 네임스페이스 체계 (모두 `DG.*` 계열)
|
||
|
|
```
|
||
|
|
DG.Core - 기본 인터페이스, 열거형
|
||
|
|
├─ DG.Core.Data - 마스터 테이블, 데이터 파싱
|
||
|
|
├─ DG.Core.Tool - CSV 변환, 에디터 도구
|
||
|
|
├─ DG.InGame.MasterTable - 게임 데이터 베이스
|
||
|
|
DG.Util - 유틸리티
|
||
|
|
├─ DG.Util.Container - 제네릭 컬렉션
|
||
|
|
DG.OutGame - 아웃게임 데이터 (Goods)
|
||
|
|
DG.UI - UI 프레임워크
|
||
|
|
DG.Manager - ObserverManager 등
|
||
|
|
```
|
||
|
|
|
||
|
|
### 구성된 모듈 (✅ 포함됨)
|
||
|
|
| 영역 | 파일 수 | 범용성 | 비고 |
|
||
|
|
|------|--------|--------|------|
|
||
|
|
| **UI 프레임워크** | 4 | ✅ 우수 | UIElements 기반, 전 장르 적용 가능 |
|
||
|
|
| **데이터 테이블 시스템** | 7 | ✅ 우수 | CSV → ScriptableObject 자동 변환 |
|
||
|
|
| **유틸리티 (핵심)** | 44 | ✅ 우수 | 싱글톤, 팩토리, 코루틴, DOTween, 제네릭 컨테이너 |
|
||
|
|
| **에디터 확장** | 7 | ✅ 우수 | 애셋번들, 빌드, 계층창, 씬 단축키 |
|
||
|
|
| **가챠/부스트 시스템** | 7 | 🟡 중간 | 제네릭 기반이나 "가챠/부스트" 개념 하드코딩 |
|
||
|
|
| **전투 인터페이스·열거형** | 2 | 🟡 중간 | 인터페이스는 범용, 열거형 값은 일부 특화 |
|
||
|
|
|
||
|
|
### 누락된 모듈 (❌ 없음)
|
||
|
|
| 영역 | 중요도 | 코멘트 |
|
||
|
|
|------|--------|--------|
|
||
|
|
| **네트워크/통신** | 🔴 높음 | `INetworkService` 인터페이스 없음 → PlayFab 직접 의존 |
|
||
|
|
| **세이브/로드 시스템** | 🔴 높음 | PlayerPrefs만 있음, 구조화된 직렬화 없음 |
|
||
|
|
| **로컬라이제이션** | 🟠 중간 | `LocalType` enum만 있고 관리 시스템 없음 |
|
||
|
|
| **오디오 매니저** | 🟡 낮음 | 게임별 차이가 크므로 선택적 |
|
||
|
|
| **VFX 래퍼** | 🟡 낮음 | 선택적 |
|
||
|
|
|
||
|
|
## 오염도 검증 (핵심)
|
||
|
|
|
||
|
|
### 검사 결과
|
||
|
|
| 검사 항목 | 결과 |
|
||
|
|
|----------|------|
|
||
|
|
| `Card`, `Merchant`, `Shop` 파일명 포함 | **0개** |
|
||
|
|
| `DeckBuilding`, `FilGoodBandits` 네임스페이스 | **0개** |
|
||
|
|
| `eCardType`, `eStageNodeType` 등 게임 특수 enum | **0개** |
|
||
|
|
| 프로젝트 전용 클래스 | **0개** |
|
||
|
|
|
||
|
|
### 프로젝트 전용 코드의 위치 (명확한 분리 확인)
|
||
|
|
```
|
||
|
|
Assets/Script/ (256개, ~31,000 lines, FilGoodBandits 네임스페이스)
|
||
|
|
├─ InGame/ 전투·스테이지·노드 로직
|
||
|
|
├─ UGUI/ 로비·인게임·타이틀 UI
|
||
|
|
├─ Server/ 서버 연동
|
||
|
|
├─ Table/ 자동 생성된 데이터 테이블 클래스
|
||
|
|
├─ Manager/ 게임 매니저
|
||
|
|
├─ My/ 프로젝트 특화 enum/class/value
|
||
|
|
└─ Tool/ 에디터·개발 도구
|
||
|
|
```
|
||
|
|
|
||
|
|
### 경계 명확성
|
||
|
|
- **폴더 분리**: `NerdNavisCore` (외부 프로젝트) ↔ `Assets/Script` (프로젝트 전용)
|
||
|
|
- **네임스페이스 분리**: `DG.*` ↔ `FilGoodBandits.*`
|
||
|
|
- **의존 방향**: 프로젝트 → 코어만 존재, 코어 → 프로젝트 참조 **없음**
|
||
|
|
|
||
|
|
→ **아키텍처적으로 깨끗한 상태**
|
||
|
|
|
||
|
|
## 범용성 판정 (Q&A)
|
||
|
|
|
||
|
|
### Q1. 다음 프로젝트가 덱빌딩이 아니어도 이 코어를 쓸 수 있는가?
|
||
|
|
**✅ YES** (RPG, 퍼즐, 캐주얼, 카드게임 모두 적용 가능)
|
||
|
|
- 즉시 재사용: 70% (UI, 데이터, 유틸, 에디터 도구)
|
||
|
|
- 조정 필요: 20% (가챠·부스트 일반화, 전투 enum 재정의)
|
||
|
|
- 신규 구현: 10% (네트워크, 세이브/로드)
|
||
|
|
|
||
|
|
### Q2. 코어에 누락된 범용 기능은?
|
||
|
|
1. **네트워크 인터페이스** — PlayFab 추상화 필요
|
||
|
|
2. **구조화된 세이브/로드** — JSON/Binary 직렬화 + 암호화
|
||
|
|
3. **로컬라이제이션 매니저** — 다국어 텍스트/애셋 관리
|
||
|
|
|
||
|
|
### Q3. 코어에 있으면 안 될 특수 로직이 있는가?
|
||
|
|
**0% — 완전히 깨끗함**
|
||
|
|
|
||
|
|
## 점수 산정
|
||
|
|
|
||
|
|
```
|
||
|
|
✅ 완벽함 (20/20)
|
||
|
|
UI 프레임워크 4점
|
||
|
|
데이터 테이블 4점
|
||
|
|
디자인 패턴/유틸 4점
|
||
|
|
에디터 도구 4점
|
||
|
|
네임스페이스 분리 4점
|
||
|
|
|
||
|
|
🟡 양호 (15/25)
|
||
|
|
가챠/부스트 시스템 6점 (제네릭이나 용어 특화)
|
||
|
|
전투 인터페이스 5점 (enum 값 일부 특화)
|
||
|
|
컨테이너/패턴 4점
|
||
|
|
|
||
|
|
❌ 누락 (0/10)
|
||
|
|
네트워크 시스템 -3점
|
||
|
|
고급 세이브/로드 -3점
|
||
|
|
로컬라이제이션 -2점
|
||
|
|
오디오/VFX -2점
|
||
|
|
|
||
|
|
🟢 기본 점수 45점 + 위 합계 33점 = 78점
|
||
|
|
```
|
||
|
|
|
||
|
|
## C11 원칙 준수 판단
|
||
|
|
|
||
|
|
| C11 기준 | 코어 상태 | 판정 |
|
||
|
|
|---------|----------|------|
|
||
|
|
| **자원 효율성** | 범용 유틸이 중복 코드 방지 | ✅ |
|
||
|
|
| **코드 구조 직관성** | 네임스페이스·폴더 분리 명확 | ✅ |
|
||
|
|
| **코드 범용성** | 오염 0%, 제네릭·추상 기반 | ✅ |
|
||
|
|
|
||
|
|
→ **합격**. 단, 범용 기능 3가지(네트워크·세이브·로컬라이제이션) 추가 필요
|
||
|
|
|
||
|
|
## 개발실 결정 사항 (향후 작업 기준선)
|
||
|
|
|
||
|
|
### 신규 기능 추가 시 판단 기준
|
||
|
|
- **코어(`DG.*`)에 넣는다**: 게임 장르에 무관하게 유용 + 제네릭·추상 가능
|
||
|
|
- **프로젝트(`FilGoodBandits.*`)에 넣는다**: 카드/덱/몬스터/상점 등 본 프로젝트 특수 개념
|
||
|
|
|
||
|
|
### 금지 사항
|
||
|
|
- ❌ `NerdNavisCore` 안에 `Card*`, `Monster*`, `Shop*` 등 프로젝트 용어가 포함된 파일 생성
|
||
|
|
- ❌ `FilGoodBandits` 네임스페이스를 코어에서 참조
|
||
|
|
- ❌ 코어 enum에 프로젝트 특수값(`eCardType`의 신성폭격 등) 추가
|
||
|
|
|
||
|
|
### 권장 후속 작업
|
||
|
|
1. **단기**: 코어 README / 시작 가이드 문서화
|
||
|
|
2. **중기**: 누락 3개 모듈 추가 (Save/Load, Localization, Network Interface)
|
||
|
|
3. **장기**: 오디오 매니저, VFX 래퍼, State Machine 등 확장
|
||
|
|
|
||
|
|
## 결론
|
||
|
|
|
||
|
|
NerdNavisCore는 **너드나비스 스튜디오의 범용 게임 개발 라이브러리로서 깨끗한 상태를 유지**하고 있으며, 다음 프로젝트에 그대로 재활용 가능한 품질입니다. 개발실은 앞으로 모든 코드 변경에서 이 경계를 지키는 것을 기본 원칙으로 삼습니다.
|