리버티게임토론:청사진

리버티게임, 모두가 만들어가는 자유로운 게임
  • 이 문서에서는 각 단계별 계획 피드백 및 다음 단계 이행을 위해 논의를 진행합니다. 일단 매해 연말에 해당하는 기간이 적힌 문단에서만 토론하는 것을 원칙으로 합니다. 2030년 이후로 10년 단위로 발생할 것으로 예상되는 토론 문서 비대화에 따른 하위 문서로의 내용 분리 요청은 사이트가 그때까지 존속한다는 전제 하에 문제가 발생할 때 분리하는 것으로 하겠습니다. --Senouis(토론장, 기여) 2023년 2월 20일 (월) 19:21 (KST)답변[답변]

1단계 입안 토론

기간: ~2023년 02월 28일

Crystal multimedia.png 일단 임시로 작업 기한을 명기하였습니다. 다만 1단계는 다소 급하게 계획을 짜게 되어, 저 기한이 공식 계획이 될 가능성이 매우 높음을 알립니다. --Senouis(토론장, 기여) 2023년 2월 27일 (월) 00:45 (KST)답변[답변]

  • 백괴 클래식 분류 및 데이터/로직 손상 게임 처리 관련 토론

백괴게임 시절 게임과 리버티게임 창설 이후 게임을 분리할 이유는 충분합니다. 일단 사이트가 더 이상 '백괴스러운 게임'만을 만들지 않는다는 컨셉의 미묘한 변경이 있죠. 그리고 과거 2010년대 초반까지는 웹 컨텐츠가 상당히 정적인 경우가 다수여서 그 상황에서 텍스트와 조건문을 때려박아가며 한계를 쥐어짜낸 좋은 게임들은 지금도 고평가를 받아야겠지만 그땐 그 때고 이제는 반응형 웹이 대세이니 더 이상 동일한 게임 제작 전략만 가져오기는 어렵습니다.
따라서 그 시절의 게임을 구분해서 아카이브하는 작업이 필요합니다. 다음 3가지로 분할하여 게임 목록에 명시하는 방법이 제시됩니다.

  1. 백괴게임 시절 특집 게임(예: 위키낚시)이나 장기간 광고하였던 게임들(예: Will It Blend?)
  2. 그럭저럭 플레이 가능한 상태의 텍스트 어드벤처 게임들(절대 다수인 것으로 추정됩니다)
  3. 애셋 부재 등의 이유로 로직이 깨졌거나 플레이 자체가 매우 어려운 게임(예: 백괴리겜 - 배경음악이 저작권 문제로 링크가 끊겼는지 오류를 냅니다. 기억하기로 xi의 프리덤 다이브를 재생했었습니다)

--Senouis(토론장, 기여) 2023년 2월 20일 (월) 19:21 (KST)답변[답변]

  • 게임 분류용 메타데이터 문서 추가

일단 Hsl0님의 수고로 JSON 포맷 문서를 작성할 경우 가이드라인은 여기에 완성되었습니다. 해당 메타데이터는 각 게임의 메인 문서 부제목에 아이콘을 덧붙이는 식으로 게임 UI를 통일하는 데 활용할 수 있으며, 사이트 내 게임에 접속시 localstorage에 캐싱하고 최근 플레이한 게임 목록을 보고 싶을 때 불러오는 식으로도 응용이 가능하겠습니다. 해당 코드는 전역 common.js에 추가하는 것이 좋아보입니다.
리버티게임 분류에 붙은 게임들에 이것들을 추가한 후게임 목록 문서도 이걸 활용할 수 있으면 좋겠지만, 이게 실시간으로 동기화를 해야 게임을 만들자마자 알 수 있으니 메타데이터를 각 문서마다 만들어봤자 게임 목록을 불러올 때 클라이언트 측에서 사이트 전체를 크롤링해야하니 서버에게 부담을 주지 않는다는 게임 목록 분리 의도를 달성할 수 없습니다. 유일한 해결책은 미분류된 최상위 문서들의 리스트를 관리자가 쉽게 보는 것인데, 어떻게 구현하면 좋을까요? --Senouis(토론장, 기여) 2023년 2월 20일 (월) 19:21 (KST)답변[답변]

