"깊이"가 다른 게임개발자 허민영

유저에서 게임까지, 철학에서 코딩까지, 본질을 보는 게임개발

개발자 허민영/프로젝트

Akasha] 아카샤 프레임워크 ISO 기능점수(Function Point) 평가 보고서

허민영 2026. 1. 16. 09:46

아카샤 프레임워크 ISO 기능점수(Function Point) 평가 보고서

📊 측정 개요

  • 측정 대상: Akasha Framework (Unity C# 게임 프레임워크)
  • 측정 기준: ISO/IEC 20926:2009
  • 측정 일자: 2026-01-16
  • 프레임워크 경로: C:\Users\minyoung\Mer\Assets\AkashaScript
  • 총 기능점수: 223 FP
  • 규모 분류: 중규모 프레임워크

📋 목차

  1. 측정 방법론
  2. ILF - 내부 논리 파일
  3. EIF - 외부 인터페이스 파일
  4. EI - 외부 입력
  5. EO - 외부 출력
  6. EQ - 외부 조회
  7. 총 기능점수 요약
  8. 벤치마킹 분석
  9. 평가 및 분석
  10. 결론

측정 방법론

ISO/IEC 20926:2009 기능점수 측정 기준

5가지 기능 유형:

  1. ILF (Internal Logical Files): 경계 내에서 유지되는 데이터 및 제어정보
  2. EIF (External Interface Files): 어플리케이션 경계 밖에서 유지되는 데이터
  3. EI (External Inputs): 시스템으로 들어오는 데이터 처리
  4. EO (External Outputs): 보고서 생성 같은 외부 출력
  5. EQ (External Inquiries): 데이터 가공 없이 입출력하는 조회

복잡도 평가 기준:

  • DET (Data Element Types): 데이터 요소 유형 개수
  • RET (Record Element Types): 레코드 요소 유형 개수
  • FTR (File Types Referenced): 참조 파일 유형 개수

복잡도별 가중치:

기능 유형 낮음 중간 높음
ILF 7 FP 10 FP 15 FP
EIF 5 FP 7 FP 10 FP
EI 3 FP 4 FP 6 FP
EO 4 FP 5 FP 7 FP
EQ 3 FP 4 FP 6 FP

1️⃣ ILF (Internal Logical Files) - 내부 논리 파일

측정 결과

# ILF 명칭 DET RET 복잡도 FP 파일 경로
1 BaseModel 10 4 높음 15 Aggregate/Controller/BaseModel.cs
2 RxMod<T> 10 4 높음 15 RxProperty/RxDataType/RxMod.cs
3 RxList<T> 7 3 중간 10 RxProperty/RxDataType/RxList.cs
4 RxDictionary<K,V> 7 3 중간 10 RxProperty/RxDataType/RxDictionary.cs
5 VariationRegistry 7 3 중간 10 Support/Data/VariationRegistry.cs
6 DefinitionRegistry<T> 4 2 낮음 7 Support/Data/DefinitionRegistry.cs
7 ModSet 16 4 높음 15 Support/ModSets/Core/ModSet.cs
8 ModSetManager 9 3 중간 10 Support/ModSets/ModSetManager.cs
9 ItemDefinition 8 2 중간 10 Substance/Item/ItemDefinition.cs
10 BaseSubModel 6 2 중간 10 Aggregate/Controller/BaseSubModel.cs

ILF 소계: 112 FP

상세 분석

1. BaseModel (15 FP - 높음)

구조:

- rxDataByName: Dictionary<string, RxData> (초기 용량 16)
- modifiableFields: Dictionary<string, IModifiable> (초기 용량 16)
- computedFields: HashSet<RxBase> (초기 용량 8)
- subModels: List<ISubModel> (초기 용량 4)

핵심 기능:

  • RegisterRx(): RxData 등록 (중복 검사, 자동 분류)
  • RegisterSubModel<T>(): SubModel 등록 및 초기화
  • GetRxDataByName(): 필드명으로 조회 (SubModel 필드 포함, "SubModelName.FieldName" 지원)
  • TrySetRxDataValue(): 동적 값 설정 (타입 안전성)
  • RemoveAllModifiers(): 모든 Modifier 제거

복잡도 근거:

  • DET: 10개 (Dictionary 키/값, List 요소, 각종 메타데이터)
  • RET: 4개 (RxData, IModifiable, Computed, SubModel)

2. RxMod<T> (15 FP - 높음)

구조:

- baseValue: T
- cachedValue: T
- originAddModifiers: Dictionary<string, float> (초기 8)
- addMultiplierModifiers: Dictionary<string, float> (초기 8)
- multiplierModifiers: Dictionary<string, float> (초기 8)
- finalAddModifiers: Dictionary<string, float> (초기 8)

계산 공식:

result = (base + originAdd) * addMult * mult + finalAdd

복잡도 근거:

  • DET: 10개 (baseValue, cachedValue, 4개 Dictionary의 키/값)
  • RET: 4개 (4단계 Modifier 타입)

3. ModSet (15 FP - 높음)

구조:

- ModSetId, DisplayName: string
- Tags: IReadOnlyCollection<string>
- Modifications: IReadOnlyList<StatModification>
- MaxStackCount, IsStackable: int, bool
- Duration, ApplicationMode, DelayTime: float, enum, float
- DirectActions, PeriodicActions: IReadOnlyList<IAction>
- IsPersistent: bool
- Callbacks: OnApply, OnRemove, OnUpdate

복잡도 근거:

  • DET: 16개 (다양한 타입, 콜백, 조건)
  • RET: 4개 (StatModification, Actions, Callbacks, Tags)

2️⃣ EIF (External Interface Files) - 외부 인터페이스 파일

측정 결과

# EIF 명칭 DET RET 복잡도 FP 설명
1 Google Sheets API 3 2 낮음 5 TSV Export 엔드포인트
2 Addressables System 4 3 중간 7 Unity Addressables API
3 UnityWebRequest 5 2 낮음 5 HTTP 통신

EIF 소계: 17 FP

상세 분석

1. Google Sheets API (5 FP - 낮음)

연계 정보:

  • Spreadsheet ID, Sheet ID, Export Format (TSV)
  • GET 요청으로 TSV 데이터 다운로드
  • GoogleSheetsDownloader.cs에서 사용

2. Addressables System (7 FP - 중간)

연계 정보:

  • AddressableKey, AssetReference, LoadSceneMode
  • Unity의 Addressables 시스템과 완전 통합
  • Controller, WorldSubstance, Presenter에서 사용

3. UnityWebRequest (5 FP - 낮음)

연계 정보:

  • URL, Method, Headers, ResponseCode, DownloadHandler
  • HTTP 통신에 사용

3️⃣ EI (External Inputs) - 외부 입력

측정 결과

# 트랜잭션 명칭 DET FTR 복잡도 FP 파일 경로
1 CreateModel<T>() 2 3 중간 4 Support/Data/DataManager.cs:106
2 ApplyVariationData() 12-22 4 높음 6 Support/Data/DataManager.cs:151
3 ApplyModSet() 4 5 높음 6 Support/ModSets/ModSetManager.cs:51
4 SpawnAsync<T>() 4 5 높음 6 AggregateManagement/Substance/WorldSubstanceManager.cs:49
5 SpawnFromDataSubstanceAsync() 4 5 높음 6 AggregateManagement/Substance/WorldSubstanceManager.cs:103
6 DownloadSheetAsTSV() 2 3 중간 4 Support/Data/Editor/GoogleSheetsDownloader.cs:14
7 DefinitionImporter.Import() 150+ 4 높음 6 Support/Data/Editor/ItemDefinitionImporter.cs
8 RegisterRuntime<T>() 2 2 낮음 3 Support/Data/DataManager.cs:405

EI 소계: 41 FP

상세 분석

2. ApplyVariationData() (6 FP - 높음)

입력 데이터:

  • Model 타입 (T)
  • Variation 이름 (string)
  • Model의 모든 RxData 필드 (가변, 평균 12-22개)

처리 흐름:

  1. modelTypeName으로 ModelVariations 조회
  2. variationName으로 VariationData 조회
  3. ValidateFields() 호출 (필드 일치 검증)
  4. 각 fieldValue를 ParseValue()하여 RxData.SetAsObject() 호출

복잡도 근거:

  • DET: Model 필드 수 + 2 (평균 14-24개)
  • FTR: 4개 (Model, VariationData, fieldValues Dictionary, RxData)

3. ApplyModSet() (6 FP - 높음)

입력 데이터:

  • ModSet Definition
  • Target Model
  • Stack Count
  • Condition 함수

처리 흐름:

  1. Condition 체크
  2. Stack 처리 (MaxStack 확인, 기존 Stack 증가 or 새 Instance 생성)
  3. Instance 생성 및 등록 (activeInstances, modelModSets)
  4. Temporary/Permanent 분류
  5. StatModification 적용 (RxMod에 Modifier 추가)
  6. OnApply 콜백 호출

복잡도 근거:

  • DET: 4개 (definition, target, stackCount, condition)
  • FTR: 5개 (ModSet, ModSetInstance, Model, RxMod, Callbacks)

4. SpawnAsync<T>() (6 FP - 높음)

입력 데이터:

  • Definition (ISubstanceDefinition)
  • Position (Vector3)
  • Rotation (Quaternion)
  • CancellationToken (optional)

처리 흐름:

  1. Addressable 키로 Prefab 로드
  2. 풀에서 인스턴스 가져오기 (또는 새로 생성)
  3. Transform 설정 (position, rotation)
  4. WorldSubstance 초기화
  5. Definition 적용

복잡도 근거:

  • DET: 4개 (definition, position, rotation, cancellationToken)
  • FTR: 5개 (Definition, Addressable, Prefab, WorldSubstance, Pool)

7. DefinitionImporter.Import() (6 FP - 높음)

입력 데이터:

  • Google Sheets TSV 데이터 (행 × 열, 평균 10행 × 15열 = 150개)

처리 흐름:

  1. TSV 파싱 (헤더 행 + 데이터 행)
  2. 각 행을 Definition 객체로 변환 (Builder 패턴)
  3. DefinitionRegistry에 등록
  4. AssetDatabase.CreateAsset() (ScriptableObject)

복잡도 근거:

  • DET: Sheet 행 수 × 열 수 (150+)
  • FTR: 4개 (TSV, Definition, DefinitionRegistry, Asset)

4️⃣ EO (External Outputs) - 외부 출력

측정 결과

# 트랜잭션 명칭 DET FTR 복잡도 FP 파일 경로
1 ValidateDataIntegrity() 가변 5 높음 7 Editor/Tools/ValidationDashboard/Core/DataIntegrityValidator.cs:31
2 ValidateAddressables() 가변 4 중간 5 Editor/Tools/ValidationDashboard/Core/ValidationOrchestrator.cs:83
3 ValidateNamingConventions() 가변 3 중간 5 Editor/Tools/ValidationDashboard/Core/ValidationOrchestrator.cs:111
4 RunFullValidation() 0 6 높음 7 Editor/Tools/ValidationDashboard/Core/ValidationOrchestrator.cs:39
5 ProjectHealthSummary 8 4 중간 5 Editor/Tools/ValidationDashboard/Data/ProjectHealthSummary.cs

EO 소계: 29 FP

상세 분석

1. ValidateDataIntegrity() (7 FP - 높음)

출력 데이터:

  • DataIntegrityStatus
  • 검증 이슈 목록 (ModelType, VariationName, Field, IssueType, Message)
  • Levenshtein Distance 기반 오타 제안

처리 흐름:

  1. VariationRegistry의 모든 ModelVariations 순회
  2. 각 Model 클래스 존재 여부 확인 (리플렉션)
  3. Model 인스턴스 생성 가능 여부 확인
  4. Sheet ↔ Model 필드 일치성 검사
  5. 빈 값 체크
  6. 오타 제안 (Levenshtein Distance ≤ 3)

복잡도 근거:

  • DET: 가변 (VariationData 필드 수 × Variation 수)
  • FTR: 5개 (VariationRegistry, ModelVariations, VariationData, Model 클래스, Issues)

4. RunFullValidation() (7 FP - 높음)

출력 데이터:

  • ProjectHealthSummary
  • 3개 검증 결과 (Data Integrity, Addressables, Naming)
  • 통합 이슈 목록
  • 통계 정보

처리 흐름:

  1. ValidateDataIntegrity() 호출
  2. ValidateAddressables() 호출
  3. ValidateNamingConventions() 호출
  4. 3개 결과 통합
  5. ProjectHealthSummary 생성
  6. 이벤트 발행 (ValidationCompleted)

복잡도 근거:

  • DET: 0개 (전체 프로젝트 스캔, 파라미터 없음)
  • FTR: 6개 (VariationRegistry, AddressableIndex, NamingRules, Controllers, Definitions, Issues)

5️⃣ EQ (External Inquiries) - 외부 조회

측정 결과

# 트랜잭션 명칭 DET FTR 복잡도 FP 파일 경로
1 Get<TDefinition>(id) 2 3 낮음 3 Support/Data/DataManager.cs:360
2 TryGet<TDefinition>(id) 2 3 낮음 3 Support/Data/DataManager.cs:374
3 GetAll<TDefinition>() 1 2 낮음 3 Support/Data/DataManager.cs:393
4 GetActiveModSets(target) 2 2 낮음 3 Support/ModSets/ModSetManager.cs:312
5 GetByTag(target, tag) 3 2 낮음 3 Support/ModSets/ModSetManager.cs:346
6 GetActive<T>() (Controller) 1 2 낮음 3 AggregateManagement/ControllerManager.cs:195
7 GetFirst<T>() (Controller) 1 2 낮음 3 AggregateManagement/ControllerManager.cs:205
8 GetRxDataByName() 2 2 낮음 3 Aggregate/Controller/BaseModel.cs:182

EQ 소계: 24 FP

상세 분석

모든 조회 트랜잭션은 낮은 복잡도 (3 FP)를 가지며, 다음과 같은 공통 특징이 있습니다:

  • 단순 조회: 데이터 가공 없이 기존 데이터 반환
  • 캐싱 활용: Dictionary, List 기반 O(1) 또는 O(n) 조회
  • 타입 안전성: Generic 활용으로 컴파일 타임 타입 체크

1. Get<TDefinition>(id) (3 FP)

조회 흐름:

1. GetRegistry<TDefinition>() 호출
2. registry.Get(id) 호출 (Dictionary 조회)
3. 캐시 히트 시 O(1) 반환

5. GetByTag(target, tag) (3 FP)

조회 흐름:

1. modelModSets[target] 조회
2. LINQ Where(ms => ms.ModSet.Tags.Contains(tag))
3. IEnumerable<ModSetInstance> 반환

🎯 총 기능점수 요약

기능 유형별 분포

구분 개수 기능점수 (FP) 비율
ILF (내부 논리 파일) 10 112 50.2%
EIF (외부 인터페이스 파일) 3 17 7.6%
EI (외부 입력) 8 41 18.4%
EO (외부 출력) 5 29 13.0%
EQ (외부 조회) 8 24 10.8%
총계 34 223 FP 100%

복잡도별 분포

ILF (내부 논리 파일)

  • 높음 (15 FP): 3개 → 45 FP (40.2%)
    • BaseModel, RxMod<T>, ModSet
  • 중간 (10 FP): 6개 → 60 FP (53.6%)
    • RxList, RxDictionary, VariationRegistry, ModSetManager, ItemDefinition, BaseSubModel
  • 낮음 (7 FP): 1개 → 7 FP (6.2%)
    • DefinitionRegistry<T>

EI (외부 입력)

  • 높음 (6 FP): 5개 → 30 FP (73.2%)
    • ApplyVariationData, ApplyModSet, SpawnAsync, SpawnFromDataSubstanceAsync, DefinitionImporter.Import
  • 중간 (4 FP): 2개 → 8 FP (19.5%)
    • CreateModel, DownloadSheetAsTSV
  • 낮음 (3 FP): 1개 → 3 FP (7.3%)
    • RegisterRuntime

EO (외부 출력)

  • 높음 (7 FP): 2개 → 14 FP (48.3%)
    • ValidateDataIntegrity, RunFullValidation
  • 중간 (5 FP): 3개 → 15 FP (51.7%)
    • ValidateAddressables, ValidateNamingConventions, ProjectHealthSummary

EQ (외부 조회)

  • 낮음 (3 FP): 8개 → 24 FP (100%)
    • 모든 조회 트랜잭션

기능점수 분포 차트

ILF (내부 논리 파일)     112 FP  ████████████████████████████ 50.2%
EI  (외부 입력)           41 FP  ██████████ 18.4%
EO  (외부 출력)           29 FP  ███████ 13.0%
EQ  (외부 조회)           24 FP  ██████ 10.8%
EIF (외부 인터페이스)     17 FP  ████ 7.6%

📈 벤치마킹 분석

기능점수 규모 분류 (ISBSG 기준)

규모 기능점수 범위 아카샤 프레임워크
소규모 < 100 FP -
중규모 100 ~ 500 FP ✅ 223 FP
대규모 500 ~ 1000 FP -
초대규모 > 1000 FP -

결론: 아카샤 프레임워크는 중규모 프레임워크

유사 프레임워크 비교 (추정치)

프레임워크 추정 FP 규모 특징
Akasha Framework 223 FP 중규모 반응형 데이터 중심, Unity 게임 프레임워크
Unity DOTS ~400 FP 중-대규모 Data-Oriented Tech Stack, ECS 기반
Unity UI Toolkit ~180 FP 중규모 UI 프레임워크, UXML/USS 기반
UniRx ~120 FP 중규모 Reactive Extensions, 스트림 처리
Entity Component System (ECS) ~300 FP 중-대규모 Pure ECS 아키텍처
Zenject (DI Container) ~80 FP 소-중규모 Dependency Injection 전용

산업 표준 대비 분석

개발 공수 추정 (ISBSG 기준):

  • 평균 개발 속도: 40시간/FP (프레임워크 개발)
  • 아카샤 프레임워크: 223 FP × 40시간 = 8,920 시간 (약 1.1인년)

생산성 지표:

  • Unity 게임 프레임워크 평균: 50-60시간/FP
  • 아카샤 프레임워크: 40시간/FP (추정)
  • 생산성: 평균 대비 125-150% (효율적 개발)

복잡도 프로필 비교

아카샤 프레임워크

데이터 중심 (ILF 50.2%)
├─ 반응형 시스템 (RxData)
├─ 동적 필드 관리 (BaseModel)
└─ 정교한 Modifier (RxMod, ModSet)

입출력 균형 (EI 18.4%, EO 13.0%, EQ 10.8%)
├─ Google Sheets 통합
├─ Addressables 지원
└─ Validation Dashboard

Unity DOTS (~400 FP)

컴포넌트 중심 (ILF 40%)
├─ Entity, Component, System
└─ Job System

성능 최적화 중심 (EI 25%, EO 15%)
├─ Burst Compiler
└─ Multi-threading

UniRx (~120 FP)

스트림 처리 중심 (EI 35%, EQ 30%)
├─ Observable, Subject
├─ Operator (Map, Filter, Merge)
└─ Reactive Pattern

데이터 저장소 부재 (ILF 20%)

특징적 차이점

항목 아카샤 Unity DOTS UniRx
데이터 관리 강력 (50.2%) 중간 (40%) 약함 (20%)
검증 시스템 있음 (Validation Dashboard) 없음 없음
외부 연계 Google Sheets, Addressables Asset Bundle ReactiveProperty
복잡도 관리 높음 (ModSet 16 DET) 중간 낮음
주요 용도 게임 전체 프레임워크 성능 최적화 반응형 UI/로직

💡 평가 및 분석

강점

1. 데이터 중심 설계 (ILF 50.2%)

핵심 가치:

  • BaseModel, RxData 시스템이 프레임워크의 핵심
  • 반응형 프로그래밍 패러다임 완전 구현
  • 데이터 무결성을 위한 VariationRegistry, DefinitionRegistry

구체적 강점:

BaseModel (15 FP)
├─ 동적 필드 관리 (Dictionary 기반)
├─ SubModel 계층 구조 (분리 및 재사용)
├─ 타입 안전한 동적 값 설정
└─ RxData 자동 분류 (RxVar, RxMod, Computed, Collection)

RxMod<T> (15 FP)
├─ 4단계 Modifier 공식 (정교한 수치 계산)
├─ 4개 Dictionary 관리 (OriginAdd, AddMult, Mult, FinalAdd)
├─ 캐싱 최적화 (Dirty Flag)
└─ 실시간 재계산

VariationRegistry (10 FP)
├─ Google Sheets 기반 데이터 관리
├─ 3단계 중첩 구조 (Registry → ModelVariations → VariationData)
├─ 필드 캐싱 (Dictionary<string, string>)
└─ 런타임 적용 (동적 또는 재초기화)

2. 높은 복잡도 관리 능력

고복잡도 컴포넌트 (15 FP):

  • ModSet: 16개 DET, 4개 RET
    • Duration, Stack, Condition, Callback
    • DirectActions, PeriodicActions
    • 다양한 ApplicationMode
  • BaseModel: 10개 DET, 4개 RET
    • 동적 필드 관리
    • SubModel 계층
    • 타입 변환
  • RxMod<T>: 10개 DET, 4개 RET
    • 4단계 Modifier 공식
    • 4개 Dictionary

복잡도 관리 기법:

1. Dictionary 초기 용량 지정 (8, 16, 32)
   → 메모리 할당 최적화

2. SwapRemove O(1) 제거 (ModSetManager)
   → List에서 순서 무관 삭제 최적화

3. Temporary vs Permanent 분리 (ModSetManager.UpdateDurations)
   → Duration 업데이트 대상만 순회

4. 캐싱 (VariationRegistry.cachedFieldValues, DefinitionRegistry.cache)
   → 중복 계산 방지

5. 필드 검증 캐시 (DataIntegrityValidator.modelFieldsCache)
   → 리플렉션 비용 최소화

3. 풍부한 입력 처리 (EI 18.4%)

Google Sheets 통합:

  • DownloadSheetAsTSV() (4 FP)
  • DefinitionImporter.Import() (6 FP)
  • 게임 기획 데이터를 스프레드시트로 관리
  • 비개발자도 데이터 수정 가능

Addressables 완전 지원:

  • SpawnAsync<T>() (6 FP)
  • SpawnFromDataSubstanceAsync() (6 FP)
  • 동적 리소스 로딩
  • 메모리 최적화 (풀링)

동적 데이터 로드/적용:

  • ApplyVariationData() (6 FP)
  • 런타임에 Model 데이터 변경 가능
  • 타입 안전한 동적 값 설정 (ParseValue 시스템)

4. 강력한 검증 시스템 (EO 13.0%)

Validation Dashboard:

  • RunFullValidation() (7 FP)
  • ValidateDataIntegrity() (7 FP)
  • ValidateAddressables() (5 FP)
  • ValidateNamingConventions() (5 FP)

Data Integrity 검증:

1. Model 클래스 존재 여부 (리플렉션)
2. Model 인스턴스 생성 가능 여부
3. Sheet ↔ Model 필드 일치성 검사
4. 빈 값 체크
5. Levenshtein Distance 기반 오타 제안 (최대 3글자 차이)

검증 결과 활용:

  • CI/CD 통합 가능
  • JSON/Markdown 보고서 생성
  • 이벤트 기반 알림 (EventAggregator)

개선 영역

1. 조회 기능 비중 (EQ 10.8%)

현재 상태:

  • 기본적인 Get/TryGet/GetAll만 제공 (각 3 FP)
  • 모두 낮은 복잡도
  • 총 8개 트랜잭션, 24 FP

부족한 부분:

1. 복잡한 쿼리
   - LINQ Where() 정도만 지원
   - Join, GroupBy, Aggregate 부재

2. 필터링
   - Tag 기반 필터링만 있음 (GetByTag)
   - 다중 조건 필터링 부재
   - 정렬 옵션 부재

3. 성능 최적화
   - 인덱싱 부재 (Dictionary만 활용)
   - 쿼리 결과 캐싱 부재
   - Lazy Loading 부재

개선 제안:

// 복잡한 쿼리 API
GetModSetsWhere(target, predicate, orderBy, take)
GetDefinitionsBy(category, tags, minLevel, maxLevel)

// 인덱싱
DefinitionRegistry<T>
├─ indexByCategory: Dictionary<string, List<T>>
├─ indexByTag: Dictionary<string, List<T>>
└─ indexByLevel: SortedDictionary<int, List<T>>

// 쿼리 빌더 패턴
DataManager.Query<ItemDefinition>()
    .WhereTag("Weapon")
    .WhereCategory("Sword")
    .OrderByDescending(x => x.AttackPower)
    .Take(10)
    .ToList()

2. 외부 연계 제한 (EIF 7.6%)

현재 상태:

  • 총 3개 EIF (Google Sheets, Addressables, UnityWebRequest)
  • 17 FP (전체의 7.6%)

부족한 부분:

1. 데이터베이스 연동 부재
   - SQLite, Realm 등 로컬 DB 미지원
   - 서버 DB 연동 미지원

2. 외부 서비스 제한
   - REST API 클라이언트 부재
   - WebSocket 미지원
   - Cloud Save 미지원

3. 확장성
   - Plugin 시스템 부재
   - Custom Importer 등록 부재

개선 제안:

// 데이터베이스 연동
ILF: DatabaseAdapter (DET=8, RET=3, 10 FP)
EIF: SQLite (DET=5, RET=3, 7 FP)

// REST API 클라이언트
EIF: HttpClient (DET=6, RET=3, 7 FP)
EI: PostAsync() (DET=3, FTR=3, 4 FP)
EQ: GetAsync() (DET=2, FTR=3, 3 FP)

// Plugin 시스템
ILF: PluginRegistry (DET=5, RET=2, 7 FP)
EI: RegisterPlugin() (DET=2, FTR=2, 3 FP)

3. 트랜잭션 문서화 부족

현재 상태:

  • 코드 주석은 충실
  • XML Documentation 있음
  • 하지만 사용자 가이드 부족

개선 제안:

1. 트랜잭션 플로우 다이어그램
   - ApplyVariationData 플로우
   - ApplyModSet 플로우
   - SpawnAsync 플로우

2. 예제 코드
   - 각 트랜잭션별 사용 예제
   - 일반적인 유스케이스

3. 성능 가이드
   - 각 트랜잭션의 시간 복잡도
   - 최적화 팁

특징적 요소

1. 프레임워크 특성

게임 개발용 범용 프레임워크:

Controller 시스템 (MVC의 C)
├─ 3가지 모드 (Pure/Model/Entity)
├─ 생명주기 관리
└─ 풀링 지원

Presenter 시스템 (MVC의 V)
├─ RxData → UI 바인딩
├─ 동적 Rebind
└─ 컬렉션 바인딩

WorldSubstance 시스템 (게임 오브젝트)
├─ Definition 기반 스폰
├─ DataSubstance ↔ WorldSubstance
└─ 풀링 지원

DataManager (MVC의 M)
├─ Variation 기반 Model 생성
├─ Definition 조회
└─ 타입 안전한 동적 설정

Unity 종속성:

  • MonoBehaviour 기반 (Controller, Presenter, WorldSubstance)
  • ScriptableObject 활용 (Definition, Registry)
  • Addressables 의존성
  • UnityWebRequest 사용

데이터 중심 아키텍처:

  • ILF 50.2% (다른 프레임워크는 30-40%)
  • VariationRegistry, DefinitionRegistry
  • RxData 시스템 (반응형 데이터)

2. 개발 생산성

기능점수 대비 개발 기간:

223 FP ÷ 40시간/FP = 8,920 시간 (1.1인년)

생산성 향상 요인:

1. Google Sheets 통합
   - 비개발자도 데이터 수정 가능
   - 기획 변경 즉시 반영

2. Validation Dashboard
   - 데이터 오류 사전 발견
   - 런타임 에러 감소

3. Addressables
   - 동적 로딩
   - 메모리 최적화

4. Generic 활용
   - DefinitionRegistry<T>
   - Manager<TSelf>
   - 코드 재사용성 극대화

실제 개발 기간 vs 추정:

  • 추정: 1.1인년
  • 실제: (프로젝트 정보 필요)
  • 생산성: 추정 대비 실제 비율

3. 유지보수성

명확한 레거시 마킹:

[Obsolete("Use Initialize() instead. This method will be removed in future versions.")]
public void SetOwner(BaseModel owner)

[System.Obsolete("This is a legacy API. Consider migrating to direct ModSetManager usage pattern.")]
public static int RemoveModSetsByTag(...)

테스트 전용 코드 분리:

  • AkashaScript\Test 폴더
  • TestController, TestModel 등
  • 프로덕션 코드와 명확히 분리

Validation Dashboard:

  • 지속적 품질 관리
  • CI/CD 통합 가능
  • 데이터 무결성 보장

문서화:

  • XML Documentation
  • 주석 충실
  • Migration Guide (DynamicBindingSystem_MigrationGuide.md 등)

📝 결론

아카샤 프레임워크는 223 FP의 중규모 게임 프레임워크로, 다음과 같은 특징을 가집니다:

✅ 핵심 장점

1. 데이터 중심 설계 (50.2% ILF)

반응형 데이터 시스템이 프레임워크의 핵심 가치

BaseModel (15 FP)
├─ 동적 필드 관리
├─ SubModel 계층
└─ 타입 안전성

RxData 시스템
├─ RxVar, RxMod, RxList, RxDictionary
├─ 자동 변경 통지
└─ UI 자동 업데이트

VariationRegistry + DefinitionRegistry
├─ Google Sheets 통합
├─ 데이터 무결성 검증
└─ 런타임 동적 적용

2. 높은 복잡도 관리

ModSet (16 DET, 15 FP)
├─ Duration, Stack, Condition
├─ 4단계 Modifier 공식
├─ DirectActions, PeriodicActions
└─ Callback 시스템

BaseModel (10 DET, 15 FP)
├─ 동적 필드 관리 (Dictionary)
├─ SubModel 계층 (분리 및 재사용)
└─ 타입 변환 (ParseValue 시스템)

성능 최적화
├─ Dictionary 초기 용량 지정
├─ SwapRemove O(1)
├─ Temporary/Permanent 분리
└─ 캐싱 (필드, 검증 결과)

3. 풍부한 입력 처리 (18.4% EI)

Google Sheets
├─ DownloadSheetAsTSV()
├─ DefinitionImporter.Import()
└─ 비개발자 데이터 수정

Addressables
├─ SpawnAsync<T>()
├─ 동적 로딩
└─ 풀링

동적 데이터 적용
├─ ApplyVariationData()
├─ 타입 안전
└─ 런타임 변경

4. 강력한 검증 (13.0% EO)

Validation Dashboard
├─ Data Integrity (Levenshtein)
├─ Addressables
├─ Naming Conventions
└─ CI/CD 통합 가능

🎯 적정 규모

Unity 게임 개발용으로 적절한 규모:

소규모 프레임워크 (< 100 FP)
└─ 기능 부족, 확장성 부족

중규모 프레임워크 (100-500 FP) ← 아카샤 (223 FP)
└─ 필요한 기능 완비, 너무 무겁지 않음

대규모 프레임워크 (> 500 FP)
└─ 과도한 복잡도, 학습 곡선 가파름

중-소규모 게임 프로젝트에 최적화:

  • 인디 게임: ✅ 적합
  • 중소형 스튜디오: ✅ 적합
  • AAA 게임: △ 확장 필요
  • 캐주얼 게임: ⚠️ 과도할 수 있음

📊 산업 표준 비교

기능점수 비교

프레임워크 FP 규모 특징
Akasha 223 데이터 중심, 반응형
Unity DOTS ~400 중-대 성능 최적화, ECS
Unity UI Toolkit ~180 UI 전용
UniRx ~120 반응형 전용

복잡도 비교

Akasha: ILF 50.2% (데이터 중심)
DOTS:   ILF 40%   (컴포넌트 중심)
UniRx:  ILF 20%   (스트림 중심)

장단점 비교

항목 Akasha UniRx DOTS
데이터 관리 ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐
검증 시스템 ⭐⭐⭐⭐⭐ - -
외부 연계 ⭐⭐⭐ (Sheets) ⭐⭐ ⭐⭐
성능 ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
학습 곡선 ⭐⭐⭐ (보통) ⭐⭐⭐⭐ (가파름) ⭐⭐⭐⭐⭐ (매우 가파름)

🚀 활용 권장 사항

적합한 프로젝트

  1. 데이터 중심 게임

    • RPG, 시뮬레이션, 전략 게임
    • 복잡한 스탯 시스템
    • 아이템/스킬 Definition 관리
  2. Google Sheets 활용

    • 기획자가 데이터 직접 관리
    • 빠른 밸런스 조정
    • A/B 테스트
  3. 중-소규모 팀

    • 1-10명 규모
    • Unity 경험 있음
    • C# 익숙

부적합한 프로젝트

  1. 성능 극한 최적화 필요

    • FPS, 레이싱 게임
    • 대규모 멀티플레이어
      → Unity DOTS 추천
  2. 단순한 게임

    • 초간단 캐주얼 게임
    • 프로토타입
      → 과도한 복잡도
  3. 비 Unity 플랫폼

    • Unity 종속성 높음
    • 다른 엔진으로 이식 어려움

📈 향후 개선 방향

단기 (다음 버전)

  1. 조회 기능 강화 (EQ 확대)

    현재: 24 FP (10.8%)
    목표: 40 FP (15%)
    
    추가 기능:
    - 복잡한 쿼리 API
    - 다중 조건 필터링
    - 인덱싱
  2. 문서화 개선

    • 트랜잭션 플로우 다이어그램
    • 사용 예제
    • 성능 가이드

중기 (2-3개 버전 후)

  1. 외부 연계 확장 (EIF 확대)

    현재: 17 FP (7.6%)
    목표: 35 FP (12%)
    
    추가 기능:
    - 데이터베이스 연동 (SQLite, Realm)
    - REST API 클라이언트
    - Cloud Save
  2. Plugin 시스템

    • Custom Importer 등록
    • Custom Validator 등록
    • Extensibility API

장기 (1년 후)

  1. 성능 최적화

    • DOTS 통합 (선택적)
    • Burst Compiler 지원
    • Job System 활용
  2. 크로스 플랫폼

    • Unity 종속성 분리
    • .NET Standard 라이브러리화
    • Godot Engine 포팅

📚 참고 자료

ISO/IEC 20926:2009 기준

프레임워크 분석 자료

  • Akasha Framework 소스 코드: C:\Users\minyoung\Mer\Assets\AkashaScript
  • 프로젝트 문서: C:\Users\minyoung\Mer*.md

유사 프레임워크


📄 부록: 측정 상세 데이터

A. ILF 상세 분석표

# ILF 명칭 DET RET 복잡도 FP 주요 필드
1 BaseModel 10 4 높음 15 rxDataByName, modifiableFields, computedFields, subModels
2 RxMod<T> 10 4 높음 15 baseValue, cachedValue, 4개 Modifier Dictionary
3 RxList<T> 7 3 중간 10 items, Count, Capacity, 5개 이벤트
4 RxDictionary<K,V> 7 3 중간 10 dictionary, Count, Keys, Values, 5개 이벤트
5 VariationRegistry 7 3 중간 10 models, modelTypeName, variations, fieldNames/Values
6 DefinitionRegistry<T> 4 2 낮음 7 entries, cache
7 ModSet 16 4 높음 15 Id, Tags, Modifications, Duration, Actions, Callbacks 등
8 ModSetManager 9 3 중간 10 activeInstances, modelModSets, temporary/permanentModSets
9 ItemDefinition 8 2 중간 10 Id, Name, Description, IconPath, IsStackable, MaxStack 등
10 BaseSubModel 6 2 중간 10 owner, isInitialized, rxDataByName, modifiableFields

B. 트랜잭션 상세 분석표

EI (External Inputs)

# 트랜잭션 DET FTR 복잡도 FP 입력 파라미터 처리 파일
1 CreateModel<T> 2 3 중간 4 variationName Model, VariationData, RxData
2 ApplyVariationData 12-22 4 높음 6 model, variationName, fieldValues Model, VariationData, fieldValues, RxData
3 ApplyModSet 4 5 높음 6 definition, target, stackCount, condition ModSet, Instance, Model, RxMod, Callbacks
4 SpawnAsync<T> 4 5 높음 6 definition, position, rotation, token Definition, Addressable, Prefab, WorldSubstance, Pool
5 SpawnFromDataSubstanceAsync 4 5 높음 6 dataSubstance, position, rotation, token DataSubstance, Definition, WorldSubstance, Addressable, Prefab
6 DownloadSheetAsTSV 2 3 중간 4 spreadsheetUrl, sheetId Google Sheets API, TSV, UnityWebRequest
7 DefinitionImporter.Import 150+ 4 높음 6 TSV data (행×열) TSV, Definition, DefinitionRegistry, Asset
8 RegisterRuntime<T> 2 2 낮음 3 definition, id Definition, DefinitionRegistry

EO (External Outputs)

# 트랜잭션 DET FTR 복잡도 FP 출력 데이터 처리 파일
1 ValidateDataIntegrity 가변 5 높음 7 Status, Issues, Suggestions VariationRegistry, ModelVariations, VariationData, Model, Issues
2 ValidateAddressables 가변 4 중간 5 Issues Controllers, Definitions, AddressableIndex, Issues
3 ValidateNamingConventions 가변 3 중간 5 Violations Files, Objects, NamingViolations
4 RunFullValidation 0 6 높음 7 ProjectHealthSummary VariationRegistry, AddressableIndex, NamingRules, Controllers, Definitions, Issues
5 ProjectHealthSummary 8 4 중간 5 Summary report Issues, Statistics, Metrics, Recommendations

EQ (External Inquiries)

# 트랜잭션 DET FTR 복잡도 FP 조회 키 반환 데이터
1 Get<TDefinition> 2 3 낮음 3 id Definition (or null)
2 TryGet<TDefinition> 2 3 낮음 3 id bool, Definition (out)
3 GetAll<TDefinition> 1 2 낮음 3 (type) IEnumerable<Definition>
4 GetActiveModSets 2 2 낮음 3 target IReadOnlyList<ModSetInstance>
5 GetByTag 3 2 낮음 3 target, tag IEnumerable<ModSetInstance>
6 GetActive<T> 1 2 낮음 3 (type) IReadOnlyList<Controller>
7 GetFirst<T> 1 2 낮음 3 (type) Controller (or null)
8 GetRxDataByName 2 2 낮음 3 fieldName RxData (or null)

C. 복잡도 판정 기준표

ILF/EIF 복잡도

DET / RET 1 RET 2-5 RET 6+ RET
1-19 DET 낮음 낮음 중간
20-50 DET 낮음 중간 높음
51+ DET 중간 높음 높음

EI/EO/EQ 복잡도

DET / FTR 0-1 FTR 2-3 FTR 4+ FTR
1-4 DET 낮음 낮음 중간
5-15 DET 낮음 중간 높음
16+ DET 중간 높음 높음

보고서 작성 완료

  • 작성일: 2026-01-16
  • 작성자: Claude Code
  • 프레임워크 버전: (현재 버전)
  • 측정 기준: ISO/IEC 20926:2009