[task] | wikipedia [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage의 효율적 사용 메이플스토리 월드(MapleStory Worlds)에서 `DataStorage`는 사용량 제한이 적용된 리소스입니다. 데이터를 빈번하게 저장하면 할당된 Credit이 빠르게 소진될 수 있으므로, 저장 주기를 최적화하는 것이 중요합니다. 이를 위해 값이 변경될 때마다 즉시 저장하지 않고, `Property`를 활용하여 특정 조건이 충족될 때만 저장하도록 설계하면 Credit 소모량을 줄일 수 있습니다. 일반적으로 다음과 같은 세 가지 상황에서 데이터 저장을 수행하는 것이 권장됩니다. 첫째, [original] | 사용량 제한이 걸린 DataStorage에 데이터를 자주 저장하게 하면 Credit이 부족할 수 있습니다. 그러므로 값이 변경될 때마다 데이터를 저장할 필요가 없는 값들은 Property를 사용해 특정 상황일 때만 저장해 Credit 소모량을 줄일 수 있습니다. 주로 아래 3가지 상황에서 저장하는 것을 권장합니다. 1. **유저 접속 종료 시 저장**: 유저가 접속을 종료하면 데이터를 DataStorage에 저장합니다. 2. **일정 시간마다 저장**: 유저의 갱신된 정보는 주기적으로 저장해야 합니다. 서버에 문제가 생겨 저장에 [chunk_id] | Guides:1073:8
[task] | wikipedia [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage 사용량 제한과 저장 주기 `DataStorage`는 데이터 저장 시 용량과 호출 빈도에 대한 제한이 적용되며, 이를 준수하지 않으면 데이터 손실이나 저장 실패가 발생할 수 있습니다. 이러한 제한 사항과 권장되는 저장 주기를 이해하는 것은 안정적인 데이터 관리를 위해 필수적입니다. ## 저장 용량 제한 사용자별 데이터 저장 공간에는 최대 용량 제한이 존재합니다. 개별 키(Key)에 저장하는 값(Value)의 크기나 전체 사용자 데이터의 총 크기가 이 제한을 초과하면 저장이 실패합니다. 특히 문자열(Str [original] | 크리에이터는 사전 정의된 String 형식을 따르는 함수들을 사용하는 대신 직접 string을 만들어 사용할 수 있습니다. 직접 만들 경우 데이터를 더 짧은 문자열로 저장할 수 있습니다. 아래의 예제와 같이 `_UtilLogic:Split()`과 `문자열 합치기(..)`를 사용해 String을 문자열로 나누고, 합칠 수 있습니다. Table<v> 데이터는 table.concat을 사용할 수 있습니다. ```lua Property: [None] integer meso = 0 [None] integer cash = 0 Method [chunk_id] | Guides:1073:7
[task] | knowledge_list [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | 제공된 문서 내용만 바탕으로 핵심 사실을 추출하여 정리한 목록입니다. 1. `DataStorage`는 사용량 제한이 적용되어 데이터를 자주 저장하면 Credit이 부족해질 수 있으므로, 값이 변경될 때마다 저장하지 않고 특정 상황(유저 접속 종료, 일정 시간 주기, 예외 발생)에 한해 저장하도록 `Property`를 활용해 Credit 소모량을 줄이는 것이 권장됩니다. 2. 유저 접속 종료 시에는 유저가 접속을 종료하는 시점에 데이터를 `DataStorage`에 저장하는 방식을 권장합니다. 3. 유저의 갱신된 정보는 서버 장애 등 [original] | 사용량 제한이 걸린 DataStorage에 데이터를 자주 저장하게 하면 Credit이 부족할 수 있습니다. 그러므로 값이 변경될 때마다 데이터를 저장할 필요가 없는 값들은 Property를 사용해 특정 상황일 때만 저장해 Credit 소모량을 줄일 수 있습니다. 주로 아래 3가지 상황에서 저장하는 것을 권장합니다. 1. **유저 접속 종료 시 저장**: 유저가 접속을 종료하면 데이터를 DataStorage에 저장합니다. 2. **일정 시간마다 저장**: 유저의 갱신된 정보는 주기적으로 저장해야 합니다. 서버에 문제가 생겨 저장에 [chunk_id] | Guides:1073:8
[task] | extract_knowledge [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage 사용량 제한과 문자열 최적화 ## 개념 설명 DataStorage에는 사용량 제한이 존재하며, Credit을 소모하는 DataStorage 함수를 빈번하게 호출하면 문제가 발생할 수 있습니다. Key를 생성하거나 사용하는 행위 자체가 Credit을 소모하므로, 프로퍼티가 증가할수록 Key 수가 늘어나 Credit 소모량이 증가합니다. 이러한 문제를 방지하고 Credit 효율을 높이기 위해, 연관된 데이터를 하나의 String으로 묶어 단일 Key로 저장하는 방식을 권장합니다. ## API 사용법 단일 S [original] | # DataStorage 사용량 제한과 문자열 DataStorage는 사용량 제한이 있습니다. 제한으로 인해 Credit을 사용하는 DataStorage 류의 함수들을 너무 자주 호출하면 문제가 발생할 수 있습니다. 사용량 제한의 자세한 내용은 [DataStorage 사용량 제한 알아보기](/docs/?postId=1044), [DataStorage 사용량 제한 활용하기](/docs/?postId=1045)를 참고하세요. #### 하나의 String으로 저장 Key를 사용하면 Credit을 사용합니다. 아래 예시처럼 많은 Ke [chunk_id] | Guides:1073:6
[task] | distill [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage 사용 시 Credit 절약 가이드 ## 1. UI 버튼 연동 시 쿨다운 적용 유저의 UI 조작(버튼 클릭 등)으로 `DataStorage` 함수가 빈번하게 호출되면 Credit 과다 소모 위험이 있습니다. 이를 방지하기 위해 **서버 시간 기반 쿨다운**을 적용해야 합니다. ### 핵심 규칙 * **클라이언트 이벤트**에서 서버 메서드를 호출할 때, 서버 로직 내 `lastSaveTime` 등을 활용해 재진입을 차단합니다. * `_UtilLogic.ServerElapsedSeconds`를 사용하여 [original] | 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 사용하게 만들지 않는 것이 좋습니다. 크리에이터의 의도로 다른 유저의 행동으로 인해 생각보다 많은 Credit을 소모하게 될 수도 있기 때문입니다. 만약 유저의 행동으로 DataStorage류 함수를 사용해야 한다면 해당 기능을 사용할 수 있는 주기를 설정해 의도하지 않게 Credit을 사용하게 되는 경우를 줄일 수 있습니다. 유저가 UI 버튼을 눌러서 DataStorage에서 데이터를 매번 불러오는 코드를 작성했다 생각해 봅시다. 특정 유저가 크리에이터의 예 [chunk_id] | Guides:1073:9
[task] | diverse_qa [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | 질문: 사용량 제한이 걸린 DataStorage에서 Credit 부족 문제를 방지하기 위해 권장되는 데이터 저장 전략은 무엇인가요? 답변: 값이 변경될 때마다 데이터를 저장할 필요가 없는 값들은 Property를 사용해 특정 상황일 때만 저장함으로써 Credit 소모량을 줄이는 것을 권장합니다. 질문: 문서에서 권장하는 DataStorage 데이터 저장의 3가지 주요 상황은 무엇인가요? 답변: 유저 접속 종료 시 저장, 일정 시간마다 저장, 예외 처리 시 저장입니다. 질문: 유저가 접속을 종료할 때 데이터 저장에 대해 문서에 명 [original] | 사용량 제한이 걸린 DataStorage에 데이터를 자주 저장하게 하면 Credit이 부족할 수 있습니다. 그러므로 값이 변경될 때마다 데이터를 저장할 필요가 없는 값들은 Property를 사용해 특정 상황일 때만 저장해 Credit 소모량을 줄일 수 있습니다. 주로 아래 3가지 상황에서 저장하는 것을 권장합니다. 1. **유저 접속 종료 시 저장**: 유저가 접속을 종료하면 데이터를 DataStorage에 저장합니다. 2. **일정 시간마다 저장**: 유저의 갱신된 정보는 주기적으로 저장해야 합니다. 서버에 문제가 생겨 저장에 [chunk_id] | Guides:1073:8
[task] | diverse_qa [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | 질문: 크리에이터가 DataStorage에 데이터를 저장할 때 사전 정의된 String 형식 대신 직접 string을 만들 경우의 장점은 무엇인가요? 답변: 데이터를 더 짧은 문자열로 저장할 수 있습니다. 질문: 문서의 예제에서 문자열을 나누고 합치기 위해 사용된 함수와 연산자는 무엇인가요? 답변: `_UtilLogic:Split()`과 문자열 합치기 연산자 `..`를 사용합니다. 질문: `Table<v>` 타입의 데이터를 문자열로 변환할 때 사용할 수 있는 함수는 무엇인가요? 답변: `table.concat`을 사용할 수 있습 [original] | 크리에이터는 사전 정의된 String 형식을 따르는 함수들을 사용하는 대신 직접 string을 만들어 사용할 수 있습니다. 직접 만들 경우 데이터를 더 짧은 문자열로 저장할 수 있습니다. 아래의 예제와 같이 `_UtilLogic:Split()`과 `문자열 합치기(..)`를 사용해 String을 문자열로 나누고, 합칠 수 있습니다. Table<v> 데이터는 table.concat을 사용할 수 있습니다. ```lua Property: [None] integer meso = 0 [None] integer cash = 0 Method [chunk_id] | Guides:1073:7
[task] | extract_knowledge [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage 효율적 사용 전략 `DataStorage`는 사용량 제한이 적용되어 데이터를 빈번하게 저장하면 Credit이 부족해질 수 있습니다. Credit 소모량을 줄이기 위해 값이 변경될 때마다 저장하지 않고, `Property`를 활용해 특정 상황일 때만 저장하도록 설계하는 것이 권장됩니다. ## 권장 저장 시점 Credit 효율성을 높이기 위해 다음 세 가지 상황에서만 `DataStorage`에 데이터를 저장하는 것이 좋습니다. 1. **유저 접속 종료 시**: 유저가 접속을 종료하는 시점에 데이터를 저 [original] | 사용량 제한이 걸린 DataStorage에 데이터를 자주 저장하게 하면 Credit이 부족할 수 있습니다. 그러므로 값이 변경될 때마다 데이터를 저장할 필요가 없는 값들은 Property를 사용해 특정 상황일 때만 저장해 Credit 소모량을 줄일 수 있습니다. 주로 아래 3가지 상황에서 저장하는 것을 권장합니다. 1. **유저 접속 종료 시 저장**: 유저가 접속을 종료하면 데이터를 DataStorage에 저장합니다. 2. **일정 시간마다 저장**: 유저의 갱신된 정보는 주기적으로 저장해야 합니다. 서버에 문제가 생겨 저장에 [chunk_id] | Guides:1073:8
[task] | knowledge_list [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | 주어진 문서 내용에 기반하여 핵심 사실을 추출한 목록입니다. 1. 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 직접 호출하도록 하면, 크리에이터의 의도와 다르게 다른 유저의 빈번한 행동으로 인해 Credit이 과도하게 소모될 수 있으므로 권장되지 않습니다. 2. 유저의 행동으로 DataStorage 류 함수를 사용해야 하는 경우, 의도하지 않은 Credit 소모를 줄이기 위해 해당 기능의 사용 가능 주기(쿨다운)를 설정해야 합니다. 3. 문서 예제 스크립트에서 `Property` 블록의 `[None]` 속 [original] | 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 사용하게 만들지 않는 것이 좋습니다. 크리에이터의 의도로 다른 유저의 행동으로 인해 생각보다 많은 Credit을 소모하게 될 수도 있기 때문입니다. 만약 유저의 행동으로 DataStorage류 함수를 사용해야 한다면 해당 기능을 사용할 수 있는 주기를 설정해 의도하지 않게 Credit을 사용하게 되는 경우를 줄일 수 있습니다. 유저가 UI 버튼을 눌러서 DataStorage에서 데이터를 매번 불러오는 코드를 작성했다 생각해 봅시다. 특정 유저가 크리에이터의 예 [chunk_id] | Guides:1073:9
[task] | wikipedia [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # [Guides] Effective MSW 효과적으로 DataStorage 사용하기 본 문서는 메이플스토리 월드(MapleStory Worlds)의 `DataStorageService`를 사용하여 플레이어의 데이터(화폐, 아이템 등)를 서버와 클라이언트 간에 효율적으로 동기화하는 방법에 대한 가이드입니다. 제시된 코드는 데이터 로드, 저장, 그리고 클라이언트로의 이벤트 전송을 포함하는 완전한 구현 예시입니다. ## 데이터 로드 및 초기화 서버 측에서는 `_DataStorageService`를 통해 사용자의 데이터 스토리지 객 [original] | if _UtilLogic:IsNilorEmptyString(currencyString) == false then local currency = _HttpService:JSONDecode(currencyString) if currency.meso ~= nil then self.meso = currency.meso end if currency.cash ~= nil then self.cash = currency.cash [chunk_id] | Guides:1073:4
[task] | distill [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | ## 핵심 요약: DataStorage 저장 시점 유저 퇴장 시 데이터 저장은 반드시 **`HandleUserLeaveEvent`** 핸들러에서 수행해야 합니다. * **`OnEndPlay` 사용 금지**: `AndWait`, `SetAndWait`, `SetAsync`를 `OnEndPlay`에서 호출하면, 재진입 시 데이터 로드 실패 또는 잘못된 데이터 반환이 발생할 수 있습니다. * **`HandleUserLeaveEvent` 권장**: 이 핸들러에서 저장 함수를 호출하면, 재접속 시 이전 저장 작업의 완료가 보장됩니 [original] | 유저가 퇴장할 때 DataStorage에 저장하는 기능 구현은 UserLeaveEvent Handler에 추가되어야 합니다. OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. OnEndPlay에서 SetAndWait나 SetAsync를 이용해 데이터를 저장한 경우, 유저가 월드 재진입 시 잘못된 데이터를 가져오는 상황이 발생할 수 있습니다. OnEndPlay 대신 UserLeaveEvent Handler에서 DataSto [chunk_id] | Guides:1073:10
[task] | diverse_qa [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | 질문: 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 사용하도록 만드는 것이 권장되나요? 답변: 아니요, 권장되지 않습니다. 크리에이터의 의도와 다르게 다른 유저의 행동으로 인해 생각보다 많은 Credit이 소모될 수 있기 때문입니다. 질문: 유저의 행동으로 DataStorage 류 함수를 사용해야 할 경우 Credit 낭비를 줄이기 위해 어떤 조치를 취할 수 있나요? 답변: 해당 기능을 사용할 수 있는 주기를 설정하여 의도하지 않게 Credit이 사용되도록 하는 경우를 줄일 수 있습니다. 질문: 특정 유 [original] | 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 사용하게 만들지 않는 것이 좋습니다. 크리에이터의 의도로 다른 유저의 행동으로 인해 생각보다 많은 Credit을 소모하게 될 수도 있기 때문입니다. 만약 유저의 행동으로 DataStorage류 함수를 사용해야 한다면 해당 기능을 사용할 수 있는 주기를 설정해 의도하지 않게 Credit을 사용하게 되는 경우를 줄일 수 있습니다. 유저가 UI 버튼을 눌러서 DataStorage에서 데이터를 매번 불러오는 코드를 작성했다 생각해 봅시다. 특정 유저가 크리에이터의 예 [chunk_id] | Guides:1073:9
[task] | knowledge_list [title] | 공동 제작 그룹 멤버의 등급과 권한 [category] | Guides [rephrased] | 제공된 문서 원문에 포함된 정보만 기반으로, 공동 제작 그룹 멤버의 등급과 권한에 대한 핵심 사실을 정리한 목록입니다. * **그룹장**은 그룹을 최초로 만든 사람에게 부여되는 등급으로, 그룹 내 1명만 존재하며, 그룹 관리를 위한 모든 권한을 보유하지만 그룹 탈퇴는 불가능합니다. * **그룹장**은 다른 멤버에게 그룹장 권한을 이전할 수 있으며, 다른 멤버가 그룹장이 되면 기존 그룹장은 자동으로 **매니저** 등급으로 변경됩니다. * **매니저**는 그룹의 부운영자로서, 그룹장 전용 관리 권한을 제외한 전반적인 권한을 [original] | # 학습 과정 소개 공동 제작의 그룹장은 함께 하는 그룹 멤버를 관리하고 등급을 세분화할 수 있습니다. 그룹 멤버 등급 분류와 등급별 권한을 자세히 살펴봅시다. ##### 참고 가이드 * [그룹 생성과 멤버 관리](/docs/?postId=1325) * [공동 제작](/docs/?postId=670) * [공동 제작 팁](/docs/?postId=766) * [리소스 관리](/docs/?postId=690) * [제작한 월드 불러오기 및 관리](/docs/?postId=213) * [월드 정보와 배지, 상품 번역하기](/do [chunk_id] | Guides:1077:0
[task] | distill [title] | 공동 제작 그룹 멤버의 등급과 권한 [category] | Guides [rephrased] | # 공동 제작 그룹 멤버 등급과 권한 그룹장은 멤버 등급을 세분화하여 권한을 관리합니다. ## 등급 정의 | 등급 | 설명 | | --- | --- | | **그룹장** | 그룹 최초 생성자. 1명만 존재하며, 그룹 탈퇴 불가. 그룹장 권한을 다른 멤버에게 이전 가능. 이전 시 기존 그룹장은 자동으로 **매니저**로 변경. | | **매니저** | 부운영자. 그룹장 전용 권한을 제외한 전반적인 권한 보유. | | **개발책임자** | 해당 그룹의 월드 제작 관련 메이커 기능 대부분 사용 가능. | | **개발자** | 월드 제 [original] | # 학습 과정 소개 공동 제작의 그룹장은 함께 하는 그룹 멤버를 관리하고 등급을 세분화할 수 있습니다. 그룹 멤버 등급 분류와 등급별 권한을 자세히 살펴봅시다. ##### 참고 가이드 * [그룹 생성과 멤버 관리](/docs/?postId=1325) * [공동 제작](/docs/?postId=670) * [공동 제작 팁](/docs/?postId=766) * [리소스 관리](/docs/?postId=690) * [제작한 월드 불러오기 및 관리](/docs/?postId=213) * [월드 정보와 배지, 상품 번역하기](/do [chunk_id] | Guides:1077:0
[task] | wikipedia [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | **데이터 스토리지(DataStorage)의 효율적인 사용법** 메이플스토리 월드(MapleStory Worlds) 스크립트 개발 시, `DataStorage` 계열 함수의 호출 빈도를 관리하는 것은 크레딧(Credit) 소모를 줄이고 안정적인 월드 운영을 위해 필수적입니다. 특히 유저가 직접 데이터를 갱신하거나 조회하는 UI 버튼을 눌렀을 때, 이를 즉시 `DataStorage` 함수 호출로 연결하지 않는 것이 권장됩니다. 다른 유저의 행동으로 인해 크리에이터의 의도와 달리 크레딧이 과다 소모될 수 있기 때문입니다. 만약 유저의 [original] | 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 사용하게 만들지 않는 것이 좋습니다. 크리에이터의 의도로 다른 유저의 행동으로 인해 생각보다 많은 Credit을 소모하게 될 수도 있기 때문입니다. 만약 유저의 행동으로 DataStorage류 함수를 사용해야 한다면 해당 기능을 사용할 수 있는 주기를 설정해 의도하지 않게 Credit을 사용하게 되는 경우를 줄일 수 있습니다. 유저가 UI 버튼을 눌러서 DataStorage에서 데이터를 매번 불러오는 코드를 작성했다 생각해 봅시다. 특정 유저가 크리에이터의 예 [chunk_id] | Guides:1073:9
[task] | knowledge_list [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | * 유저가 퇴장할 때 DataStorage에 데이터를 저장하는 로직은 `UserLeaveEvent` 핸들러에서 구현해야 하며, `OnEndPlay`에서 저장할 경우 유저 재진입 시 데이터 로드 실패 또는 잘못된 데이터 가져오기 문제가 발생할 수 있습니다. * `OnEndPlay`에서 `AndWait` 함수를 사용하여 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. * `OnEndPlay`에서 `SetAndWait` 또는 `SetAsync`를 사용하여 데이터를 저 [original] | 유저가 퇴장할 때 DataStorage에 저장하는 기능 구현은 UserLeaveEvent Handler에 추가되어야 합니다. OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. OnEndPlay에서 SetAndWait나 SetAsync를 이용해 데이터를 저장한 경우, 유저가 월드 재진입 시 잘못된 데이터를 가져오는 상황이 발생할 수 있습니다. OnEndPlay 대신 UserLeaveEvent Handler에서 DataSto [chunk_id] | Guides:1073:10
[task] | wikipedia [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage의 효과적 사용 메이플스토리 월드에서 사용자 데이터의 무결성을 유지하기 위해, 데이터 저장은 `UserLeaveEvent` 핸들러 내에서 수행하는 것이 권장됩니다. `OnEndPlay`에서 데이터를 저장하는 방식은 재진입 시 데이터 무결성 문제를 야기할 수 있어 주의가 필요합니다. ## OnEndPlay 사용 시 발생 가능한 문제 `OnEndPlay` 이벤트에서 데이터 저장 함수를 호출하면, 사용자가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못하거나, 잘못된 데이터를 가져오는 현상이 [original] | 유저가 퇴장할 때 DataStorage에 저장하는 기능 구현은 UserLeaveEvent Handler에 추가되어야 합니다. OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. OnEndPlay에서 SetAndWait나 SetAsync를 이용해 데이터를 저장한 경우, 유저가 월드 재진입 시 잘못된 데이터를 가져오는 상황이 발생할 수 있습니다. OnEndPlay 대신 UserLeaveEvent Handler에서 DataSto [chunk_id] | Guides:1073:10
[task] | extract_knowledge [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage 저장 시점과 UserLeaveEvent 유저의 월드 퇴장 시 데이터 저장은 `OnEndPlay` 대신 `UserLeaveEvent` 핸들러에서 수행해야 합니다. `OnEndPlay`에서 `AndWait`, `SetAndWait`, 또는 `SetAsync`를 사용하여 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못하거나 잘못된 데이터를 가져오는 문제가 발생할 수 있습니다. `UserLeaveEvent` 핸들러에서 DataStorage 관련 함수를 호출하면, 유저가 [original] | 유저가 퇴장할 때 DataStorage에 저장하는 기능 구현은 UserLeaveEvent Handler에 추가되어야 합니다. OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. OnEndPlay에서 SetAndWait나 SetAsync를 이용해 데이터를 저장한 경우, 유저가 월드 재진입 시 잘못된 데이터를 가져오는 상황이 발생할 수 있습니다. OnEndPlay 대신 UserLeaveEvent Handler에서 DataSto [chunk_id] | Guides:1073:10
[task] | diverse_qa [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | 질문: 유저가 퇴장할 때 DataStorage에 데이터를 저장하는 기능을 구현하기 위해 어떤 이벤트 핸들러에 코드를 추가해야 하는가? 답변: 유저가 퇴장할 때 DataStorage에 저장하는 기능은 UserLeaveEvent Handler에 추가되어야 합니다. 질문: OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면 어떤 문제가 발생할 수 있는가? 답변: OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. [original] | 유저가 퇴장할 때 DataStorage에 저장하는 기능 구현은 UserLeaveEvent Handler에 추가되어야 합니다. OnEndPlay에서 AndWait 함수를 사용해 데이터를 저장하면, 유저가 월드에 재진입할 때 이전에 저장한 데이터를 정상적으로 불러오지 못할 수 있습니다. OnEndPlay에서 SetAndWait나 SetAsync를 이용해 데이터를 저장한 경우, 유저가 월드 재진입 시 잘못된 데이터를 가져오는 상황이 발생할 수 있습니다. OnEndPlay 대신 UserLeaveEvent Handler에서 DataSto [chunk_id] | Guides:1073:10
[task] | extract_knowledge [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage의 직접 String 조작 ## 개념 설명 `DataStorage`는 사용자 데이터를 서버에 영구적으로 저장하는 서비스입니다. 기본적으로는 사전 정의된 String 형식을 따르는 함수를 사용하지만, 크리에이터는 직접 문자열을 생성하여 데이터를 더 짧은 형식으로 저장할 수 있습니다. 이를 통해 저장 용량을 절약하고 데이터 구조를 유연하게 관리할 수 있습니다. 문자열을 분리하거나 합치기 위해 `_UtilLogic:Split()`과 `문자열 합치기(..)` 연산자를 사용하며, `Table<v>` 형태의 데이터는 [original] | 크리에이터는 사전 정의된 String 형식을 따르는 함수들을 사용하는 대신 직접 string을 만들어 사용할 수 있습니다. 직접 만들 경우 데이터를 더 짧은 문자열로 저장할 수 있습니다. 아래의 예제와 같이 `_UtilLogic:Split()`과 `문자열 합치기(..)`를 사용해 String을 문자열로 나누고, 합칠 수 있습니다. Table<v> 데이터는 table.concat을 사용할 수 있습니다. ```lua Property: [None] integer meso = 0 [None] integer cash = 0 Method [chunk_id] | Guides:1073:7
[task] | wikipedia [title] | 공동 제작 그룹 멤버의 등급과 권한 [category] | Guides [rephrased] | # 공동 제작 그룹 멤버의 등급과 권한 공동 제작 환경에서 그룹장은 그룹 내 멤버를 관리하고 역할을 세분화하기 위해 멤버 등급을 설정할 수 있습니다. 본 문서는 메이플스토리 월드 메이커(Maker)에서 제공하는 공동 제작 그룹의 멤버 등급 분류 체계와 각 등급별 권한에 대해 설명합니다. ## 참고 가이드 본 주제와 관련된 추가 정보는 다음과 같은 가이드 문서에서 확인할 수 있습니다. * [그룹 생성과 멤버 관리](/docs/?postId=1325) * [공동 제작](/docs/?postId=670) * [공동 제작 [original] | # 학습 과정 소개 공동 제작의 그룹장은 함께 하는 그룹 멤버를 관리하고 등급을 세분화할 수 있습니다. 그룹 멤버 등급 분류와 등급별 권한을 자세히 살펴봅시다. ##### 참고 가이드 * [그룹 생성과 멤버 관리](/docs/?postId=1325) * [공동 제작](/docs/?postId=670) * [공동 제작 팁](/docs/?postId=766) * [리소스 관리](/docs/?postId=690) * [제작한 월드 불러오기 및 관리](/docs/?postId=213) * [월드 정보와 배지, 상품 번역하기](/do [chunk_id] | Guides:1077:0
[task] | diverse_qa [title] | 공동 제작 그룹 멤버의 등급과 권한 [category] | Guides [rephrased] | 질문: 공동 제작 그룹 내에서 그룹장 등급은 몇 명만 존재할 수 있나요? 답변: 그룹 내 1명만 존재합니다. 질문: 그룹을 최초로 만든 사람에게 부여되는 등급은 무엇인가요? 답변: 그룹장 등급입니다. 질문: 기존 그룹장이 다른 멤버에게 그룹장 지위를 이전할 경우, 기존 그룹장은 자동으로 어떤 등급이 되나요? 답변: 자동으로 매니저 등급이 됩니다. 질문: 그룹장 등급은 그룹 탈퇴가 가능한가요? 답변: 불가능합니다. 그룹 관리를 위한 모든 권한을 보유하되, 그룹 탈퇴를 할 수는 없습니다. 질문: 그룹의 부운영자 역할을 수행하며, [original] | # 학습 과정 소개 공동 제작의 그룹장은 함께 하는 그룹 멤버를 관리하고 등급을 세분화할 수 있습니다. 그룹 멤버 등급 분류와 등급별 권한을 자세히 살펴봅시다. ##### 참고 가이드 * [그룹 생성과 멤버 관리](/docs/?postId=1325) * [공동 제작](/docs/?postId=670) * [공동 제작 팁](/docs/?postId=766) * [리소스 관리](/docs/?postId=690) * [제작한 월드 불러오기 및 관리](/docs/?postId=213) * [월드 정보와 배지, 상품 번역하기](/do [chunk_id] | Guides:1077:0
[task] | extract_knowledge [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage 사용 시 Credit 효율화 전략 ## 1. 개념 설명 `DataStorage` 류 함수 호출 시 크레딧(Credit)이 소모됩니다. 특히 유저가 직접 조작(버튼 클릭 등)을 통해 데이터 갱신을 요청하는 경우, 의도치 않은 고빈도 호출로 인해 크레딧 낭비가 발생할 수 있습니다. 이를 방지하기 위해 다음과 같은 두 가지 원칙을 적용해야 합니다. 1. **클라이언트 요청 제한**: 유저의 행동(예: 저장 버튼 클릭)으로 인한 `DataStorage` 호출 시, 쿨다운(Cooldown)을 설정하여 짧은 시 [original] | 유저가 데이터 갱신 버튼을 눌렀을 때 DataStorage 류 함수를 사용하게 만들지 않는 것이 좋습니다. 크리에이터의 의도로 다른 유저의 행동으로 인해 생각보다 많은 Credit을 소모하게 될 수도 있기 때문입니다. 만약 유저의 행동으로 DataStorage류 함수를 사용해야 한다면 해당 기능을 사용할 수 있는 주기를 설정해 의도하지 않게 Credit을 사용하게 되는 경우를 줄일 수 있습니다. 유저가 UI 버튼을 눌러서 DataStorage에서 데이터를 매번 불러오는 코드를 작성했다 생각해 봅시다. 특정 유저가 크리에이터의 예 [chunk_id] | Guides:1073:9
[task] | distill [title] | 프로파일러로 월드 성능 분석하기 [category] | Guides [rephrased] | # 프로파일러로 월드 성능 분석하기 루아 프로파일러가 스크립트 중심 분석이라면, **성능 프로파일러**는 현재 월드 성능에 영향을 미치는 요인을 전반적으로 분석합니다. 프로파일링을 통해 성능 저하 원인을 파악하고 최적화할 수 있습니다. ## 실행 방법 1. 메이커에서 `Panels > Profiler` 진입. 2. **[시작]** 버튼으로 플레이 상태 진입. 3. 프로파일러의 **[분석 레코드]** 버튼으로 기록 시작/중지 토글. > **주의**: 정적 맵 ↔ 인스턴스 맵 전환 시 기록이 초기화됩니다. ## UI 구성 및 조 [original] | # 학습 과정 소개 메이플스토리 월드의 루아 프로파일러가 스크립트를 중점적으로 분석하는 도구라면 성능 프로파일러(이하 프로파일러)는 현재 월드의 성능에 영향을 미칠 수 있는 요인들에 대해 전반적인 분석 결과를 보여줍니다. 프로파일링을 통해 월드 성능을 저하시키는 요인을 파악할 수 있고 이를 해결하여 월드 성능을 향상시킬 수 있습니다. 이번 과정에서는 프로파일러의 실행 및 사용 방법, 그리고 데이터 분석 결과를 해석하는 방법을 살펴보겠습니다. ##### 참고 가이드 [루아 프로파일러 활용하기](/docs/?postId=762) [chunk_id] | Guides:1078:0
[task] | distill [title] | 프로파일러로 월드 성능 분석하기 [category] | Guides [rephrased] | # 보안 및 최적화: 프로파일러로 월드 성능 분석하기 기기 사양 차이에 따라 체감 성능이 달라지나, 아래 수치를 기준으로 성능을 판단할 수 있습니다. ### 1. FPS (Client) 클라이언트 측 반응성 및 화면 재생 품질 지표입니다. **최소 30FPS 유지**를 권장합니다. * **World FPS**: 크리에이터 로직 처리 속도. 비효율 로직, 과도한 `[Sync]` Property, 다른 실행 공간 함수 호출 등으로 저하될 수 있습니다. * **Engine FPS**: 입력, 네트워킹, 그래픽 연산 속도. 엔 [original] | 유저가 각각 사용하는 PC, 모바일 기기의 사양이 매우 다양하기 때문에 같은 월드라도 플레이 환경의 쾌적함 정도는 상당히 달라질 수 있습니다. 하지만 대략적으로 분석 수치가 아래와 같을 경우 해당 월드의 성능을 어느 정도 판단할 수 있습니다. 아래의 수치는 대략적인 참고값으로 활용할 수 있으며, 그 이전에도 체감되지 않는 성능 하락은 발생할 수 있습니다. ### FPS (Client) FPS는 클라이언트에서 측정하는 요소로 반응성 및 화면 재생과 관련이 있습니다. * 플레이할 때 화면 재생에 영향을 미칩니다. FPS가 떨어지면 [chunk_id] | Guides:1078:1
[task] | extract_knowledge [title] | 공동 제작 그룹 멤버의 등급과 권한 [category] | Guides [rephrased] | # 공동 제작 그룹 멤버의 등급과 권한 ## 1. 개념 설명 메이플스토리 월드 메이커(Maker)의 공동 제작 환경에서 그룹은 **그룹장** 1명과 여러 **멤버**로 구성됩니다. 그룹장은 그룹 내 멤버를 관리하고, 각 멤버의 작업 범위와 접근 권한을 제어하기 위해 멤버를 7개의 등급으로 분류할 수 있습니다. 각 등급은 월드 개발(제작), 운영, 그리고 일반 플레이 권한의 범위를 결정합니다. 등급은 그룹 생성 시점부터 존재하며, 그룹장은 이를 통해 팀원들의 역할을 명확히 할 수 있습니다. ## 2. 등급 정의 및 권한 범위 아 [original] | # 학습 과정 소개 공동 제작의 그룹장은 함께 하는 그룹 멤버를 관리하고 등급을 세분화할 수 있습니다. 그룹 멤버 등급 분류와 등급별 권한을 자세히 살펴봅시다. ##### 참고 가이드 * [그룹 생성과 멤버 관리](/docs/?postId=1325) * [공동 제작](/docs/?postId=670) * [공동 제작 팁](/docs/?postId=766) * [리소스 관리](/docs/?postId=690) * [제작한 월드 불러오기 및 관리](/docs/?postId=213) * [월드 정보와 배지, 상품 번역하기](/do [chunk_id] | Guides:1077:0
[task] | extract_knowledge [title] | 효과적으로 DataStorage 사용하기 [category] | Guides [rephrased] | # DataStorage를 활용한 사용자 데이터 영속화 본 절에서는 `mLua` 스크립트에서 `_DataStorageService`를 사용하여 플레이어의 상태(화폐, 아이템 등)를 서버 측에 영구적으로 저장하고 로드하는 방법을 다룹니다. 데이터는 JSON 문자열 형태로 직렬화되어 저장되며, 클라이언트와 서버 간의 상태 동기화를 위해 이벤트가 사용됩니다. ## 1. 개념 설명 `_DataStorageService`는 플레이어별 키-값(Key-Value) 형태의 데이터를 저장소에서 관리하기 위한 서비스입니다. - **직렬화(Enc [original] | if _UtilLogic:IsNilorEmptyString(currencyString) == false then local currency = _HttpService:JSONDecode(currencyString) if currency.meso ~= nil then self.meso = currency.meso end if currency.cash ~= nil then self.cash = currency.cash [chunk_id] | Guides:1073:4
[task] | knowledge_list [title] | 프로파일러로 월드 성능 분석하기 [category] | Guides [rephrased] | 제시된 문서에는 mLua 스크립트 컴포넌트, 서비스 API, 메서드, 이벤트 핸들러, 프로퍼티 선언 등 코드 작성에 필요한 기술적 사양(API 이름, 매개변수, 반환 타입, 실행 공간 제약)이 포함되어 있지 않습니다. 문서는 메이플스토리 월드 메이커 내 **성능 프로파일러(Profiler) UI의 기능과 사용법**에 대한 설명만 담고 있으며, 이는 스크립트 언어(mLua)의 문법이나 API 규격과 무관한 운영자/개발자 도구 가이드입니다. 따라서 요청하신 "API 이름·매개변수·반환 타입·동기화/서버·클라이언트 제약이 명시된 mL [original] | # 학습 과정 소개 메이플스토리 월드의 루아 프로파일러가 스크립트를 중점적으로 분석하는 도구라면 성능 프로파일러(이하 프로파일러)는 현재 월드의 성능에 영향을 미칠 수 있는 요인들에 대해 전반적인 분석 결과를 보여줍니다. 프로파일링을 통해 월드 성능을 저하시키는 요인을 파악할 수 있고 이를 해결하여 월드 성능을 향상시킬 수 있습니다. 이번 과정에서는 프로파일러의 실행 및 사용 방법, 그리고 데이터 분석 결과를 해석하는 방법을 살펴보겠습니다. ##### 참고 가이드 [루아 프로파일러 활용하기](/docs/?postId=762) [chunk_id] | Guides:1078:0
[task] | diverse_qa [title] | 프로파일러로 월드 성능 분석하기 [category] | Guides [rephrased] | 질문: 루아 프로파일러와 성능 프로파일러의 주요 차이점은 무엇인가요? 답변: 루아 프로파일러가 스크립트를 중점적으로 분석하는 도구인 반면, 성능 프로파일러는 현재 월드의 성능에 영향을 미칠 수 있는 요인들에 대해 전반적인 분석 결과를 보여주는 도구입니다. 질문: 메이커에서 프로파일러를 실행하기 위한 메뉴 경로는 무엇인가요? 답변: 메이커에서 Panels - Profiler로 들어가면 프로파일러를 실행할 수 있습니다. 질문: 프로파일러의 기록을 시작하고 중지하는 방법은 무엇인가요? 답변: [시작] 버튼을 눌러 플레이 상태로 진입한 [original] | # 학습 과정 소개 메이플스토리 월드의 루아 프로파일러가 스크립트를 중점적으로 분석하는 도구라면 성능 프로파일러(이하 프로파일러)는 현재 월드의 성능에 영향을 미칠 수 있는 요인들에 대해 전반적인 분석 결과를 보여줍니다. 프로파일링을 통해 월드 성능을 저하시키는 요인을 파악할 수 있고 이를 해결하여 월드 성능을 향상시킬 수 있습니다. 이번 과정에서는 프로파일러의 실행 및 사용 방법, 그리고 데이터 분석 결과를 해석하는 방법을 살펴보겠습니다. ##### 참고 가이드 [루아 프로파일러 활용하기](/docs/?postId=762) [chunk_id] | Guides:1078:0
[task] | knowledge_list [title] | 프로파일러로 월드 성능 분석하기 [category] | Guides [rephrased] | ```lua -- 이 블록은 단순히 문서 검토를 위한 출력 형식이며, 실제 실행되는 코드는 아닙니다. ``` 1. World FPS는 클라이언트에서 측정되며, 크리에이터의 로직을 처리하는 월드 코어의 FPS를 표시합니다. 2. World FPS는 비효율적인 로직, 과도한 Sync Property 사용, 또는 실행 제어를 통해 다른 실행 공간의 함수를 호출하는 경우 등 다양한 원인으로 인해 떨어질 수 있습니다. 3. Engine FPS는 클라이언트에서 측정되며, 주로 입력, 네트워킹, 그래픽을 연산하는 엔진의 FPS를 표시합니다. [original] | 유저가 각각 사용하는 PC, 모바일 기기의 사양이 매우 다양하기 때문에 같은 월드라도 플레이 환경의 쾌적함 정도는 상당히 달라질 수 있습니다. 하지만 대략적으로 분석 수치가 아래와 같을 경우 해당 월드의 성능을 어느 정도 판단할 수 있습니다. 아래의 수치는 대략적인 참고값으로 활용할 수 있으며, 그 이전에도 체감되지 않는 성능 하락은 발생할 수 있습니다. ### FPS (Client) FPS는 클라이언트에서 측정하는 요소로 반응성 및 화면 재생과 관련이 있습니다. * 플레이할 때 화면 재생에 영향을 미칩니다. FPS가 떨어지면 [chunk_id] | Guides:1078:1