메타데이터는 이런 용도로 쓰려고 만든 것이 아닙니다. 게임아이콘 틀을 여러 군데에서 쓸 때 들어가는 데이터를 중앙화 시켜서 모든 틀을 찾아서 바꿀 필요없이 한번 수정했을 때 자동으로 바뀔 수 있도록 한 것입니다. JSON 문서는 루아 모듈을 통해서도 읽을 수 있으므로 클라이언트 사이드에서 별도의 크롤링을 할 필요는 없습니다. 이미 루아 모듈을 통해 기초적인 구현은 해두었으나리버티게임:연습장이나 사용자:hsl0/연구소에서 예시를 확인할 수 있습니다., 게임아이콘 틀 내용을 완전히 교체할 계획이 있고 사이트 전체를 편집해야 하는 관계로 포맷을 수정했을 때 다시 봇을 돌리는 일이 없도록 신중하게 접근하고 있습니다. 물론 틀 전개에서 부하가 올 수는 있겠지만 이에 대해서는 후술하겠습니다. 추가적으로 게임의 기본 정보를 봇, 스크립트, 확장 기능, 모듈, 틀이 읽을 수 있게 하고 각종 기술 스택의 게임별 설정을 저장할 수 있습니다. 최근 플레이한 게임 목록은 메타데이터 없이 접속한 문서 제목만 저장하면 됩니다. 게임 메인 문서에 정보를 표시하는 것은 적절한 활용입니다. --hsl(토론, 기여, 게임, 메일) 2023년 2월 20일 (월) 22:32 (KST)답변[답변]
일단 베타 버전을 저장할 신규 문서를 먼저 작성하고 정상 작동이 확인되면 기존 문서에 병합해버리는 방식으로 접근하면 안전할 것으로 보입니다. 게임 아이콘 틀 문서와 게임 목록 문서는 구 버전을 남기되 보존 처리를 하여 타 문서에서의 접근을 끊어 문서끼리 바꿔치는 식으로 적용하겠습니다. 메인 문서에 게임 정보 표시는 아예 자동으로 페이지 우상단에 표시하되 JSON 정보가 없을 경우 JSON 문서 생성 링크를 대신 달아놓는 것이 좋겠습니다. 이 작업은 늦어도 5월 전에 끝났으면 하는데, 이 기한 안에 해야 다른 작업에 영향이 없을 것 같기 때문입니다. --Senouis(토론장, 기여) 2023년 2월 27일 (월) 00:45 (KST)답변[답변]
더 구체적인 게임 목록 개선안입니다. 봇을 이용해 현재 리버티게임:게임 목록에 등재된 게임아이콘의 데이터를 읽어서 자동으로 game.json을 작성하고 (일회성, 새로운 게임은 게임아이콘 대신 game.json을 작성), 게임의 특성 별로 세분화된 분류를 만들고, 틀을 통해 game.json을 기반하여 자동으로 분류합니다. 그리고 게임 목록을 각 특성별장르, 제작자, 완성도, 연령 등급, 플랫폼, 평가 등로 필터링/정렬이 가능하고, 검색도 가능하도록 개편합니다. 필터링/정렬은 DPL을 활용하며, 쿼리된 문서가 많을 때 과부하를 방지하기 위해 자바스크립트를 활용해 n20개, 50개, 100개, 500개(?)를 사용자가 선택 가능하도록 생각 중개씩 부분적으로 로딩합니다. 게임 목록에 게임을 직접 등록하지 않으며, 자동 분류를 바탕으로 불러옵니다. 게임 목록은 완성도 상관없이 모든 게임을 검색할 수 있지만, 필터를 변경하지 않는 한 완성도가 어느 정도 이상거의 완성된 게임 3단계 이상을 생각하고 있습니다.인 게임만 기본값으로 표시되게 합니다. game.json은 게임 대문에서 제목 오른쪽 끝에 (game.json이 없다면) [게임 메타데이터 만들기] 같은 버튼이나, (있다면) 게임아이콘을 눌러서 조회/수정이 가능하도록 합니다. 저는 이런 방향으로 개선하기를 원하는데, 어떠십니까? --hsl(토론, 기여, 게임, 메일) 2023년 4월 7일 (금) 00:07 (KST)답변[답변]
Symbol support vote.svg찬성 좋습니다! 이런 자동화된 시스템이 더 지속적인 발전에 도움이 될 것 같네요. 일단 봇을 돌린 후 문제가 되는 것을 찾아보겠습니다. --Senouis(토론장, 기여) 2023년 4월 8일 (토) 13:38 (KST)답변[답변]
아 봇은 사용자:hsl2/게임 메타데이터에 제가 만들어 놨습니다. 메타데이터 규격이 많이 달라져 수정이 필요하지만 말이죠. 원하시면 봇을 돌려서 검토는 하셔도 되지만 섣불리 문서 생성은 하지 마시기 바랍니다. 이 작업은 반드시 메타데이터 규격이 확정(메타데이터 버전 1.0 이상)된 후 진행되어야 하거든요. --hsl(토론, 기여, 게임, 메일) 2023년 4월 8일 (토) 16:14 (KST)답변[답변]
  • 인기 게임 순위 시스템

