개요
- Roblox Server Authority(베타)는 향후 서버 기반 상태 확정 기능을 제공한다. 본 설계는 기존 서버 스크립트 중심 구조를 사용하되, Server Authority 베타가 활성화된 경우
CharacterService를 확장해 물리/상태 확정을 수행하도록 여지를 남긴다. 해당 기능은ServerScriptService·ServerStorage구성과 직접 연결되지 않는다. - Instance Streaming(StreamingEnabled) 환경에서 플레이어가 근처의 캐릭터만 받아도 핵심 정보가 유지되도록
CharacterInfo폴더를 통해 필요한 데이터만 스트리밍한다. - 플레이어 캐릭터뿐 아니라
Workspace에 위치한 가상 캐릭터(NPC, 연출용 모델)에도 동일한 조합형 구조를 적용해 관리 로직을 재사용한다.
캐릭터 구조
DataModel
├─ Workspace
│ └─ CharacterModel[tag=Character]
│ └─ CharacterInfo (Folder)
│ ├─ InventoryInfos (Folder)
│ ├─ StatInfos (Folder)
│ └─ ... 확장 컴포넌트
캐릭터는 이렇게 workspace 아래서 모델을 만들어서 tag 로 "Character" 를 붙이고
CharacterInfo 란 폴더를 만들고
-Infos 란 컴포넌트를 만들어서 추가적인 정보를 가지게 한다
조합으로 향후 설계도 더 간단하게
CharacterModel은CollectionService의Character태그가 붙은Model로 정의한다. 플레이어 캐릭터는 입장 시 매핑되고, 가상 캐릭터는Workspace아래에서 독립적으로 운용된다.CharacterInfo는 PascalCase 하위 폴더/ValueObject로 구성되며, Instance Streaming 시 필요한 서브트리만 전송되도록 범위를 제어한다.CharacterModules/CharacterInfo는CharacterInfoWrapper,CharacterInfoManager,CharacterInfoBuilder모듈을 제공해CharacterInfo서브트리에 대한 접근, 검증, 생성 로직을 서버/클라이언트 양쪽에서 일관되게 사용하도록 한다.
설계 원칙
- 조합 우선:
CharacterInfo하위 폴더는 독립된 도메인 컴포넌트이며,CharacterInfoWrapper를 통해 안전하게 접근한다. - 명명 규칙 준수: 모든 폴더·모듈·필드는
docs/guides/frameworks/scripting/code-style.md및naming-style.md가이드를 따른다. - 스트리밍 최적화:
StreamingEnabled를 활용해 근접 플레이어에게만 세부 정보를 배포한다.
모듈 구조
GameModules/CharacterModules/CharacterInfo
- 적용 범위: 플레이어 캐릭터, NPC, 연출용 가상 캐릭터 등
CollectionService의Character태그가 부여된 모든Model. - 선행 조건:
CharacterInfo폴더가 존재하거나CharacterInfoBuilder를 통해 생성할 수 있으며, 폴더/ValueObject/Attribute 명명은 PascalCase, naming-style를 따른다.
2. 모듈 책임 요약
CharacterInfo.Wrapper.lua
CharacterInfo 폴더를 Luau 테이블로 감싸 타입 안전 접근, Attribute/Value 검증, 스트리밍 스냅샷 제공, 자동 완성과 오류 메시지 통합 |
| CharacterInfo.Manager.lua | CharacterInfoWrapper 캐싱, DataStore 직렬화/복구 orchestration | 주로 서버 | Server Authority 베타 시 확정 단계 연계 |
| CharacterInfo.Builder.lua | CharacterInfo 폴더 인스턴스 생성, 템플릿 적용 | 서버 | 테스트에서 모의 캐릭터 생성 시에도 사용 |