토론 문서 분석하는 미디어위키 플러그인이 있다는 의견을 오락실에서 들었습니다. 플러그인 분석 결과를 여기에 간단히 기록하고 작업에 착수해봅시다. --Senouis(토론장, 기여) 2023년 2월 20일 (월) 19:21 (KST)답변[답변]

DiscussionTools 확장 기능이 제공하는 discussiontoolspageinfo API를 통해 토론 페이지의 문단과 의견 개요를 확인할 수 있고, 이를 이용하여 각 평가별 의견 개수를 충분히 셀 수 있을 것으로 보입니다. API 분석 결과와 예시, 그리고 고찰을 사용자:hsl0/DiscussionTools에 적어두었습니다. --hsl(토론, 기여, 게임, 메일) 2023년 9월 16일 (토) 22:59 (KST)답변[답변]
  • HTML5 게임 프레임워크 - 핵심 코드 관련 토론

네, 일단 BANIP님의 유산인 PluginX를 더 개선하여 완전한 프레임워크를 만들어야 하는데 핵심 코드와 애셋을 어떻게 할지 걱정됩니다. 일단 언리얼 엔진과 골드 소스 호환 엔진인 Xash3D를 분석해봤는데, 게임 내 등장하는 모든 오브젝트(캐릭터, 몬스터, 아이템, 바닥에 굴러다니는 장식들, 트리거 박스, 광원, 음원, 프롭 등) 및 게임 로직(전역 로직, 문서별 로직)이야 자바스크립트의 함수 프로토타입 상속으로 구현할 수 있겠습니다. 미디어위키가 익명 함수나 class를 지원 안해서 개발 편의가 떨어지는 건 좀 아쉽지만 일단 개발용 Documentation을 작성해가면서 시작해봅시다.

2D 게임 프레임워크를 먼저 만들고 3D 게임은 나중에 3D 모델링을 어떤 포맷으로 추가할지 논의합시다(페이즈 2로 미룰 확률이 매우 높겠네요). 남은 것은 실시간 P2P 통신입니다. WebRTC를 사용할 수 있을까요?--Senouis(토론장, 기여) 2023년 2월 20일 (월) 19:21 (KST)답변[답변]

화살표 함수나 class 등 ES6 기능은 컴파일하면 그만이죠. 저도 타입스크립트와 컴파일러를 적극 활용하고 있습니다. 그리고 pluginX는 ES6을 지원하는 것으로 알고 있습니다. --hsl(토론, 기여, 게임, 메일) 2023년 2월 20일 (월) 22:32 (KST)답변[답변]
앗, 그렇군요! 그럼 이제 게임 내 오브젝트인 엔티티의 기본 코드를 먼저 작성해보겠습니다. 먼저 공통적으로 스프라이트 정보 및 위치, 속성 등을 포함하고 정적인 오브젝트(프롭, 스카이박스 등)/동적인 오브젝트를 구분하여 상속시킨 다음 동적인 오브젝트는 스켈레톤 정보 및 부위별 추가 스프라이트와 애니메이션을 지정하고 거기서 사용자의 입력에 반응하는 캐릭터(플레이어블/논 플레이어블 가리지 않고)와 아이템, 버튼 같은 물체를 파생시키는 식으로 기본 코드를 한번 짜보겠습니다. --Senouis(토론장, 기여) 2023년 2월 27일 (월) 00:45 (KST)답변[답변]
  • 페이즈 2 이후에도 진행할 필요가 있는 장기 프로젝트를 포함한 추가 계획 논의

그 외에 추가할 만한 계획이 있을까요? --Senouis(토론장, 기여) 2023년 2월 20일 (월) 19:21 (KST)답변[답변]

첫번째 항목에서 반응형 웹을 말씀하셨는데, 요즘 트렌드에 맞는 프레임워크를 도입하거나 이와 유사한 위키문법 기반 시스템을 만드는 것도 좋을 것 같습니다. 미디어위키는 Vue.js를 도입하여 점점 비중을 늘려가고 있는 중이며, 리버티게임에서도 스크립트에 mw.loader.using('vue')만 넣으면 당장 쓸 수는 있습니다. 하지만 자바스크립트 코드를 내용 중간에 끼워넣을 수 있으므로 보안을 위해 모두가 편집할 수 있는 일반 문서에는 쓸 수 없겠습니다. 특히 Vue를 어설프게 쓰려고 하다가 터져나올 잠재적인 보안 문제를 대비해야 합니다. 또는 위키문법을 확장해서 프레임워크 수준까지 개발해내서 자바스크립트 없이 위키 문법과 섞어쓸 수 있게 만들 수도 있겠습니다. 저도 이에 대해 구상을 해왔습니다. 다만 게임 엔진만큼 어려운 일이겠지요. 현재 이벤트 프레임워크기술 스택끼리 간섭하지 않고 다음에 실행될 (기본) 동작을 기존 작업이 끝날때까지 지연시킬 수 있고, 링크를 누를 때 또는 페이지를 로딩할 때 동작을 예약할 수 있으며, 추후 더 많은 이벤트에 예약할 수 있게 됩니다. 왜 필요하나 싶겠지만, DB2와 CGI보호 틀은 페이지가 넘어가는 링크를 누를 때 페이지 이동을 미루고 작업을 끝낸 뒤 페이지를 넘깁니다. 그런데 현재 DOM 이벤트는 기본 동작 미루기를 지원하지 않아 기본 동작을 취소하고 작업이 끝난 뒤 별도로 기본 동작에 상응하는 동작을 실행합니다. 이러한 기술 스택이 여러 개 구동될 경우 다른 기술 스택의 일이 끝나기도 전에 자기 일만 끝나면 페이지를 넘겨버릴 수 있기 때문에 이를 조율하는 시스템이 필요합니다. 이 이벤트 프레임워크가 그 역할을 합니다. 이 프레임워크를 도입하면 각 스크립트에서 동작을 수행할 링크를 넣을 자리를 일일이 찾을 필요가 없게 되어 HTML 요소 탐색이 줄어들고 성능이 향상됩니다. 궁극적으로 자바스크립트없이 동적인 웹페이지를 만들기 위한 주요 요소 중 하나입니다. 사용자:hsl0/연구소/2에서 예시를 볼 수 있습니다. html이 덕지덕지 있지만, 틀로 예쁘게 쓸 수 있습니다.를 만들고 있는데 이를 염두에 두고 개발하고 있습니다.
네, 그럼 이벤트 프레임워크로 사이트 동작을 정교하게 스케줄링하는 것도 추가하겠습니다. 작업이 마무리되기까지 한 2달은 걸리려나요? --Senouis(토론장, 기여) 2023년 2월 27일 (월) 00:45 (KST)답변[답변]

1단계 수정

일단 이벤트 프레임워크는 Hsl0님이 휴식을 선언함에 따라 Phase 3으로 연기되었습니다.

그 외에도 급하게 입안된 것들이 많고 사이트 내에서 처리가 필요한 일들이 더 발견됨에 따라 일정 조정을 들어가고자 합니다. 5월 28일에 확정됩니다.

  • 백괴클래식 탐색
Symbol opinion vote.svg제안 기존 일정은 확정에서 해당 기간 내 수행 권장으로 변경 + 게임 메타데이터 문서 양식 확정 및 game.json 하위 문서 추가 작업 50% 이상 완료시 시작 조건 추가 --Senouis(토론장, 기여) 2023년 5월 1일 (월) 17:47 (KST)답변[답변]
  • 가젯 형태로 P2P 통신 기능 확장 지원
Symbol opinion vote.svg제안 Phase 2로 연기 --Senouis(토론장, 기여) 2023년 5월 1일 (월) 17:47 (KST)답변[답변]
  • 게임 엔진 테스트 게임 제작
Symbol opinion vote.svg제안 일정을 하반기로 변경 --Senouis(토론장, 기여) 2023년 5월 1일 (월) 17:47 (KST)답변[답변]
  • 인기 게임 순위 분석
Symbol opinion vote.svg제안 미디어위키용 플러그인/API 분석만을 Phase 1에 진행, 구현은 Phase 2로 연기 --Senouis(토론장, 기여) 2023년 5월 1일 (월) 17:47 (KST)답변[답변]

Yes check.svg완료 딱히 반대하는 의견이 없어서 그냥 사무관이 단독으로 진행하는 공용 프로젝트가 전부인 점을 감안해 바로 밀어넣고 추가로 책임자 닉네임을 넣겠습니다. 그리고 Phase 2부터는 사이트 전역 범위로 적용되는 개발 프로젝트가 있는 사용자들은 전부 청사진에 프로젝트들을 명시를 할게요. --Senouis(토론장, 기여) 2023년 5월 28일 (일) 19:51 (KST)답변[답변]

1단계 피드백 및 2단계 입안 토론

기간: 2023년 12월 10일 ~ 2023년 12월 30일

새로운 리버티게임 사이트 UI 관련 제안/요구 사항 기록

대문 토론 문서도 참고하면서 2023년 12월에 토의를 진행하면 됩니다. --Senouis(토론장, 기여) 2023년 9월 6일 (수) 11:51 (KST)답변[답변]

  1. BANIP의 제안: 틀:게임 정보, 틀:뱃지그룹
  2. 명진의 제안: 사용자:명진/대문, 틀:게임 정보 바닥글, 리버티게임:게임 목록/세부
  3. 2023년 9월 대문 배경색 제안: 관련 오락실 기록
사용자:BANIP/대문은 단순한 메모 용도로 만든 문서이기에 제외했습니다. --BANIP (토론) 2023년 9월 6일 (수) 12:24 (KST)답변[답변]
틀토론:게임 정보#스타일 건의도 있습니다. 이건 한번에 펼쳐볼 때 사용할 수 있는 디자인으로 설계되었습니다. --명진 (토론) 2023년 9월 6일 (수) 15:53 (KST)답변[답변]

플레이어를 위한 도움말과 게임 개발자를 위한 설명문서로 분리

리버티게임:길라잡이의 플레이어를 위한 안내문에 영감을 얻어, 이제는 플레이어를 위한 지원인 도움말과 게임 개발자를 위한 지원인 설명문서로 분리하고자 합니다. 설명문서에는 틀의 설명문서도 볼 수 있게 자주 사용되는 틀 또한 링크하여 그의 설명문서도 볼 수 있게 하는 것입니다. 이에 따르면 게임 만들기 및 게임 기획 등이 설명문서에 속할 것입니다. --명진 (토론) 2023년 8월 21일 (월) 05:38 (KST)답변[답변]

Symbol information vote.svg정보 본격적 논의는 3달 정도 뒤에 하려고 했는데, 일단 많은 분들의 도움으로 Phase 1의 작업이 거의 다 끝났기도 하니 첨언하자면, 이미 유사한 제안을 길라잡이 토론에 발제했습니다. --Senouis(토론장, 기여) 2023년 8월 21일 (월) 17:13 (KST)답변[답변]
게임 개발자를 위한 자세한 설명문서를 별도로 만드는것은 찬성하지만, 길라잡이 문서는 리버티게임 전체 컨텐츠에 대한 요약문서이기도 하기에 아주 기초가 되는 게임 제작법은 남겼으면 합니다. --BANIP (토론) 2023년 8월 25일 (금) 16:48 (KST)답변[답변]
이미 길라잡이에 그런 의견이 있긴 합니다. 추가 의견은 길라잡이에 남기겠습니다. --명진 (토론) 2023년 8월 26일 (토) 00:52 (KST)답변[답변]

Variables 확장 기능 퇴출 작업 및 대체 기능을 하는 모듈 작성

미디어위키 엔진의 렌더링 엔진인 Parsoid의 병렬 처리 파싱 방식으로 변경하는 로드맵이 발표되어 현재 리버티게임에서 쓰고 있는 Variable 확장 기능이 몇 년 후 미디어위키 엔진 차기 버전에서 지원되지 않을 확률이 높다고 합니다. 이에 따라 #var, #vardefine 파서 훅을 사용하는 게임들의 기술 요소를 변경하는 작업이 필요합니다. 아마 Lua 모듈을 써야 제대로 수리가 될 것으로 보입니다. 2023년 현재 당장 급한 것은 아니지만 이미 디버그 출력을 미디어위키 엔진에서 활성화한 경우 deprecated 알림이 사이트 가장 위에 나오는 상태여서 2024년 상반기 Phase 2의 작업으로 대체 기능을 할 모듈 작성 및 매크로 편집 시행을 제안합니다. --Senouis(토론장, 기여) 2023년 8월 27일 (일) 13:42 (KST)답변[답변]

Symbol information vote.svg정보 이에 따라 현재 Scribunto에 기반하여 루아 모듈 호출 형태로 기능을 대체하는 VariableLua 확장 기능의 개발이 베타 테스트 단계에 들어섰습니다. Stable로 개발 단계가 전환되는 시점에서 옮겨갈 수 있도록 2단계 이후 작업으로 제안하였습니다. --Senouis(토론장, 기여) 2023년 8월 27일 (일) 13:46 (KST)답변[답변]
저는 모듈:IIFE를 개발하였습니다. 프로그래밍 언어는 뒤로 갈수록 나중에 실행되는 시간 차원이지만, 위키 문법은 시간 차원이 아닌 만큼 절차형 보다는 선언형 패러다임이 어울립니다. Parsoid 역시 이를 지향하는 것 같습니다. IIFE 모듈은 선언형 패러다임을 염두에 두고 설계하였습니다. IIFE 모듈은 자바스크립트의 IIFE에서 착안하여, 이와 유사합니다. 함수 이름이 들어가는 자리에 nowiki로 둘러싼 위키텍스트 코드를 넣고, 그 뒤에 치환할 매개변수를 지정하면 {{{1}}}과 같은 매개변수 문법이 치환됩니다. 변수를 바꾸지 못하는 상수 개념이기는 하지만 var를 쓰는 주된 이유인 같은 값을 여러번 쓰는 시나리오에는 유용할 겁니다. 다만, nowiki가 중첩되기 어려운 관계로 IIFE의 중첩은 아직 지원되지 않습니다. 추후 중첩도 지원된다면 더 유용해질 수 있을겁니다. --hsl(토론, 기여, 게임, 메일) 2023년 9월 4일 (월) 21:37 (KST)답변[답변]

2단계 피드백 및 3단계 입안 토론

기간: ~ 2024년 12월 30일

리버티게임 도전과제 부활 + JS 가젯 제작 제안

리버티게임:발전소/리버티테스트에서 요약 제시했던 내용을 기록합니다. 이 내용은 진행된다면 수행 기간이 Phase 4 이후로 이전될 수 있습니다.

게임의 흥미를 돋우는 요소로 도전 과제 시스템이 있습니다. 특정 조건을 만족하면 조건을 달성하였다는 증표를 주는 시스템이죠. 과거에 계정이 있는 사용자 대상으로 리버티게임:도전 과제가 잠시 제안된 적 있었으나, 백괴게임의 기여도에 항목을 한정했으며 관리자들의 테스트 과정에서 불편이 있었는지 계획이 폐기 상태에 있었죠. 아마 원인이 사용자 문서별로 도전 과제 진행도를 수동으로 지정해야 해서 그런 문제가 있었던 것 같습니다.

리버티테스트 발전소 논의 과정에서 게임별 도전과제 시스템으로 재편하다는 아이디어가 떠올라 이전의 도전과제 항목과 결합하여 자동화된 도전과제 시스템을 제안합니다. 리버티게임에 도전과제가 있어야 한다면 관리자든, 각 사용자가 직접 편집하든 데이터를 사람이 직접 저장하게 하는 건 지속 가능하지 않습니다. 유일하면서 사용자 경험을 늘리는 방법은 서버에 데이터를 직접 저장하는 것인데, 현재 미디어위키 + 미라헤즈에서 제공하는 도전 과제 확장 기능이 많지 않으며(SocialProfile이 거의 유일합니다), Miraheze의 허가를 얻어야 추가될 다른 기능도 팬덤의 경우처럼 비공개 상태이거나 도전 과제 외의 다른 요소가 주가 되는 등 적절하지 않은 경우가 많습니다.

그래서 Azure 무료 웹앱 호스팅 플랜(여기서 나온 무료 플랜 - 소규모 커뮤니티라면 이것으로도 충분합니다)을 활용해 외부 서버에서 도전과제 진행도를 불러오는 것이 현재는 유일한 방법이 되겠습니다. 만일 서버의 연산 자원으로 감당하기 어려울 정도로 도전과제 달성이 사이트 내에 빈번해지면 서버 스크립트 공개(어차피 개발을 공개적으로 진행할 계획이라 개발 중에 서버 스크립트가 있는 GitHub 리포지토리가 리버티게임 내에 공개될 겁니다) + 게임 별 도전 과제 서버 분할을 시행하면 됩니다.

Nodejs로 돌아가는 서버사이드 도전 과제 스크립트를 만들고 웹앱으로 올린 뒤 리버티게임 JS 가젯 기능을 활용하여 사용자가 특정 행동(링크 클릭 등)을 하면 즉시 서버로 어떤 페이지에서 특정 행동을 했다는 정보가 전송하는 구조가 될 것입니다. 해당 과정은 도전과제 시스템 전용 하이퍼링크(문서로 이동 링크, CGI 오프셋 변경 링크 등) 틀이나 현재 시간 확인 이벤트를 부를 틀을 만들고 그 안에 있는 span element의 id를 도전과제 가젯이 인식하여 사용자 이벤트에 반응하여 진행합니다.

이와 관련하여 현재 효력이 정지된 리버티게임:도전 과제의 보존 틀을 떼어내고 여기 진입하였을 때 JS 가젯이 서버에서 도전과제 성취도를 가져옵니다. 일일 통신 용량을 넘어서는 무리한 데이터 페치를 막기 위해 도전과제 페이지 아래 게임 별로 도전 과제 리스트 하위 문서들에 진입하거나 게임 이름을 눌러야 통신으로 해당 게임 도전 과제 진행도를 불러오는 작업이 이루어지며 브라우저 LocalStorage에 캐싱하는 코드도 추가됩니다.

게임 플레이로 진행도를 웹앱 서버에 저장할 POST 과정에는 현재 플레이 중인 게임, 성취도, 성취한 플레이어 ID(계정명과는 다르게 하고자 합니다), 간단한 검증용 체크섬 숫자 등의 데이터가 포함됩니다. 이것이 개인정보 보호 관련해서 문제가 있을지는 조사가 필요하겠지만 기밀로 삼을 만한 민감한 정보가 없어 도전 과제 문서에 수집 항목과 목적을 명시하고 서버로 데이터를 보낼 때 평문으로 보내도 사이트를 이용하는 사람들에게 문제가 될 수준의 피해는 없을 것 같습니다(문제가 된다면 대칭형 키 기반 암호화를 할 예정입니다). 해당 데이터가 서버에 보내지면 도전과제 서버는 성취도를 이용해 도전 과제 항목의 Stack 배열에 하나 숫자를 push합니다.

도전 과제 문서 내 게임 별 항목을 열 경우 계정이 있는 사이트 이용자는 플레이어 ID와 게임 문서 이름을 보내어 GET 메서드로 하나의 JSON 객체를 가져옵니다. 그럼 리버티게임/(게임명).json 문서의 내용을 바탕으로 파싱하여 게임의 도전 과제 진행도를 보여줍니다.

요약(20230827 변경)

  • 서버사이드 자바스크립트 파일로 도전과제 시스템을 만들고 가젯 확장기능을 사용해 서버 내에 JSON 형태로 도전과제 진행도 기록
    • 추후 도전과제 시스템 이용자가 폭증하면 도전과제 진행도 기록 서버를 분할하여 외부 호스팅(Azure Node.js 호스팅 등)으로 분리
  • 리버티게임:도전 과제에 게임 별로 진행도가 표시되며, 동적 데이터 로딩이나 하위 문서 진입시 진행도 데이터를 가져옴
  • 개발한 코드의 저장소 링크(GitHub 리포지토리 주소 등)를 리버티게임 내에 공개
  • 개인정보 보호를 고려할 것(계정명을 직접 평문으로 보내지 않기 등의 조치 가능, 수집 항목과 목적을 리버티게임 사이트 내에 명시)
  • 사용자는 도전 과제 진행 전용 링크 틀을 활용해 특정 링크를 누르거나 특정 시간대 접속 등의 활동을 하면 가젯이 자동으로 도전과제 서버와 통신 수행

이 논의는 지금 간단한 의견 표명을 하여도 되나 본격적 작업 준비를 한다면 2024년부터 진행된다는 점을 알려드립니다. --Senouis(토론장, 기여) 2023년 5월 7일 (일) 20:37 (KST)답변[답변]

굳이 외부 서버를 쓰지 않고 사용자 json 문서나 옵션 저장소DB2가 옵션 저장소를 활용에 저장하고 자바스크립트로 저장/출력하는 것으로도 사용자의 수동 작업 없이 자동화가 구현될수 있지 않나 싶습니다. 물론 다른 사용자의 달성율을 구현하기 어려운 문제점이 있지만 그렇게까지 일을 크게 벌리지 않을 수 있습니다. --hsl(토론, 기여, 게임, 메일) 2023년 8월 25일 (금) 21:51 (KST)답변[답변]
이게 Miraheze 시절에 제안된 거라 도전과제 서버를 어쩔 수 없이 사이트 외부에 두려던 건데 현재는 내부에 처리 로직을 둬도 되겠습니다. 서버에 높은 워크로드를 줄 경우에만 외부로 빼내는 것을 고려하면 되겠네요. 그에 따라 제안 내용을 변경했습니다. --Senouis(토론장, 기여) 2023년 8월 27일 (일) 13:57 (KST)답변[답변]

3단계 피드백 및 4단계 입안 토론

기간: 2025년 12월 10일 ~ 2025년 12월 30일