업데이트 내역

웹사이트와 서버 모드의 업데이트 내역이에요. 최신 것부터 순서대로 있습니다

CloudRidge 웹사이트와 서버 모드의 모든 업데이트를 최신순으로 정리했어요. 어떤 기능이 언제 추가됐는지, 어떤 문제가 언제 고쳐졌는지 돌아볼 때 확인해 보세요.

버전별
v1.9.90 웹사이트 2026-11-01

v1.9.90 · 첫 화면 배치 변경, 3D 드래그 복구

  • 첫 화면을 다시 배치했습니다. 제목은 한 줄을 차지하고, 3D 투영은 왼쪽, 서버 참가와 현재 접속 카드는 오른쪽에 놓입니다. 휴대폰에서는 한 열로 쌓입니다.
  • 3D 장면이 드래그되지 않던 문제를 고쳤습니다. 투명한 자리표시자 레이어 두 개가 캔버스 위를 덮어 포인터 이벤트를 모두 가로채고 있었습니다. 이제 버튼과 링크만 클릭을 받고, 나머지 영역은 드래그됩니다.
  • 첫 화면 모델을 보내주신 블랙홀 투영을 그대로 구운 것으로 교체했습니다(손으로 만든 모델은 폐기). 유리판, 벽, 반 블록을 실제 두께로 렌더링해 뚫린 구조가 드러납니다.
v1.9.89 웹사이트 2026-11-01

v1.9.89 · 블랙홀을 다시 만들었습니다

  • 첫 화면의 블랙홀을 새로 만들었습니다. 원반은 두 겹으로 얇게, 깔때기는 더 깊고 크게, 중심에는 실제 구멍, 안쪽에는 사건의 지평선 고리, 바깥에는 네 개의 나선 팔을 넣었습니다. 위에서 보면 소용돌이로 보이고 더 이상 케이크처럼 보이지 않습니다.
  • 카메라 각도를 0.62 에서 0.78 로 올려 구멍 속을 들여다보게 했고, 모델을 위로 올려 제목과 버튼을 가리지 않게 했습니다.
  • 첫 화면의 겹침을 고쳤습니다. 아래쪽 구름 띠가 서버 주소 상자와 겹쳤는데 이제 별도 여백을 가집니다.
v1.9.88 웹사이트 2026-11-01

첫 화면을 가운데로, 블랙홀은 직접 만든 모델로

  • 제목은 위, 모델은 가운데, 버튼은 아래로. 온라인 카드는 첫 화면 아래로 옮겼습니다.
  • 블랙홀 도면은 1380만 블록에 565×565라 첫 화면에서는 색 잡음이 됩니다. 그래서 직접 다시 만들었습니다 — 동심원 링, 어두운 눈동자, 기계 테두리, 5700 블록 33 KB.
  • 휴대폰은 그대로 정적 포스터(새 블랙홀 이미지, 54 KB)이며 「3D 들어가기」를 눌러야 렌더러를 불러옵니다.
v1.9.87 웹사이트 2026-11-01

계정 정보 완성과 본인 확인 절차

  • QQ 로 만든 계정은 첫 로그인 때 비밀번호 설정과 이메일 또는 휴대폰 인증을 마쳐야 사이트를 쓸 수 있습니다.
  • 이메일이나 휴대폰 번호를 바꾸려면 지금 등록된 주소나 번호로 온 인증번호가 먼저 필요합니다.
  • 연동된 QQ 를 바꾸려면 현재 비밀번호를 입력해야 합니다.
  • 처음 쓰는 기기에서 로그인하면 인증된 이메일로 알림이 갑니다.
v1.9.86 웹사이트 2026-10-31

换页不再白屏一下、注册页的「手机号注册」能点了

  • 点站内链接时,旧页面不再先淡成一片白底 —— 之前新页面要等网络往返才到,中间那一下就是白屏。现在旧页面保持原样,换页后新页面照旧淡入、内容依次上滑。
  • 注册页的「手机号注册」原来点了像是没反应:它只是把单选按钮选中,页面上的提示文案与「发验证码」的去向都没变。现在切一下就整页重渲染,提示、去向、表单都跟着变。
  • 如果站点没有配置短信服务,注册页不会再把你留在「手机号注册」这个空壳上,而是自动退回邮箱注册。
v1.9.85 웹사이트 2026-10-31

상단에는 로그인 버튼 하나만, 3D 히어로 크기 조정

  • 상단에서 QQ 진입점을 뺐습니다. 로그인 전에는 버튼 두 개가 나란히 있었지만 이제는 로그인 하나만 남습니다. QQ는 로그인·회원가입 화면에서만 보입니다.
  • 3D 카메라 거리를 모델 높이로 계산하도록 바꿨습니다. 창이 높으면 장면이 화면을 덮지 않고, 낮으면 작게 뭉치지 않습니다.
  • 블록 색을 벚꽃 계열로 모았습니다. 진홍빛 목재·네더 사마귀·산호를 벚나무 목재·꽃잎·잎으로 매핑해 색 노이즈처럼 보이지 않습니다. 블록 배치는 하나도 바꾸지 않았습니다.
v1.9.84 웹사이트 2026-10-31

첫 화면이 드래그로 돌려 볼 수 있는 3D 장면이 되었습니다

  • 첫 화면 전체가 3D 정원 장면이 되었습니다. 드래그로 회전, 휠로 확대, 클릭으로 블록을 캐면 10초 뒤에 다시 생깁니다.
  • 휴대폰과 WebGL2 미지원 브라우저에서는 3D를 강제로 불러오지 않습니다. 같은 각도의 정적 포스터를 보여 주고, 모서리의 3D로 보기를 눌러야 불러옵니다.
  • 페이지 전환도 부드러워졌습니다. 현재 페이지가 사라지고 새 페이지가 나타나며 각 블록이 차례로 올라옵니다. 동작 줄이기가 켜져 있으면 기존처럼 바로 이동합니다.
  • 눈에 띄던 QQ 파란 타일을 공식 16×16 최소 아이콘으로 바꿨습니다. 다른 아이콘과 같은 무게감입니다.
v1.9.83 웹사이트 2026-10-31

QQ 로그인 버튼을 사이트 전체에서 하나로

  • 로그인 페이지, 가입 페이지, 상단 바, 마이페이지가 이제 같은 QQ 버튼을 씁니다. 텐센트 공식 작은 아이콘에 사이트 자체의 테두리 알약을 씌운 형태이며, 공식 규격이 허용하는 「작은 아이콘 + 글자」 방식이고 아이콘은 공식 원본 그대로입니다.
  • 마이페이지의 「계정과 보안」에 「QQ 연동」을 추가했습니다. 연동, 재연동, 해제가 가능합니다. 로그인 비밀번호가 없는 계정은 해제할 수 없습니다. QQ로만 가입한 계정은 비밀번호가 없어 해제하면 다시 들어올 수 없기 때문입니다.
  • 조판과 질감: 제목은 더 조이고 굵게, 섹션 여백은 넓게, 카드에는 포인터를 따라오는 부드러운 빛이 생깁니다.
  • 모션: 첫 화면이 한 줄씩 떠오르고, 숫자가 올라가고, 상단에 읽기 진행 막대가 생기며, 홈 카드가 살짝 시차로 움직입니다. 시스템에서 「동작 줄이기」를 켜면 전부 꺼지고, 호버가 없는 기기에서는 빛도 켜지지 않습니다.
v1.9.82 웹사이트 2026-10-31

QQ 로그인을 텐센트 공식 버튼으로 교체 — 로그인·회원가입 페이지와 상단 내비게이션 세 곳

  • 로그인과 회원가입 페이지에는 직접 그린 펭귄 아이콘과 「QQ 원클릭 로그인」 문구가 쓰이고 있었습니다. 텐센트의 「웹사이트 프런트엔드 페이지 규정」은 공식 「QQ登录」 표식을 반드시 사용하고 임의로 수정하지 못하도록 합니다. 그래서 두 곳 모두 텐센트 공식 230×48 긴 아이콘 원본을 원래 크기로 표시하도록 바꿨습니다. 늘리거나 줄이지 않습니다.
  • 상단 내비게이션에도 하나 추가했습니다. 넓은 화면에서는 공식 76×24 「QQ登录」 버튼, 375px 이하에서는 공식 24×24 아이콘으로 바뀌어 헤더에 가로 스크롤이 생기지 않습니다.
  • 덤으로 두 가지를 고쳤습니다. 공식 버튼은 어떤 상태에서도 회색으로 변하지 않습니다. 이용약관 체크가 꺼져 있을 때 누르면 체크박스까지 스크롤해 빨갛게 강조할 뿐, 버튼을 비활성화하지 않습니다(회색이 된 버튼은 꼭 "버튼을 잘못 놓은" 것처럼 보입니다). 그리고 「이 사이트는 이메일 + 비밀번호로 로그인합니다」라는 문장은 이미 사실이 아니어서, 10개 언어 모두 가입 안내 절반만 남겼습니다.
v1.9.81 웹사이트 2026-10-18

휴대폰의 「서버 가이드」에서 본문이 목차에 가려지던 문제를 고쳤습니다

  • 가이드 사이드바는 데스크톱에서 왼쪽 위에 고정되는 좁은 열입니다. 한 열로 바뀐 휴대폰에서는 폭이 꽉 차고 높이가 화면 하나를 넘는 큰 덩어리가 되는데도 화면 위쪽에 고정되어 있었습니다. 그래서 본문이 그 아래로 지나가며 글자가 겹쳐 보이고, 흰 상자가 떠다니고, 내용이 없는 것처럼 보였습니다. 900px 이하에서는 페이지와 함께 흐르게 했고 데스크톱은 그대로 고정입니다. 이 문제는 이번 변경 이전부터 있었고 휴대폰에서 발견되지 않았을 뿐입니다.
v1.9.80 웹사이트 2026-10-18

작은 도구들을 고쳤습니다: 탭 바가 실제로 눌리고, 그라데이션이 더 자유로워졌고, 계산기가 그대로 채워서 열 수 있는 목록을 줍니다

  • 도구 열 개가 원래 한 페이지에 전부 깔려 있었고 위쪽 캡슐을 눌러도 앵커로 이동만 해서 아무 반응이 없는 것처럼 보였습니다. 지금은 진짜 탭 바라서 한 번에 하나만 보여 줍니다. 주소창에 #t-xxx 를 넣으면 해당 도구를 바로 열 수 있고, 휴대폰에서는 탭 바를 옆으로 밀 수 있습니다. 그라데이션 글자는 고정된 두 색에서 2~6 개 색 표시점으로 바뀌었습니다: 막대를 누르면 하나 추가되고, 끌면 위치가 조정되며, 표시점을 고르고 「이 색 삭제」를 누르면 사라집니다. 색은 위치에 따라 글자 단위로 보간되므로 § 코드 / MiniMessage / tellraw / MOTD 네 가지 결과가 함께 바뀌고, MOTD 가 너무 길면 알려 줍니다
  • 서버 구성 계산기가 세 가지 예산 등급에서 아홉 개 입력으로 늘었습니다. 모드 수, 시야 거리, 시뮬레이션 거리, 레드스톤 회로 사용 여부, 목표 TPS, 버전을 모두 채울 수 있습니다. 출력도 숫자 몇 줄이 아닙니다: 메모리가 왜 늘어나는지 알려 주고, 바로 복사할 수 있는 시작 명령과 Aikar’s flags, server.properties 와 spigot.yml 의 줄별 제안, 플레이 성향별 모드 / 플러그인 목록도 함께 줍니다. 가장 자주 바뀌는 세 가지 계수(인당 메모리, 모드 계수, 레드스톤 계수)는 관리자 화면 「도구」로 옮겼고, 고친 뒤 새로 고치면 적용됩니다
  • 렉 점검이 항목별 원인 계산으로 바뀌었고, 이 사이트의 실시간 데이터와도 비교합니다. 입력에 상주 엔티티, 청크 로더, 레드스톤 가루, 자동 농장 네 항목이 늘었습니다. 출력은 MSPT 를 일곱 항목으로 나눠 비중과 밀리초를 보여 주고, 정말 큰 비중(45% 이상)을 차지할 때만 「이것이 끌고 있다」고 지목합니다. 아니라면 「가장 큰 것은 이것이지만 전체는 높지 않다」고 솔직하게 말합니다. 모든 항목에 실행 가능한 개선 방법이 붙고, 이 사이트의 실시간 데이터를 끌어와 「입력한 규모가 이론상 얼마나 먹고 이 사이트에 지금 얼마나 남았는지」도 알려 줍니다. 데이터를 못 받으면 로컬 추정만 하고 오류는 띄우지 않습니다
v1.9.79 웹사이트 2026-10-18

액체 유리를 Apple 방식으로 다시 만들다: 굴절하고, 하이라이트가 있고, 흰 배경에서도 버틴다

  • ① 지난 버전의 유리는 사실상 흰 한 겹뿐이라 흰 카드 위에 놓이면 보이지 않았습니다. 이번에는 iOS 26 방식을 따라 재질부터 다시 만들었습니다. 위에 밝은 선, 아래에 어두운 선, 바깥에 1px 헤어라인 링, 안쪽에 은은한 빛, 그리고 아주 가벼운 그림자. 데스크톱에서는 여전히 진짜 굴절입니다(배경이 살짝 휘고, 호버하면 판 전체가 1픽셀 떠오르고 누르면 다시 내려앉습니다). 주요 버튼과 위험 버튼은 이전에 유리에서 통째로 빠져 있었는데 이제 들어옵니다. 브랜드 색 그라데이션은 버튼 자체에 남고, 흰 글자의 대비는 그대로이며, 유리 층은 하이라이트와 테두리만 맡고 굴절은 겹치지 않습니다. 같은 재질을 입력창, 셀렉트, 태그, 게임·도구·플레이어 배지, 상단 내비게이션까지 넓혔습니다.
  • ② 휴대폰에서는 굴절을 돌리지 않고(가장 비싼 단계입니다) 흐림과 하이라이트 테두리로 자동 열화합니다. 여전히 유리처럼 보이지만 GPU는 거의 쓰지 않습니다. 덤으로 진짜 문제 하나를 고쳤습니다. 휴대폰 분기가 그냥 빠져나가 열화 처리조차 실행하지 않았기 때문에, 휴대폰에서는 유리가 아예 없었습니다. 데스크톱에서도 두 가지. 같은 크기의 유리는 변위 맵을 한 장만 생성하고(홈의 유리 7개가 4장만 씁니다) 화면 밖으로 나간 것은 더 이상 계산하지 않습니다. 또 한 장의 면적이 30만 픽셀을 넘거나 한 페이지에 80장을 넘으면 생성을 멈춥니다. 한 장이 빠지는 편이 스크롤이 느려지는 것보다 낫습니다.
  • ③ 관리자 화면의 「외형」에 있는 스위치는 그대로이고 기본값이 켜짐으로 바뀌었습니다. backdrop-filter를 지원하지 않는 브라우저(Safari, Firefox)는 자동으로 무광으로 물러나며 고장 난 것이 아닙니다. 이번에는 색상도 레이아웃도 건드리지 않았고 테마는 여전히 Cloudridge Blue입니다. 지난 버전의 Apple식 흰 배경은 사이트 전체에서 되돌렸고(관리자, 포럼, 갤러리, 지도 모두 원래대로) 남긴 것은 진짜 버그 두 건의 수정뿐입니다. 관리자 화면의 위험한 작업 확인창은 원래 스타일이 전혀 없었고(43곳의 삭제 확인이 배경 차단도 없는 민짜 상자로 떴습니다) 갤러리의 좁은 화면 제목은 마우스를 올릴 때만 나타났습니다.
v1.9.78 웹사이트 2026-10-17

사이트 전체를 Apple 스타일로: 흰 배경, 헤어라인, 캡슐 버튼, 그리고 잘못된 숫자까지 한 번에 정리

  • 사이트 전체의 겉모습을 Apple 방식으로 다시 만들었습니다. 흰 배경, 거의 검은 글자, 그림자 대신 1px 헤어라인 한 줄, 버튼과 필터 태그는 높이 44의 캡슐로 통일, 상단 바는 스크롤을 넘기면 반투명에서 불투명으로 바뀝니다. 유리 효과는 전부 걷어냈습니다 —— 데이터 카드, 타임라인, 상태 카드에 있던 흐림 층이 모두 사라지고 상단 바 한 겹의 아주 옅은 반투명만 남았습니다. 중국어 제목에는 더 이상 음수 자간을 넣지 않습니다. 중국어 글자는 원래 자리폭을 꽉 채우기 때문에 좁히면 뭉쳐서 굵게 보입니다. 좁혀야 하는 것은 숫자뿐입니다. 관리자 화면도 함께 다시 정리했고, 진짜 버그도 하나 고쳤습니다. 위험한 작업의 확인 창이 관리자 화면에서는 스타일이 전혀 없어서, 배경 차단도 위치 지정도 없는 민짜 상자로 떠 있었고 사이트 전체 51곳의 삭제 확인이 모두 영향을 받았습니다. 이제는 배경 차단이 있고 제목이 붉게 물든 가운데 카드입니다. 이 전체는 Apple이라는 색상 테마 아래에 붙어 있습니다(관리자 → 외형에서 선택). Cloudridge Blue로 되돌리면 코드를 건드리지 않고 전부 원래대로 돌아갑니다.
  • 이번 모바일 쪽은 「쓰기에 충분히 좋지 않은」 부분만 정확히 겨냥했습니다. 데이터 페이지의 큰 숫자 네 개는 원래 하나가 한 줄을 다 차지했는데, 이제 2×2로 한 화면에 다 들어옵니다. 플레이어 검색창과 검색 버튼은 원래 겹쳐 있었고(버튼이 안내 문구를 70픽셀 가까이 가렸습니다), 이제 한 줄에 나란히 섭니다. 순위표는 각 줄의 위아래 회색 선이 겹쳐 두꺼운 막대가 되던 것을 1px 헤어라인 하나로 바꿨습니다. 타임라인의 「카드 안의 카드」 이중 테두리, 곳곳의 점선 테두리, Windows의 짙은 회색 두꺼운 스크롤바까지 한꺼번에 정리했습니다. 가이드 페이지 사이드바의 서버 현황은 라벨과 값이 붙어 있었는데(버전1.21.1처럼 표시), 좌우로 나누고 구분선을 넣었습니다.
  • 감사에서 나온 데이터 문제 10건을 고쳤습니다. 가장 중요한 두 가지. 첫째, 홈의 누적 접속 시간이 초를 시간으로 표시했습니다(35.7M h로 나왔지만 실제 값은 9907시간이며 3600배 차이입니다). 둘째, 차단 목록의 4명이 「해제됨」으로 표시되면서 실제로는 계속 유효했습니다 —— 하트비트가 「이미 존재함」을 보고하면 상태만 조용히 유효로 되돌리고, 이력도 쓰지 않고 플레이어의 차단 표시도 되돌리지 않았기 때문입니다. 나머지. 상태 페이지의 「설치된 모드」가 세 곳에서 각각 0 / 12 / 160으로 달랐고(실제 값은 160), 운영체제는 대시로 표시됐습니다. 둘 다 원인은 같습니다 —— 하위 조회가 화이트리스트 방식이라 이 두 필드가 빠져 있었습니다. 순위표에서는 UUID 문자열이 이름으로 상위를 차지하고 있었는데, 이제 「알 수 없는 플레이어 · 87274f」로 표시합니다. 가동률 상한은 99.2퍼센트로 고정돼 있었고(30초 고정 간격으로 계산했지만 실측 하트비트는 31초), K/D는 사망 기록이 없을 때 천문학적인 숫자를 냈는데 이제 대시로 표시합니다. 나머지 두 건은 순위표 정책(역할 기준과 계정 기준의 두 가지 통합 방식, 킬 수만 가진 그림자 계정)에 속해 강제로 고치지 않았고, 차이와 그 대가를 코드 주석에 적어 두고 운영자 판단을 기다립니다.
v1.9.77 웹사이트 2026-10-11

가짜 실제 IP로 가는 길을 nginx부터 애플리케이션 계층까지 모두 막았습니다

  • ① 먼저 재고 나서 변경: 운영 서버의 탐침으로 두 가지를 실측했습니다 —— 바오타 nginx는 PROXY 프로토콜을 쓰기 때문에 진짜 클라이언트 주소가 이미 REMOTE_ADDR에 들어 있습니다(실측값은 222.212.76.94이고 127.0.0.1이 아닙니다). 그리고 클라이언트가 직접 넣은 X-Real-IP / X-Forwarded-For / CF-Connecting-IP는 nginx가 그대로 PHP로 넘기며, 위조한 세 헤더가 전부 그대로 도착하고 nginx는 어느 것도 덮어쓰지 않습니다. ② 양쪽 끝을 함께 단단히: nginx가 자체 프록시만 아는 키를 주입하고(클라이언트가 이 헤더를 위조해도 nginx가 덮어씁니다), 애플리케이션 계층에 「REMOTE_ADDR이 공인 주소면 그대로 채택하고 프록시 헤더는 보지 않는다」는 관문을 하나 더 두었습니다 —— 혹시라도 trust_proxy를 잘못 켜더라도 속도 제한, 잠금, 감사에 남는 IP가 방문자가 지정한 값이 되지 않습니다.
  • 겸사겸사 세 가지: site/config/config.php의 오해를 부르는 주석(「CDN / 리버스 프록시 뒤에 있으면 true로 설정」)을 실측 결론과 경고로 바꿨습니다 —— 이 사이트에서 그대로 따르면 위조 가능한 헤더를 권위 있는 값으로 승격시킬 뿐입니다. 이번 변경에는 자동 테스트를 붙였고(trust_proxy 켬 + 공인 REMOTE_ADDR + 위조 헤더 ⇒ 그래도 실제 주소를 반환), 테스트가 81개에서 83개로 늘어 전부 통과했습니다. 운영 점검용 임시 탐침은 약속대로 삭제했고, 이제 요청하면 404입니다.
v1.9.76 웹사이트 2026-10-11

휴대폰 스크롤이 더 부드러워지고, 보안 구멍 몇 개를 막았으며, 채팅 기록이 중간을 더는 건너뛰지 않습니다

  • 휴대폰 부드러움 관련 네 곳: 스크롤할 때 상단 바에 걸리던 반투명 유리, 좁은 화면에서 모든 카드에 걸려 있던 반투명 유리, 등장 애니메이션이 요소마다 계속 살려 두던 합성 레이어, 스크롤 1픽셀마다 리플로우를 일으키던 읽기 진행 표시줄 —— 모두 같으면서도 더 싼 방식으로 바꿨습니다(스크롤 상태의 상단 바는 어차피 불투명하니 그 흐림은 순전히 헛계산이었고, 애니메이션이 실제로 시작되면 브라우저가 알아서 레이어를 승격합니다). 폭 390 휴대폰 뷰포트 + CPU 20배 스로틀링 실측: 최대 프레임이 364밀리초에서 57밀리초로 줄었습니다. 전체 프레임 수의 차이는 이 장비의 노이즈에 묻혀 안정적인 결론을 낼 수 없습니다 —— 그래서 위 항목들은 모두 구조적으로 설명이 될 때만 손댔습니다.
  • 보안 세 곳(높음/중간 위험, 바로 수정했습니다): ① 로컬 디버깅용 _admlogin.php는 이제 운영 환경에서 반드시 404여야 합니다(방문자를 곧바로 관리자로 만들 수 있었습니다). ?to=도 더는 사이트 밖으로 나갈 수 없습니다. ② 속도 측정 페이지의 ping / dns는 도메인 이름을 넘겨 포트를 확인하는 구조라 DNS 리바인딩으로 내부망을 탐색당할 수 있었습니다. 이제는 이미 검증한 IP에만 접속합니다. ③ 위조한 X-Real-IP / CF-Connecting-IP로 IP 기준 속도 제한을 우회할 수 있었습니다. 이제는 요청 출처가 정말 루프백일 때만 이런 헤더를 믿습니다. ③을 완전히 막으려면 nginx에서 X-CDR-Proxy-Secret를 주입하고 site/config/config.php에 security.proxy_secret를 채워야 합니다 —— 서버 설정을 건드리는 일이라 확인해 주시면 진행하겠습니다.
  • 채팅 기록의 진짜 버그 세 가지: ① 하루 메시지가 200건을 넘으면 가운데 큰 구간이 페이지에서 영영 보이지 않았습니다(가장 바쁜 날은 2796건인데 예전 경로로는 500건까지만 거슬러 올라갈 수 있어 가운데 2296건은 아무도 볼 수 없었습니다). ② 정렬이 기본 키 id만 보는 탓에 날짜 경계를 넘는 날에는 자정 이후 메시지가 창 밖으로 밀려났습니다(실측으로 53건의 더 새로운 메시지가 영구히 건너뛰어졌습니다). ③ 전송에 실패했을 때 화면은 이미 보낸 것처럼 꾸몄습니다. 이제는 시간 기준으로 가져오고, 「더 이전 불러오기」 버튼으로 앞으로 넘길 수 있으며, 실패하면 분명히 알려 주고 다시 시도할 수 있습니다.
  • 겸사겸사: 방문자용 페이지는 더 이상 일괄적으로 캐시 금지가 아닙니다(뒤로·앞으로가 조금 빨라집니다). 로그인 상태는 예전처럼 전혀 캐시하지 않습니다. 사이트 전체 PHP 파일 218개의 문법 오류는 0건이고, 자체 테스트 스크립트 59개를 모두 돌렸습니다 —— 이번 변경과 관련된 15개 스위트의 결과는 변경 전과 완전히 동일합니다(원래 있던 로컬 환경 실패가 하나도 늘지 않았습니다).
v1.6.7 모드 2026-10-10

서버 메인 스레드를 더 아끼는 버전

  • 지도 보고를 「서버의 그 tick 안에서 19.7만 개 점의 JSON을 조립」에서 「그 tick은 데이터만 넘기고 조립은 백그라운드 스레드에서」로 바꿨습니다. 모드 전체에서 유일하게 「한 tick에 수백 밀리초」를 일으킬 수 있는 곳이며, 30분에 한 번씩 나타나는 간헐적 스파이크와 정확히 대응합니다.
  • 나머지 인원수·엔티티 수에 따라 커지는 부분도 함께 최적화했습니다. TAB 숫자 포매팅은 tick 단위 캐시로, 이름으로 플레이어 찾기는 tick마다 한 번 만드는 이름 색인으로, 업적 목록은 항목마다 문자열을 만들지 않도록, 30초마다 읽던 설정 파일과 차단 목록은 백그라운드로, 채팅 큐 길이 판정은 카운터로, 네트워크 샘플링은 20초마다 스레드를 새로 만들지 않도록, 명령 스로틀링 테이블은 계속 늘어나기만 하지 않도록 했습니다. 보고 형식, 필드 이름, 값 취득 시점은 모두 그대로입니다.
v1.9.75 웹사이트 2026-10-10

서버 모드 다이어트: 인원수에 따라 커지는 비용을 메인 스레드 밖으로 옮겼습니다

  • 모드 보고에서 가장 큰 덩어리는 지도입니다. 지도 3장이 각각 256×256이고 점이 약 19.7만 개입니다. 예전에는 이 점들을 서버의 그 tick 안에서 바로 JSON으로 조립했고, 조립이 끝나야 서버가 계속 진행했습니다 —— 30분에 한 번이라, 「가끔 한 번씩 끊기는」 그 스파이크와 정확히 맞아떨어집니다. 이제는 수집하는 tick은 데이터만 넘기고 조립은 백그라운드 스레드로 옮겼습니다. 데이터는 이미 다 있는 것이고, JSON 조립이 메인 스레드를 붙잡을 이유는 없었습니다.
  • 겸사겸사 접속 인원수에 따라 커지는 몇 가지 비용도 정리했습니다. TAB 목록의 숫자(플레이 시간, 접속 인원 등)는 30초에 한 번만 바뀌는데도 플레이어마다 줄마다 다시 계산했습니다. 이름으로 플레이어를 찾는 폴백은 전체 표를 줄 단위로 훑었습니다(10명이면 100번 조회). 업적 목록은 10분마다 1000개가 넘는 레시피 항목까지 훑었습니다. 30초마다 엔티티를 세기 위해서만 모든 월드의 엔티티를 전부 순회했고, 그동안 메인 스레드에서 설정 파일과 차단 목록을 읽었습니다. 이제는 각각 캐시, 색인, 한 번만 계산, 백그라운드 읽기로 바꿨습니다 —— 사이트로 보내는 내용은 1바이트도 바뀌지 않았습니다. 페이지 표시도 예전과 완전히 같습니다.
v1.9.74 웹사이트 2026-10-05

관리 화면과 프로필 공개 설정을 개선했습니다

  • 사이드바의 미승인 배지는 포럼과 갤러리 두 개만 세고 있었는데 관리 패널은 다섯 개를 세고 있었습니다. 이제 모두 하나의 함수에서 나오고, 메뉴 항목마다 자기 숫자가 붙습니다. 파괴적인 작업(사용자 그룹 삭제, 내비 항목 삭제, 채팅 로그 정리, 캐시 비우기)은 확인 없이 실행되던 것을 이제 확인합니다. 스킨·아바타 배경·채팅 로그 목록은 200건과 60건에서 멈춰 있었는데 이제 페이지를 넘길 수 있습니다.
  • 다른 사람에게 프로필 공개 설정은 팀 페이지에만 적용됐고 프로필 자체는 누구나 볼 수 있었습니다. 이제 본인을 제외하고 실제로 적용됩니다. 비밀번호 변경과 다른 기기 로그아웃도 감사 로그에 남습니다.
v1.9.73 웹사이트 2026-10-05

빨간 확인/삭제 버튼이 다시 보입니다

  • 메시지 철회 확인 버튼이 빈칸으로 나왔습니다. 액체 유리가 켜져 있으면 유리 규칙이 버튼 배경만 지우고 흰 글자는 남겨서, 빨간 버튼이 흰 바탕에 흰 글자가 되었습니다. 이제 빨간 단색 버튼은 파란 기본 버튼과 똑같이 유리 대상에서 빠집니다.
  • 같은 문제가 사이트의 모든 빨간 버튼(철회, 삭제, 연동 해제 등)에 있었고 함께 고쳤습니다.
v1.9.72 웹사이트 2026-10-05

페이지를 넘겨도 맨 위로 튀지 않습니다

  • 아래쪽에서 다음 페이지를 누르면 맨 위로 되돌아갔습니다. 이제는 페이지 버튼 위의 목록을 기준으로 맞추고, 그 목록이 이미 보이면 아무것도 하지 않습니다. 뒤로/앞으로는 이전 스크롤 위치로 돌아갑니다.
  • 겸사겸사 몇 가지: 내비게이션 서버에 시드 맵 추가, 페이지 내 앵커가 고정 헤더에 가리지 않음, 갤러리 카드에 작성자 표시, 홈의 접속 중 플레이어를 누르면 프로필로 이동합니다.
v1.9.71 웹사이트 2026-10-05

관리 권한 강화 및 자잘한 오류 수정

  • 설정, 키 재발급, 백업, 시스템 도구는 이제 운영자 전용입니다. 서버 관리자는 콘텐츠, 신고, 화이트리스트를 그대로 담당합니다.
  • 페이지를 넘길 때의 자잘한 문제를 고쳤습니다. 다크 모드가 유지되고, 폼이 두 번 전송되지 않으며, 카운트다운이 정상 속도로 흐르고, 정렬 선택이 페이지를 새로 고치지 않습니다.
v1.9.70 웹사이트 2026-10-05

페이지를 넘겨도 전체 새로고침 없음

  • 페이지 넘김, 필터, 검색, 정렬은 내용만 바꿔 끼웁니다. 주소는 그대로 바뀌고 뒤로 가기도 정상 동작합니다.
  • 저장, 심사, 삭제는 이전처럼 페이지를 이동합니다.
v1.9.69 웹사이트 2026-10-05

플레이어 목록 검색창이 카드에 가려지던 문제 수정

  • 애니메이션 요소는 will-change 를 갖고 있고 will-change 는 스태킹 컨텍스트를 만들어, 드롭다운의 z-index 가 자기 카드 안에서만 유효해 DOM 순서상 뒤에 오는 통계 카드에 밀렸습니다
  • 검색 카드 전체를 위로 올려 드롭다운이 온전히 위에 뜹니다
v1.9.68 웹사이트 2026-10-04

모바일 프로필 페이지가 스크롤되지 않던 문제 수정

  • 3D 스킨 모델이 touch-action:none 으로 고정되어 있고 touchstart/touchmove 에서 무조건 preventDefault 를 호출해, 손가락이 닿아 있으면 페이지가 멈췄습니다. 세로는 브라우저 스크롤, 가로만 모델 회전으로 바꿨습니다
  • 헤더의 배경 드래그도 마우스 전용으로 좁혔습니다
v1.9.67 웹사이트 2026-10-04

서버 가이드를 전면 개편했습니다. 분량은 두 배, 명령어도 플레이어용이 구분됩니다

  • 시작하기, 규칙, 자주 묻는 질문, CloudRidge 소개 네 페이지를 모두 다시 썼고, 왜 필요한지와 실패했을 때 어떻게 하는지까지 담았습니다
  • 명령어 페이지 상단에 플레이어용 명령어를 추가해 첫걸음 / 이동 / 채팅 / 확인으로 묶었습니다. 435줄 전체 목록은 아래에 그대로 있습니다
v1.9.66 웹사이트 2026-10-04

모바일 가로 스크롤 안내가 표에 붙어 보이지 않습니다

  • 표 위 안내가 위쪽 테두리에 딱 붙어 겹쳐 보였습니다. 여백을 넣었습니다
  • 스크롤하면 헤더가 완전히 불투명해집니다(예전에는 반투명이라 큰 글자가 비쳤습니다)
v1.9.65 웹사이트 2026-10-04

업로드된 SVG의 보안 취약점을 수정했습니다

  • 교묘하게 만든 SVG 아이콘이나 배경을 올리기만 해도 그것을 본 사람의 IP 주소와 브라우저 정보가 새어 나가는 상태였습니다. 지금은 외부 참조가 자동으로 제거되며, 그림 자체의 모습은 달라지지 않습니다.
  • 함께 HSTS 와 몇 가지 보수적인 콘텐츠 보안 정책을 추가했습니다.
v1.9.64 웹사이트 2026-10-04

심사 배지가 계속 켜져 있지 않습니다 + 상태 페이지에서 내부 주소를 숨깁니다

  • 관리자 「심사」 배지는 5개 대기열을 세는데, 「서버 관리」 패널은 그중 2개만 처리할 수 있었습니다. 그래서 배지는 켜져 있는데 심사할 것이 없었습니다. 이제 두 기준을 맞췄고, 패널 위에 「더 볼 것」 줄(앨범 / 스킨 / 포럼)을 추가해 해당 관리 페이지로 바로 이동할 수 있습니다.
  • 서버 상태 페이지의 「웹 지도」 줄은 127.0.0.1:8100(내부 주소, 연결 확인용)으로 표시되었습니다. 이제 공개된 웹 지도 주소를 보여줍니다.
v1.9.63 웹사이트 2026-10-04

관리자 화면에서 영상을 바로 볼 수 있습니다

  • 동적 배경 영상이 붙은 배경은 심사 카드에서 그 영상을 그대로 재생합니다. 재생 버튼을 누르면 볼 수 있고, 기본적으로 앞부분만 불러옵니다(트래픽 절약). 「영상 있음」 표시도 붙습니다.
  • 예전에는 카드에 플레이어가 따로 고른 커버 이미지만 나와서 영상 내용과 전혀 무관할 수 있었습니다. 이제 헷갈리지 않습니다.
  • 「업로드 시간이 1970-01-01로 표시되는」 문제도 고쳤습니다. 제가 자료를 대신 올리는 도구에서 시간 형식을 잘못 썼고, 데이터와 도구 모두 수정했습니다.
v1.9.62 웹사이트 2026-10-04

로그인 500 오류 수정 + 표시 2가지 조정

  • 500 오류를 고쳤습니다: 이전 버전에서 「로그인 성공」 뒤 감사 로그의 인자 위치를 잘못 넣어 로그인에 성공하면 반드시 내부 오류가 났습니다. 이제 정상적으로 이동합니다.
  • 「다음을 읽고 동의합니다: 이용약관 및 개인정보 처리방침」 줄을 폼 맨 아래(로그인 버튼 아래)로 옮겼습니다. 체크하지 않으면 로그인할 수 없는 점은 그대로입니다.
  • 플레이어 페이지 상단의 어둡게 덮는 층을 부드러운 그라데이션으로 바꿔, 눈에 띄던 가로줄을 없앴습니다.
v1.9.61 웹사이트 2026-10-04

로그인 시 약관 동의가 필요합니다

  • 로그인 페이지에 체크박스가 생겼습니다: 「다음을 읽고 동의합니다: 이용약관 및 개인정보 처리방침」——체크하지 않으면 로그인할 수 없습니다. QQ 원클릭과 이메일+비밀번호 두 경로 모두 막히며, 서버에서도 검증합니다(버튼 비활성화만으로는 막을 수 없기 때문입니다).
  • 「이용약관」과 「개인정보 처리방침」 두 페이지를 새로 작성했습니다. QQ가 주는 닉네임과 openid, 이메일과 비밀번호 해시, 연동한 캐릭터, 게임 통계, 업로드한 이미지, 로그인 IP와 시각을 항목별로 적었습니다.
  • 공유 대상도 명시했습니다 —— QQ 인터커넥트(로그인), mc-heads.net(직접 올린头像이 없을 때 스킨头像), 126 메일(인증 코드) 세 곳뿐입니다. 광고 네트워크는 없고 데이터를 판매하지 않습니다.
  • 보관 기간, 삭제·내보내기 요청 방법, 미성년자 처리도 담았습니다. 푸터의 바로가기에서도 두 페이지로 갈 수 있습니다.
v1.9.60 웹사이트 2026-10-04

밝은 프레임에서도 머리글 글자가 잘 보입니다

  • 동영상이 사진을 대신한 뒤 머리글의 흰 글자는 밝은 하늘과 구름 위에서 최악 1.16:1 로 거의 읽을 수 없었습니다. 원인은 그리기 순서였습니다. 동영상은 실제 자식 요소이고 어둡게 하는 그라데이션은 body.cdr-body::before(생성 콘텐츠)에 있었는데, 생성 콘텐츠는 항상 실제 자식보다 먼저 그려지므로 동영상이 그라데이션을 통째로 덮어 아무 효과도 없었습니다
  • 해결은 어둡게 하는 층을 머리글 자신의 배경으로 만드는 것입니다. 위에서 아래로 가는 그라데이션(상단 62%, 350px 에서 사라짐)이 머리글 띠만 덮고 인물과 지면, 물은 한 픽셀도 건드리지 않습니다. 고정 위치 레이어를 새로 추가하지 않아 페이지 높이는 6816px 그대로입니다
  • 가장 밝은 프레임에서 머리글 대비는 1.16~2.63:1 에서 4.85~6.91:1 로 올랐습니다(흰 글자 기준 4.5:1). 온라인에서만 나타나던 회귀도 함께 고쳤습니다. 액체 유리 아래 「뒤로」 버튼은 표면이 반투명이라 어둡게 하는 층에 함께 어두워졌고(5.19:1 이 2.14:1 로 하락), 이제 라벨도 흰색이 되어 최악 6.04:1 입니다
  • 배너를 설정한 페이지에만 적용됩니다. 설정하지 않은 페이지는 1 바이트도 바뀌지 않습니다. 휠, 버튼, 동영상 재생은 모두 재검증했습니다
v1.9.59 웹사이트 2026-10-04

움직이는 배경: 휠과 클릭이 안 되던 진짜 원인을 찾았습니다

  • 원인은 클래스 이름 충돌이었습니다. .pub-bg-video가 동영상 요소의 클래스이면서 동시에 <html>에 붙이는 스위치 클래스로도 쓰여, 화면을 가득 채우는 고정 동영상 레이어 규칙이 루트 요소에 적용됐습니다. 루트가 position: fixed가 되면서 페이지 높이가 한 화면으로 무너졌고, 휠로 움직일 여지가 사라졌습니다
  • 더 까다로운 점은 pointer-events: none이 상속된다는 것입니다. 문서 트리 전체가 마우스를 받지 못하고 <html>만 반응해서 「뒤로」 버튼을 누를 수 없었습니다
  • 수정은 상태 클래스를 pub-bg-on으로 바꾸고 요소 규칙을 video.pub-bg-video로 좁히는 것입니다. 다시는 같은 이름이 충돌하지 않습니다
  • 배경 소재는 첫 버전으로 되돌렸고(4.50 MB → 4.41 MB) 어둡게 하는 처리를 영상에 굽지 않아 색이 정상으로 돌아왔습니다. 로컬 검증대 3개도 함께 수정했습니다 — 동영상 레이어를 재는 줄 알았지만 실제로는 <html>을 재고 있었습니다
v1.9.58 웹사이트 2026-10-04

움직이는 배경: 공짜로 늘어난 높이 한 화면 제거, 드래그가 더 눈에 띄게

  • 새 영상(15.98 MB → 4.50 MB). 어둡게 하는 처리는 영상에 직접 구워 넣었고, 모바일에서 보이는 정지 화면도 같은 이미지
  • 보이지도 않으면서 한 화면 이상의 높이를 몰래 더하던 불필요한 오버레이 레이어 제거
  • 페이지 상단에서 커서가 「잡는 손」 모양이 되어 어디를 끌면 되는지 보입니다. 터치스크린 노트북도 되도록 판정 완화
  • 휠 문제는 계속 확인 중이며, 이번 버전은 위 세 가지를 고쳤습니다
v1.9.57 웹사이트 2026-10-04

프로필에 동영상 배경을 쓸 수 있습니다

  • 5초~1분 길이의 무음 클립을 올리면 PC에서 반복 재생됩니다. 휴대폰은 정지 이미지 그대로라 데이터를 전혀 더 쓰지 않습니다
  • 동영상을 넣을 수 있는 곳은 「배너」 한 칸뿐이며, 이미지와 같은 심사를 거칩니다. 상한은 6 MB이고 넘으면 분명히 거부되며 조용히 실패하지 않습니다
  • 휴대폰에 보이는 정지 이미지가 바로 그 배너이니, 영상과 분위기가 맞는 사진을 골라 주세요
  • 이 기능은 기본적으로 꺼져 있습니다. 관리자 화면에서 켜야 업로드 칸이 나타납니다
v1.9.56 웹사이트 2026-10-03

「이미지를 골라 저장했는데 아무 일도 없음」을 고쳤습니다

  • 한 플레이어가 아이콘과 배너를 업로드하고 영상까지 보내줬는데, 관리자 쪽에는 검토 대기가 하나도 없었습니다 —— 그 이미지는 서버에 도착하지 않았습니다. $_FILES는 처음부터 끝까지 비어 있었습니다
  • 원인은 iPhone의 HEIC입니다. 브라우저가 디코딩하지 못하는데, 자르기 창이 이를 「취소」로 처리했고 취소는 파일을 폼에서 지워 버립니다. 파일이 없으니 서버는 「이번에는 이미지를 바꾸지 않음」으로 해석해 초록색 성공 메시지만 돌려줬습니다
  • 이제 디코딩할 수 없는 이미지는 버리지 않습니다 —— 원본 그대로(자르지 않고) 업로드하고 이유도 알려 드립니다
  • 서버 쪽 안전장치도 추가했습니다. 브라우저가 골랐다고 했는데 파일이 오지 않으면 오류를 내고, 성공한 척하지 않습니다. 실제로 취소한 경우에도 분명히 알려 드립니다
v1.9.55 웹사이트 2026-10-03

「알 수 없는 플레이어」 이름 수정을 관리자 페이지로

  • 명령줄 스크립트 .tools/_backfill-names.php 가 관리자 「시스템 도구」의 버튼이 되었습니다
  • 과거 백업의 usercache.json 을 읽어 「이름이 아직 UUID」인 행을 실제 이름으로 되돌리고, 세션 기록 / 업적 / 스킨도 함께 옮깁니다
  • 어떤 행이 무엇으로 바뀌는지 먼저 보여 주고, 실행 전에 데이터베이스 스냅숏을 자동으로 남깁니다
  • 이름 전체가 UUID 인 행만 건드립니다. 실제 이름이 이미 쓰이면 병합하고, 일반 플레이어 이름은 절대 건드리지 않습니다
v1.9.54 웹사이트 2026-10-03

순위표: 9개 항목 상위 10명을 한 화면에

  • 요청하신 "세분화된 순위표"입니다. 플레이어 목록의 정렬은 한 번에 한 항목만 볼 수 있어서 "누가 가장 많이 캤는지"와 "누가 가장 많이 죽었는지"를 비교하려면 계속 바꿔야 했습니다. /ranking은 9개 항목의 상위 10명을 한 화면에 모았습니다
  • 항목마다 카드 하나, 그 안에 순위·아바타·이름·해당 항목의 값이 들어갑니다.
  • 값은 플레이어 목록과 글자 하나까지 동일합니다 (같은 포맷 코드를 씁니다). 이름을 누르면 개인 페이지로 이동합니다
  • 카드 오른쪽 위의 「전체 보기」는 해당 항목으로 정렬된 전체 목록을 엽니다(?sort=). 입구는 플레이어 목록 제목 아래의 「순위표」 버튼입니다. 데이터가 없는 항목은 빈 카드를 만들지 않고, 봇도 이전처럼 제외됩니다
v1.9.53 웹사이트 2026-10-03

프로필 배경을 드래그할 수 있게 되었습니다

  • 배너를 올린 페이지에서는 배경 사진을 마우스로 누른 채 끌 수 있습니다. 풍경 사진을 밀어 보는 느낌이고, 헤더·아이콘·이름은 그 위에 그대로 얹혀 있습니다
  • 끌 수 있는 곳은 맨 위 헤더 부분뿐입니다. 아래의 카드·표·버튼은 평소대로 동작하고 글자 선택도 방해하지 않습니다. 버튼을 눌러도 드래그가 시작되지 않습니다
  • 손을 떼면 원래 자리로 돌아옵니다. 끝까지 밀면 거기서 멈추고(사방에 약간의 여유를 남김) 사진이 화면 밖으로 나가 배경색이 드러나지 않습니다
  • 마우스·트랙패드에서만 동작합니다. 터치 화면과 “동작 줄이기”를 켠 사용자는 제외되며 이전과 똑같이 동작합니다
v1.9.52 웹사이트 2026-10-03

“알 수 없는 플레이어”가 스스로 본명으로 돌아옵니다

  • 목록에 “알 수 없는 플레이어 · 87274f”로 표시되는 행이 있습니다. 그 문자열은 사실 그 사람의 UUID 입니다. 서버의 이름 캐시는 약 한 달만 보관되므로, 오래된 멤버가 한동안 접속하지 않으면 모드가 이름을 찾지 못해 UUID 를 올려보냅니다
  • 문제는 이런 행이 지금까지 절대 고쳐지지 않았다는 점입니다. 본인이 돌아와 서버가 이름을 알게 되어도 이름 변경은 “이름 중복 불가” 제약에 걸리고(본명 행은 다른 보고로 이미 만들어져 있는 경우가 많음), 예외는 삼켜져 UUID 가 그대로 남았습니다
  • 이제 두 경로 모두 동작합니다. 본명이 비어 있으면 이름을 바꾸고 그 기간의 세션 기록·업적·스킨도 함께 옮깁니다. 본명이 이미 있으면 그 행으로 병합합니다(플레이 시간 합산, 진행도 합집합, 최초·최종 시각은 경계값)
  • 따로 하실 일은 없습니다. 다음 접속 때 자동으로 고쳐집니다. 동기화 로그에 “adopted=N” 이 기록되며 관리자 “시스템 도구”에서 확인할 수 있습니다
v1.9.51 웹사이트 2026-10-03

아바타가 모든 페이지에 반영됩니다 / 로그인 기록 페이지 나누기 / 연한 버튼 색 문제 수정

  • 업로드한 아바타는 이전에는 프로필 페이지에서만 보였습니다. 다른 페이지의 아바타는 업로드 여부를 알지 못하는 다른 경로를 사용했기 때문입니다. 이제 플레이어 목록, 댓글, 내비게이션에서도 표시됩니다. 업로드한 적 없는 사용자는 이전과 같습니다
  • 「최근 로그인 기록」은 한 페이지에 30개였으나 이제 10개입니다. 하단 페이저는 사이트의 다른 목록과 동일합니다(한 페이지뿐이면 표시되지 않습니다)
  • 「모든 배지 펼치기」 버튼이 회색으로 비활성처럼 보인 것은 명시도 문제였습니다. 연한 버튼의 파란 배경이 기본 흰색 레이어에 밀렸고 자체 배경도 지워졌습니다. 수정했습니다
  • 프로필 왼쪽 열 아래의 빈 공간: 왼쪽 열이 오른쪽 열과 같은 높이로 늘어나고 마지막 순위 카드가 채웁니다. 배지를 펼치든 접든 빈틈이 생기지 않습니다. 레이더 설명도 기본으로 접힙니다
v1.9.50 웹사이트 2026-10-03

리퀴드 글래스를 참고대로 다시 썼습니다: 이번이 진짜 유리입니다

  • 이전 버전은 "그라디언트 맵 하나 + 변위"뿐이라 어떻게 조정해도 비슷해지지 않았습니다. 참고와 한 줄씩 비교해 보니 빠진 것이 셋이었고, 이번에 모두 채웠습니다
  • ① 굴절을 실제 광학으로 계산합니다: 유리 두께, 모서리 베벨, 굴절률(1.0~3.0), 둥근 곡면이 모두 계산에 들어가 가장자리에 "두꺼운 유리"의 확대감이 생깁니다
  • ② 하이라이트 층을 추가했습니다 —— 가장자리를 따라 한 방향으로 빛나는 반사입니다. 리퀴드 글래스에서 가장 눈에 띄는 특징인데 이전 버전에는 아예 없었습니다
  • ③ 변위 후 채도를 되돌리고(굴절은 색을 회색으로 만듭니다) 약간의 계단 현상도 제거했습니다. 블러는 0.3px 그대로: 더 키우면 이웃 화소의 차이가 사라져 굴절이 완전히 없어집니다
v1.9.49 웹사이트 2026-10-03

이제 아바타를 직접 잘라 쓸 수 있습니다. 끌어 보세요, 틀 안이 그대로 결과입니다

  • 예전에는 이미지를 통째로 올리고 사이트가 가운데 기준으로 줄였습니다 —— 얼굴이 한쪽으로 치우쳐 있으면 그대로였죠. 이제 이미지를 고르면 자르기 틀이 뜹니다: 끌어서 위치를 옮기고 휠이나 슬라이더로 확대·축소하면, 틀 안이 최종 아바타가 됩니다
  • 내보내기는 512×512(서버 상한과 동일)이고 형식은 WebP입니다. 작은 이미지는 확대하지 않습니다 —— 확대하면 더 흐려질 뿐이라 원래 크기로 자릅니다. 틀은 좁은 화면에서 자동으로 작아져 휴대폰에서도 쓸 수 있습니다
  • 일부러 자르지 않는 이미지가 두 가지 있습니다: GIF 애니메이션(자르면 한 프레임만 남아 움직임이 사라집니다)과 SVG이며, 둘은 예전 흐름 그대로 갑니다. 자르는 도중 문제가 생기면(브라우저 미지원, 메모리 부족) 원본을 그대로 보냅니다 —— "골랐는데 반응이 없다"에서 막히는 일은 없습니다
  • 배너는 자르지 않습니다 —— 원래 가로로 넓고 정사각형으로 만들 의미가 없습니다. 이 기능은 마이페이지 → 프로필에서 아바타를 올릴 때만 나옵니다.
v1.9.48 웹사이트 2026-10-03

좁은 화면에서 유리 효과를 한 단계 가볍게 했습니다. 모바일 끊김이 줄어듭니다

  • 모바일 프로필 페이지의 끊김은 애니메이션 문제가 아니라 블러 자체가 너무 비쌌기 때문이었습니다. 모든 카드에 blur(32px) saturate(180%)가 걸려 있고, 이 페이지는 한 번에 7~8개의 유리 면이 보여서 스크롤할 때마다 그 뒤 픽셀을 전부 다시 샘플링했습니다
  • 32px와 14px의 차이는 눈으로 거의 구분되지 않습니다 — 카드는 이미 .70~.78의 흰색 위에 있고 블러는 뒤 사진을 부드럽게 할 뿐입니다. 반면 샘플링 비용은 반지름의 제곱에 가깝게 늘어납니다. 채도도 180%에서 150%로 낮췄습니다. 이 페이지에 더 선명한 색이 필요한 곳은 없습니다
  • 좁은 화면에서만 한 단계 낮췄습니다. 데스크톱은 1픽셀도 바뀌지 않았습니다. 순수한 성능 변경이라 눈에 띄지 않지만, 휴대폰 스크롤은 훨씬 부드러워집니다
  • 눈에 띄지 않는 순수한 성능 개선입니다 —— 그래도 휴대폰에서 버벅인다면 어느 화면인지 알려주세요. 계속 살펴보겠습니다.
v1.9.47 웹사이트 2026-10-03

모바일 상태 페이지가 훨씬 짧아졌고, 차단 목록의 모든 행에 "QQ 미연동"이 붙지 않습니다

  • 휴대폰에서는 각 서비스 행이 두세 줄로 접혔습니다. 원인은 명확했습니다. 그 행은 3열 그리드였고 최소 너비 합계가 504px인데, 휴대폰 뷰포트는 492px — 딱 맞지 않아 강제로 줄바꿈되었습니다. 좁은 화면에서는 2열로 바꾸고 비고를 독립된 줄로 만들어 페이지가 500px 이상 짧아졌습니다
  • 패널 여백, 가용성 막대, 노드 카드 크기도 좁은 화면에 맞춰 한 단계 조였습니다. 이 변경은 상태 페이지 안의 스타일 블록에만 있으며 다른 페이지는 1픽셀도 바뀌지 않습니다
  • 차단 목록에서는 모든 행의 플레이어 이름 아래에 똑같은 "QQ 미연동"이 붙어 있어 표가 망가진 것처럼 보였습니다. 확인해 보니 관리 화면의 "차단 페이지에서 QQ 숨기기" 스위치는 계산만 되고 한 번도 사용되지 않아 설정이 계속 죽어 있었습니다
  • 이제 세 곳 모두 이 스위치를 따릅니다 — 목록 행, 아바타의 QQ 배지와 툴팁, 펼친 상세입니다. 차단 사유는 여전히 중국어가 하드코딩되어 있어(10개 언어 모두 중국어 표시) 따로 처리하겠습니다
v1.9.46 웹사이트 2026-10-03

배경 이미지가 움직입니다. 마우스 반대쪽으로 살짝 비켜납니다

  • 이제 GIF 애니메이션 배경을 지원합니다. 지원하지 않았던 것이 아니라, 지원은 하되 움직임이 눌려 있었습니다 —— 모든 업로드가 WebP 로 다시 인코딩되는데 GIF 디코딩은 첫 프레임만 얻으므로 애니메이션이 정지 화면으로 도착했습니다
  • 해법은 여러 프레임 GIF 를 다시 인코딩하지 않고 그대로 저장하는 것입니다. 움직임이 온전히 남습니다. 대신 애니메이션은 1920x1080 으로 축소되지 않습니다 (다시 인코딩하면 움직임이 죽으므로 의도된 절충입니다)
  • 배경이 이제 마우스를 따라 움직입니다. 포인터가 움직이면 배경 레이어가 반대 방향으로 최대 10 픽셀 어긋나, 사진에 깊이가 있는 것처럼 보입니다
  • 매 프레임 CSS 변수 하나만 바꾸므로 사진 자체는 한 번도 다시 그려지지 않습니다. 포인터가 멈추면 수렴하고 프레임 요청도 멈춰, 정지 상태의 비용은 이전과 같습니다. 마우스와 트랙패드에서만 켜지고, 동작 줄이기 설정에서는 완전히 꺼집니다
v1.9.45 웹사이트 2026-10-03

"뒤로" 버튼의 "十" 자: 네 번 살펴보니 원인은 주석 안에 있었습니다

  • 그 "十" 자는 사라졌습니다. 정체는 작은 상자에서 배경을 샘플링할 때 브라우저가 위쪽 가장자리 중앙에 남기는 밝은 점입니다 —— 이 버튼은 58x35 에 불과해 점이 차지하는 비중이 눈에 띕니다. 카드는 면적이 커서 같은 점이 희석되어 보이지 않습니다
  • 해법은 이 작은 버튼에서 배경 샘플링을 하지 않는 것입니다. 색을 8% 에서 14% 로 올려 투명감을 보완했습니다. 비용은 0 입니다 —— 굴절을 켜고 끈 이 버튼의 픽셀 차이는 0 / 1766688 (최대 채널 차 1)
  • 정말 까다로운 것은 그다음 층이었습니다. 규칙은 맞는데 효과가 없었습니다. 주석 안에서 참고 CSS 를 그대로 인용하며 /* 6% */ 라고 썼는데 —— CSS 주석은 중첩되지 않습니다 —— 그 */ 가 바깥 주석을 일찍 닫고, 뒤따르는 } 가 규칙을 일찍 닫아 파서가 이후 규칙을 전부 삼켰습니다
  • 이 잘못된 주석은 1.9.42 부터 있었으므로 세 버전 내내 버튼 유리의 안쪽 광채와 바깥 그림자가 빠져 있었습니다 —— 이번에 함께 돌아왔습니다. 교훈은 테스트로 남겼습니다: 주석을 일찍 끝내는 것을 주석에 쓰지 말 것 (같은 함정에 PHP 에서 이미 두 번 걸렸습니다)
v1.9.44 웹사이트 2026-10-03

마우스를 움직이면 번쩍이던 그 가로줄: 여덟 버전 만에, 원인은 호버 시 2px 들림이었습니다

  • 원인은 하이라이트도, 유리 면적도 아니었습니다. 사이트 전체의 호버 규칙이었죠. 포인터가 카드를 지날 때마다 카드가 2px 올라가고, 카드에는 유리가 걸려 있어 움직이는 순간 브라우저가 뒤 영상을 다시 샘플링합니다. 그 샘플링은 타일로 잘리고, 타일 이음매가 바로 그 선이었습니다
  • 그동안 다섯 번 헛짚었습니다(하이라이트를 배경에서 의사 요소로, transform으로, 실제 자식 요소로, 유리 밖으로, 그리고 전부 삭제). 모두 «될 것» 같았지만 원인은 건드리지 못했습니다
  • 수정: 유리 면은 호버에서 움직이지 않고 테두리와 그림자로 반응합니다. 또한 폭 전체를 차지하던 유리 두 곳(내비게이션 바와 고정된 이름 줄)에서 블러를 제거했습니다. 넓은 면적 샘플링이 가장 비쌉니다
  • 같은 배치에서 눈에 보이는 두 가지도 했습니다: 마우스 추적 하이라이트는 전부 삭제(너무 흔들림), 버튼 유리는 참고대로 세 층으로 재작성(굴절과 착색 분리)
v1.9.43 웹사이트 2026-10-03

관리자 로그인 버튼이 사라졌습니다: 지난 버전에서 제가 만든 명시도 버그

  • v1.9.42 에 넣은 버튼 유리에 명시도 실수가 있었습니다: 기본이 되는 8% 흰색 착색 층은 "클래스 5개 + 요소 2개"인데, 주 버튼의 남색 그라데이션은 "클래스 3개"뿐 —— 그래서 기본 층이 항상 이겨 그라데이션이 전혀 그려지지 않았습니다. 게다가 같은 블록의 background: none 이 주 버튼 자체의 그라데이션을 지웠습니다. 남색 바탕에 흰 글자가 흰 바탕에 흰 글자가 되어 버튼이 통째로 사라졌습니다
  • 해결: 단색 브랜드 버튼(주 버튼)은 유리에 참여하지 않게 했습니다. 남색 바탕에 흰 글자인 버튼이고, 이 유리는 밝은 버튼에만 어울립니다. 주 버튼은 원래의 단색 스타일로 돌아왔습니다
  • 같은 버그가 호버 시 밝아짐도 조용히 삼키고 있었습니다(이것도 "클래스 4개"라 5개에 졌습니다) —— 지난 버전의 "올리면 차이가 납니다"는 실제로 한 번도 적용된 적이 없었습니다. 이제는 적용됩니다
  • 또 하나: background: none 이 로딩 중 버튼까지 지웠고 유리 층은 그것들을 제외하므로, 로딩 중 몇 초 동안 버튼이 완전히 투명했습니다. 이제 로딩 중 버튼도 배경이 돌아옵니다
v1.9.41 웹사이트 2026-10-02

마우스를 따라오던 빛을 삭제했습니다

  • 무엇을 삭제했나: 카드 위에서 포인터를 따라다니던 차가운 파란 빛무리입니다. 변수, 스위치, 그 레이어, 스크립트까지 조각 하나 남기지 않고 전부 제거했습니다
  • 왜 삭제했나: 같은 증상을 네 번 보고하셨습니다(「마우스를 움직이면 그 부분이 번쩍인다」 / 「가로줄이 하나 생긴다」). 저는 네 가지 방식으로 다시 작성했습니다(카드 배경에 그리기 → 의사 요소로 옮기기 → 실제 자식 요소로 만들기 → 페이지 전체의 독립 레이어로 옮기기). 모두 고쳐지지 않았습니다. 마지막 지시가 「마우스 추적 하이라이트는 삭제해 주세요, 너무 어지러워요」였기에 삭제했습니다
  • 부수적인 효과: 삭제 후에는 포인터를 움직여도 어떤 재그리기도 일어나지 않습니다. 이것이 그 가로줄 퍼즐의 마지막 조각이기도 했습니다 —— 반투명 유리 요소 내부에서 매 프레임 무언가가 바뀌면 브라우저는 그 뒤의 화면을 계속 다시 계산합니다. 그 계산은 타일 단위로 이루어지므로 타일의 이음매가 바로 그 줄이었습니다
  • 나머지는 그대로입니다: 유리의 투명도, 사진만 보이는 첫 화면, 고정되는 이름 줄, 버튼의 리퀴드 글라스 모두 그대로입니다. 마우스가 없는 방문자와 터치 사용자는 애초에 이 빛을 볼 수 없었으므로 그분들에게는 이번 업데이트가 무변화입니다
v1.9.36 웹사이트 2026-10-02

마우스가 요소를 넘어갈 때 빛이 튀지 않게 했고, 버튼의 리퀴드 글라스를 강화했습니다

  • 마우스 추적 빛이 더 이상 "튀지" 않습니다: 예전에는 포인터가 한 카드에서 다른 카드로 옮겨가면 빛이 순간이동했습니다 —— 이전 것이 사라지고 새 것이 곧바로 나타났습니다. 지금은 이전 빛이 제자리에서 사라지고 새 빛이 포인터 위치에서 나타나며, 중심점도 부드럽게 이동합니다(전체 약 180ms)
  • CSS transition을 쓰지 않은 이유: transition은 선언을 통째로 바꾸는 규칙이라 "한 속성에만 전환을 붙이는" 방법이 없습니다. 그렇게 하려면 카드 등장 애니메이션과 호버 애니메이션까지 덮어쓰는 선택자가 필요하고, 스크롤 등장이 "페이드 + 떠오름"에서 뚝 끊기는 전환으로 바뀝니다. 그래서 스크립트가 숫자 하나(빛의 세기)를 매 프레임 완만하게 움직이고, 다 되면 멈추는 방식으로 바꿨습니다
  • 버튼의 리퀴드 글라스를 강화했습니다: 굴절 변위를 14 → 50으로, 모따기 폭을 넓혔고, 실제로 "유리처럼" 보이게 하는 요소들 —— 상단의 거울 하이라이트, 좌우의 따뜻한/차가운 색분산 테두리, 안쪽 광택 —— 을 더했습니다. 동시에 블러를 1.5px에서 0.8px로 좁혔습니다(블러는 변위가 먹어야 할 디테일을 정확히 지워 버립니다)
  • 솔직한 단서는 그대로입니다: Chrome / Edge에서만 그려집니다. 게다가 굴절은 굴절시킬 것이 있어야 보입니다 —— 흰 카드 위에서는 거의 0이고, 명암이 있는 배너 사진 위에서야 눈에 띕니다. 스위치는 관리자 「시스템 설정 → 외관 효과」에 있고 기본값은 꺼짐입니다
v1.9.35 웹사이트 2026-10-02

첫 화면은 사진만 보이고, 아래로 스크롤하면 내용이 올라오고, 버튼에 리퀴드 글래스가 들어갔습니다

  • 첫 화면을 「히어로」로: 배너를 올린 플레이어 페이지는 들어가면 페이지 헤드와 배경 사진만 화면을 채우고 내용 영역은 전혀 표시되지 않습니다. 휠을 한 번 아래로 굴리면 내용 블록 전체가 페이드되며 올라오고(투과율은 28% 그대로), 맨 위로 돌아가면 다시 접힙니다. 반복해서 볼 수 있습니다
  • 왜 감싸는 요소가 아니라 내용 블록 자체를 움직이는가: 조상에 「불투명도 1 미만」이 있으면 새로운 백드롭 루트가 생기고, 그 안의 backdrop-filter 는 빈 배경을 샘플링해 흐린 유리가 완전히 깨집니다. 블록을 각각 페이드하면 그런 조상이 생기지 않습니다. 본문에서 position: fixed 인 것은 배경 레이어와 고정되는 이름 줄 두 개뿐이고 둘 다 이 집합 밖이라 이동해도 안전합니다
  • 버튼의 리퀴드 글래스 굴절(관리자 「시스템 설정 → 외관 효과」에 스위치 추가, 기본 꺼짐): 버튼 가장자리가 두꺼운 유리처럼 뒤의 무늬를 조금 휘게 만듭니다. SVG 변위 맵 + backdrop-filter 를 쓰며, 맵은 페이지를 열 때 canvas 로 한 번만 그립니다. 프레임마다 도는 스크립트는 없습니다
  • Chrome / Edge 에서만 그려집니다: Safari 와 Firefox 는 이 CSS 기능을 지원하지 않고 조용히 실패합니다(오류도 없고 그려지지도 않음). 그 경우 지금까지의 흐린 유리로 자동 복귀합니다. 그리고 굴절은 굴절할 대상이 있어야 보입니다 —— 흰 카드처럼 평평한 면 위에서는 거의 0이고, 배너 사진처럼 명암이 있는 곳에서만 눈에 띕니다
v1.9.34 웹사이트 2026-10-02

카드가 조금 더 비치고, 마우스 광이 작아지고, 고정될 때 미끄러져 들어옵니다

  • 무엇이 바뀌었나: 배너를 올린 페이지에서 큰 카드의 투과율이 5~10%에서 약 28%로 올라갔고(사진이 보입니다), 통계 칸과 레이더 카드도 같은 만큼 옅어졌습니다
  • 통계 칸 한 줄이 두 가지 색으로 보인 이유: 마우스 추적 광은 반경 320px, alpha .22의 차가운 파란 얼룩이었습니다. 카드 왼쪽 절반을 덮으면 첫 칸은 rgb(189,193,197), 덮이지 않는 네 번째 칸은 rgb(245,246,247)로 측정 —— 같은 줄에서 56단계 차이입니다. 지금은 반경 200px, alpha .10으로 줄였고, 칸은 더 이상 단독으로 빛나지 않습니다(항상 가장 바깥 카드가 빛납니다). 같은 줄의 실측 차이는 3단계입니다
  • 「깜빡임」의 나머지 절반: 카드 여백에서 칸으로 포인터를 옮기면 스크립트의 대상이 「카드 전체」와 「그 칸」 사이를 오가며 광이 큰 면에서 작은 점으로 순간 이동했습니다. 칸을 광 대상에서 빼면서 이 이동이 사라졌습니다
  • 고정될 때 미끄러지는 동작 추가: 이름 줄이 내비게이션 아래에서 10px 미끄러지며 180ms 동안 페이드인합니다. 「동작 줄이기」가 켜져 있으면 이 애니메이션과 버튼 스프링이 꺼집니다(마우스 추적 광은 유지)
v1.9.33 웹사이트 2026-10-02

아래로 스크롤하면 이름 줄이 내비게이션 아래에 고정됩니다

  • 무엇이 바뀌었나: 배너를 올린 플레이어 페이지에서 아래로 스크롤하면 「아바타 + 이름 + 레벨 + 배지」 줄이 사이트 내비게이션 바로 아래에 고정되고 카드가 그 밑으로 지나갑니다. 서명은 이 줄에 없고 이전처럼 스크롤되어 사라지며, 「뒤로」 버튼은 이름과 함께 고정됩니다
  • `position: sticky`를 쓸 수 없는 이유: 이 줄의 부모는 .cdr-container이고 높이가 페이지 헤드만큼밖에 되지 않습니다. 그래서 sticky의 이동 범위가 그 안에 갇혀 헤드를 지나면 함께 사라집니다. 그래서 position: fixed로 바꾸고, 스크립트로 원래 자리에 같은 높이의 자리표시자를 넣었습니다(fixed는 문서 흐름에서 벗어나므로 넣지 않으면 고정되는 순간 페이지 전체가 86px 튀어 오릅니다)
  • 고정되면 글자색을 뒤집어야 합니다: 이 줄은 평소 배너 사진 위에 얹히는 흰 글자이지만, 고정되면 아래가 밝은 유리면이 됩니다. 흰 바탕에 흰 글자는 보이지 않습니다(실측 빌드에서는 아바타와 「온라인」 배지는 보이는데 이름 칸만 비어 있었습니다). 그래서 고정 상태에서는 이름·레벨·배지를 유리면용 잉크 색으로 바꿉니다
  • 배너를 올린 플레이어 페이지에만 적용됩니다 —— 올리지 않은 페이지(예: /players/zlc)는 단 1바이트도 건드리지 않았습니다
v1.9.32 웹사이트 2026-10-02

포인터 하이라이트가 빛나야 할 한 면만 비춥니다

  • 원인은 사용자 정의 속성이 상속된다는 점이었습니다. 스크립트가 포인터 아래의 카드에 .is-lit을 붙이면 --glass-spot이 상속 체인을 따라 그 카드 안의 모든 .stat-mini로 전달됩니다 —— 스위치 하나가 일곱여덟 개의 빛나는 면이 되었습니다. 의뢰하신 「마우스는 다른 곳에 있는데 왜 전부 켜지나요」가 바로 이것입니다. 증거: 프로브 노란 막대에 spot= 카운터를 추가했습니다. 이것은 .is-lit의 개수가 아니라 계산된 --glass-spot이 투명이 아닌 요소의 수를 셉니다 —— 수정 전에는 포인터를 카드 제목 여백에 두면 lit=1 spot=8/27이었습니다
  • 수정 내용: 각 유리 면이 스스로 --glass-spot을 transparent로 되돌려 상속 체인을 거기서 끊습니다. 포인터가 실제로 올라간 면만 스크립트가 .is-lit을 붙입니다. 수정 후 spot=1/27
  • 함께 고친 두 번째 함정: 그 리셋은 .is-lit 규칙과 특이도가 같고 뒤에 쓰여 있습니다 —— 「나중 것이 이긴다」에 따라 순수한 body.cdr-body .is-lit은 통째로 덮여 하이라이트가 완전히 사라집니다(실측 lit=1 spot=0/27). 그래서 .is-lit 규칙은 네 선택자를 모두 나열해 특이도를 올려야 합니다. 이 단계를 빠뜨리면 「너무 많이 켜짐」에서 곧바로 「전혀 안 켜짐」이 됩니다
  • 좌표도 requestAnimationFrame만 기다리지 않고 새 요소에 들어갈 때 동기적으로 한 번 쓰도록 바꿨습니다. 그렇지 않으면 첫 프레임에 좌표가 없어 빛이 카드 가운데에 잠깐 나타났다가 포인터로 튑니다. 이제 하나의 .is-lit이 하나의 빛나는 면입니다 —— 포인터가 있는 곳이 곧 빛나는 곳입니다
v1.9.31 웹사이트 2026-10-02

리퀴드 글래스에 손맛 두 가지 추가: 포인터 추적 하이라이트와 버튼 스프링

  • 포인터 추적 하이라이트: 포인터가 유리 표면 위를 움직이면 차가운 청백색 빛 한 덩어리가 포인터를 따라갑니다 —— 포인터 아래에 있는 카드만 밝아지고 나머지는 그대로입니다. 카드 배경에 그린 radial-gradient 한 겹이며, 스크립트가 실시간으로 쓰는 --glass-mx / --glass-my를 읽습니다. 노드를 늘리지 않고, 스태킹 컨텍스트도 건드리지 않으며, 카드의 블러도 방해하지 않습니다. 라이트 테마에서 쓰는 것은 흰색이 아니라 차가운 청백색입니다: 흰 카드(rgb 229~245)에 흰빛을 더해 봐야 최대 6단계밖에 올라가지 않아 눈에 띄지 않습니다
  • 페이지 헤드 사진 띠를 높임: .page-head의 아래 패딩을 30px에서 160px로 (전체 약 317px). 흰 카드 줄이 통째로 내려가 아바타·이름·레벨 배지가 배너 이미지 위에 올라갑니다 —— 이것이 「배경을 더 보여주기」입니다. 높이만 키우고 내용은 늘리지 않았습니다. 작은 화면에서는 72px로 줄어듭니다. 내용을 통째로 내리지 않은 이유는 위쪽의 가장 어두운 마스크가 무의미해져 하얗게 바뀐 줄이 읽기 어려워지기 때문입니다
  • 버튼 스프링: 누르면 .955까지 줄고, 놓으면 cubic-bezier(.34, 1.56, .64, 1)로 돌아옵니다 —— 두 번째 제어점의 y = 1.56 > 1이라 곡선이 목표를 지나쳤다가 되돌아옵니다. 그 초과분이 「튕김」입니다. 순수 CSS이며 JS도 물리 엔진도 쓰지 않습니다
  • prefers-reduced-motion 폴백은 이제 「자율적 움직임」만 줄입니다: 버튼 스프링(놓은 뒤 스스로 튕기는 움직임)은 평범한 짧은 트랜지션으로 바뀌고 누르는 피드백은 남습니다. 반면 포인터 하이라이트는 유지합니다 —— 포인터 추적은 직접 조작이고, 움직이는 것은 포인터 자체이지 페이지가 아닙니다. 의뢰하신 리퀴드 글래스 자료에도 「displacement를 빼고 blur + 하이라이트는 남긴다」고 적혀 있습니다. 이 머신에서 하이라이트를 볼 수 있는 유일한 방법이기도 합니다: Windows 애니메이션 효과가 꺼져 있어(MinAnimate = 0 / DragFullWindows = 0 / VisualFXSetting = 2) 브라우저가 이를 그대로 reduce로 보고합니다 —— 함께 꺼 버리면 영영 볼 수 없습니다
  • 위 내용은 모두 배너를 올린 프로필에만 적용됩니다(블록은 여전히 $pubBgCss !== '' 안에 있습니다). 나머지 페이지 —— 배너 없는 프로필 포함 —— 는 1바이트도 바뀌지 않았습니다. 테스트 스위트에는 이를 지키는 assertion이 4개 있습니다
  • 솔직히 한 가지: 둘 다 「손맛」 효과라 정지 화면에서는 알 수 없습니다 —— 실제로 포인터를 움직여 보고 실제로 버튼을 눌러 보세요. 겸사겸사 Windows 애니메이션을 다시 켜 두시길 권합니다(설정 → 접근성 → 시각 효과 → 애니메이션 효과). 그렇지 않으면 브라우저가 모든 사이트에 「사용자가 동작 줄이기를 요청함」이라고 계속 알립니다
v1.9.30 웹사이트 2026-10-02

리퀴드 글래스 재작업: 스크롤해도 카드 색이 변하지 않습니다

  • 원인은 렌더링 엔진이 아닙니다. 프로필 페이지는 배경 이미지를 body에 background-attachment: fixed로 걸어 두었습니다. 이 선언은 "이미지를 뷰포트에 고정한다"는 뜻이고, 독립된 합성 레이어가 아닙니다 —— 브라우저는 카드의 backdrop-filter를 위해 매 프레임 다시 샘플링해야 하며, 샘플링 범위와 스크롤 위치가 어긋나면 색이 튑니다. 게다가 카드는 움직이고 이미지는 멈춰 있으니 반투명 카드가 사진 전체를 훑습니다. 이 둘이 겹쳐서 "어떨 땐 진하고 어떨 땐 옅고 어떨 땐 정상"이 되었습니다
  • 스크롤 중 깜빡임 해결: 배경을 body에서 전용 position: fixed 레이어(body::before, z-index: -1, pointer-events: none, will-change: transform)로 옮겼습니다. 전용 레이어는 합성 레이어로 승격될 수 있어 스크롤 내내 샘플링 원본이 이미 합성된 하나의 비트맵이 됩니다
  • 정지 상태의 농도 차이 해결: 카드가 스스로 색을 정합니다. 근거는 실측에서 뽑은 선형 외삽입니다 —— 변동 ≈ (1−alpha)×53 이므로 4단계 이내로 묶으려면 alpha ≥ .925가 필요합니다. 큰 카드는 상단 72% → 95%, 하단 60% → 90%, 통계 칩은 80%/70% → 97%/94%, 레이더 카드는 76%/66% → 96%/92%입니다. 사진은 5~10% 그대로 비치며, 그게 유리 색감의 근원입니다
  • 유리는 이제 다층 재질입니다: 노이즈 층 + 세로 그라데이션 + 가장자리 스침 하이라이트 + 내부 굴절 베벨. 모든 파라미터는 변수로 노출했습니다(--glass-blur --glass-sat --glass-highlight --glass-displacement --glass-noise). 솔직히 한 가지: 진짜 SVG feDisplacementMap 굴절은 불가능합니다 —— Chromium과 Safari의 backdrop-filter는 필터 함수만 받고 url(#svgfilter)는 받지 않기 때문에, 내부 굴절 베벨로 그 느낌을 근사했습니다
  • 결과: 같은 위치에서 스크롤에 따른 차이는 3~6단계(이전 버전 18단계, 최초 100단계), 전체 밝기는 229~245, 다크 테마는 1~3단계입니다. 아울러 유리 표면의 text-shadow 흰 번짐을 제거했습니다 —— 카드가 안정된 지금은 도움이 되지 않고 12px 글자의 획만 먹습니다
  • 「능력 레이더 글자가 잘 안 보인다」도 함께 수정: 투명도는 전혀 건드리지 않았습니다. 「전체 평균」 보조 라벨을 .76rem에서 본행과 같은 .84rem으로, 흐린 회색에서 본문 색으로, 자간 대신 약간의 굵기를 더했습니다. 진짜 원인은 12px과 13px 한자가 Windows에서 다른 안티에일리어싱 단계를 타는 것입니다. 이상은 배너를 올린 프로필에만 영향을 주며, 배너 없는 페이지는 1바이트도 바뀌지 않았습니다
v1.9.29 웹사이트 2026-10-02

스크롤할 때 카드 밝기가 달라지던 문제를 고쳤습니다

  • 원인은 렌더링 버그가 아닙니다. 프로필 페이지의 배경 이미지에 background-attachment: fixed를 써서 이미지가 뷰포트에 고정되고 카드만 스크롤됩니다 —— 그래서 반투명 카드가 사진 전체를 훑게 되어, 어두운 하늘 위에서는 어둡게, 밝은 건물 위에서는 하얗게 뜹니다. 같은 카드가 스크롤 위치에 따라 rgb(99,107,125)에서 rgb(201,197,200)까지 100단계나 흔들렸습니다
  • 해결책은 유리 자체를 한 단계 진하게 만드는 것입니다 —— 투명도와 안정성을 함께 지킬 수 있는 유일한 손잡이는 alpha입니다: 큰 카드는 상단 56% → 72%, 하단 34% → 60%, 통계 칩은 76%/60% → 80%/70%, 레이더 카드는 70%/52% → 76%/66%. 밀도 순서(큰 카드가 가장 옅고 칩이 가장 진함)는 그대로입니다
  • 결과: 같은 위치에서 스크롤에 따른 차이가 14단계(기존 47단계)로 줄고, 전체 밝기는 163~206에 자리 잡았습니다 —— 「회색으로 가라앉던」 모습에서 뚜렷한 밝은 반투명 유리로. 다크 테마도 같이 진하게 했고(82%/72% 단계), 남은 흔들림은 4~8단계입니다
  • 배너 이미지를 올린 프로필에만 영향을 줍니다. 배너가 없는 페이지(예: /players/zlc)는 이 유리 스타일을 아예 출력하지 않으므로 단 1바이트도 바뀌지 않았습니다
v1.9.28 웹사이트 2026-10-02

「하루 평균 86시간」을 고쳤습니다

  • 예전 계산식은 「누적 플레이 시간 ÷ 세션 기록이 있는 일수」였습니다 —— 분자는 10년치인데 분모는 2026-09-12 이후 11일뿐이었습니다. 서로 다른 시대를 나눈 결과가 「하루 86시간」입니다. 분자가 틀린 게 아니라 분모가 대부분 빠져 있었습니다
  • 분모를 평생 활성 일수로 바꿨습니다: 채팅 기록, 업적 해금, 접속 세션 세 표를 날짜 단위로 중복 제거해 합칩니다 —— 이 계정은 423일. 941시간 ÷ 423일 = 하루 2시간, 드디어 자릿수가 맞습니다
  • 덤으로 두 곳 더 고쳤습니다: 로그인 횟수를 평생 누적으로 (1,655회, 예전에는 오래된 플레이어 929명이 0으로 표시됐습니다), 최장 단일 플레이 시간에 「평균 21분인데 최장 0시간」 같은 불가능한 조합이 나오지 않습니다
  • 업적 세 개도 함께 풀렸습니다: 활성 7 / 30 / 100일 은 같은 분모 때문에 영원히 달성할 수 없었습니다 —— 서버 전체 세션 기록이 최대 16일뿐이라 기준에 닿지 못했습니다
  • 보안 감사(1): 실제로 악용 가능한 부분을 수정 —— 업로드한 SVG 안에서 이스케이프로 외부 링크를 숨길 수 있었고(아바타로 방문자 IP 유출), 관리 화면에서 uploads 밖의 파일을 삭제할 수 있었고, 로그인에 오픈 리다이렉트가 있었고, 백업 압축 안의 스크립트가 웹셸로 설치될 수 있었고, 로컬 디버그 스크립트 두 개가 운영 서버에서 접근 가능했습니다
  • 보안 감사(2): API와 관리 화면 강화 —— 빈 목록으로 서버 전체 차단을 한 번에 해제할 수 없게 되었습니다, 보고에 행 수 상한, 화이트리스트 이름 검증, 채팅 한 건 실패로 전체 배치가 죽지 않음, 데이터베이스 오류 상세를 방문자에게 반환하지 않음
v1.9.27 웹사이트 2026-10-02

레이더 칸의 작은 글씨가 이제 읽힙니다

  • 「능력 레이더」 칸의 작은 글씨(축 이름, 오른쪽 수치, 「전체 평균」 줄, 아래 설명)는 34% 유리 위에 있었고, 가장 어두운 부분의 대비는 3.3 : 1 에 불과했습니다 —— 작은 글씨에 필요한 4.5 : 1 보다 낮습니다. 이것이 말씀하신 「읽기 어렵다」이고, 지난 릴리스에서 제가 놓친 부분입니다
  • 두 가지를 고쳤습니다: 보조 글자 색을 한 단계 더 진하게 했고, 동시에 「능력 레이더」 카드 전체에 전용 바탕을 주었습니다 —— 이 카드는 거의 전부가 작은 글씨라, 큰 카드와 같은 투명도를 공유해서는 안 됩니다
  • 큰 카드는 그대로입니다: 스킨 카드, 업적 카드, 푸터는 여전히 34% 이고 뒤의 이미지가 그대로 비칩니다. 통계 칸의 진한 바탕도 변하지 않았습니다
  • 다크 테마에도 같은 처리를 했습니다. 그리고 이것 역시 배너를 올린 적이 있는 페이지에서만 일어납니다 —— 배너가 없는 페이지는 1 픽셀도 움직이지 않았습니다
v1.9.26 웹사이트 2026-10-02

한 단계 더 투명하게, 글자는 그대로 읽히게

  • 프로필: 위쪽을 62% → 56%, 아래쪽을 40% → 34% 로 낮췄습니다. 이제 뒤의 이미지가 정말로 보입니다 —— 탑 조명의 세로줄, 지평선, 멀리 있는 블록 윤곽이 비쳐 보이고, 더 이상 반투명 판처럼 보이지 않습니다
  • 「이미지가 보인다」와 「글자가 읽힌다」는 원래 충돌합니다. 그래서 나눠서 처리했습니다. 통계 칸(「누적 플레이 시간」「로그인 횟수」처럼 작은 글씨가 모인 곳)만 더 진한 전용 바탕(76% → 60%)을 쓰고, 큰 카드는 아주 투명하게 유지합니다. 작은 것은 진하게, 큰 것은 투명하게 —— 애플의 층위와 반대이며 의도한 선택입니다
  • 글자에는 아주 옅은 같은 방향의 후광(text-shadow)을 더했습니다 —— 바탕이 밝으면 보이지 않고 어두울 때만 드러나므로, 글자가 자기만의 국소 바탕을 갖는 셈입니다. 그래서 34%까지 내려도 안전합니다
  • 다크 테마에는 대응하는 어두운 유리와 어두운 후광을 넣었습니다. 그리고 이것 역시 배너를 올린 적이 있는 페이지에서만 일어납니다 —— 배너가 없는 페이지는 1 픽셀도 움직이지 않았습니다
v1.9.25 웹사이트 2026-10-01

유리가 더 투명해지고, 더 애플스러워졌습니다

  • 프로필: 더 이상 균일한 「흰색 68%」가 아니라 위는 밝고 아래는 비치는 세로 그라데이션(62% → 40%)입니다. 가우시안 블러는 22px → 32px, 여기에 saturate(180%) 와 brightness(1.12) 를 더했습니다. 애플식 유리는 뒤의 색을 끌어올리는 방식이고, 흐리게만 하면 그냥 반투명 유리에 그칩니다
  • 유리 가장자리에 굴절 테두리가 생겼습니다 —— 위쪽 1px 스치는 하이라이트와 안쪽을 한 바퀴 도는 아주 옅은 선입니다. 그림자도 두 겹(바닥에 닿는 접촉 그림자 + 넓게 퍼지는 환경 그림자)으로 나눠, 종이처럼 붙은 게 아니라 이미지 위에 떠 보이게 했습니다
  • 더 투명하게 만들고 나서야 드러난 문제도 고쳤습니다. 「누적 플레이 시간」「로그인 횟수」 같은 보조 라벨이 거의 보이지 않았습니다 —— 쓰던 회색이 반투명 흰색 위에서 대비 2.5:1 밖에 안 됐습니다. 유리 면 안쪽만 더 어두운 색으로 바꾸고, 배너 위에 직접 놓인 작은 글씨는 그대로 두었습니다
  • 다크 테마에도 어두운 유리 값을 맞춰 넣었습니다. 그리고 이 변화는 여전히 배너를 올린 적이 있는 페이지에서만 일어납니다 —— 배너가 없는 캐릭터 페이지는 1 픽셀도 움직이지 않았습니다
v1.9.24 웹사이트 2026-10-01

프로필이 「리퀴드 글라스」가 되었습니다

  • 카드, 스킨 패널, 6개의 통계 타일, 그리고 푸터 전체가 반투명 유리(흰색 68% + 22px 가우시안 블러)가 되어 뒤의 배너가 흐려지며 비칩니다. 글자는 어두운 색 그대로라 이미지 위에서도 잘 보입니다. 다크 테마에서는 어두운 유리로 바뀝니다
  • 업적 카드 제목줄에 「모두 접기 / 모두 펼치기」가 생겼습니다. 8개 분류를 한 번에 접을 수 있어 98개 배지 벽 맨 아래까지 내려갈 필요가 없습니다
  • 오른쪽 아래 관리 서랍에 네 번째 탭 「아바타 / 배경」이 추가되었습니다. 검수 대기 중인 이미지를 거기서 승인하거나 거부할 수 있습니다. 관리자 페이지의 「플레이어와 데이터 → 아바타 / 배경」과 같은 데이터라 어디서 검수하든 동일합니다
  • 이 변화는 배너를 올린 적이 있는 페이지에서만 일어납니다 —— 배너가 없는 캐릭터 페이지는 1 픽셀도 움직이지 않았습니다(변경 전후 스크린샷을 픽셀 단위로 비교했습니다)
  • 유리를 쓸 수 없을 때(구형 브라우저)는 기존의 불투명 카드로 되돌아갑니다. 다만 시스템의 「투명도 줄이기」 설정은 일부러 따르지 않았습니다 —— 사이트 관리자 본인의 Windows 에서 투명 효과가 꺼져 있어, 따르면 본인이 유리를 전혀 볼 수 없게 되기 때문입니다
v1.9.23 웹사이트 2026-10-01

프로필 페이지가 화면을 가득 채웁니다

  • 배경 —— 배너를 올린 적이 있다면, 캐릭터 페이지가 그 이미지로 브라우저 창 전체를 채우고, 아바타·닉네임·레벨·위치가 그 위에 놓입니다. 배너가 없는 페이지는 1 픽셀도 바뀌지 않습니다
  • 위치 —— 개인 센터 「개인화」에서 국가(중국을 고르면 성/도까지)를 선택할 수 있습니다. 설정하면 프로필의 「오프라인 / 순위 #8」 옆에 표시되고, 선택하지 않으면 아무것도 나오지 않습니다
  • 플레이어 목록의 앞머리 아이콘은 이제 직접 올린 이미지를 우선 사용합니다. 예전에는 항상 해외 호스트에서 공식 스킨 아바타를 받아왔고 여기서는 거의 불러오지 못해 늘 알록달록한 글자 타일만 보였습니다
  • 올린 아바타와 배경은 검수를 거친 뒤에 페이지에 반영됩니다. 검수 대기 중에는 이전 이미지가 계속 표시되어 「절반만 새로운」 상태가 되지 않습니다. 되돌리고 싶을 때의 「제거」는 즉시 적용됩니다
  • 업로드 상한을 넓혔습니다: 배너 최대 3840×2160(기존 1920×1080), 그리고 SVG 를 지원 —— SVG 는 안전을 위해 정제하며 스크립트·외부 참조·내장 HTML 은 모두 제거합니다
v1.9.22 웹사이트 2026-10-01

팝업이 새로워졌습니다 · 예전 차단도 되돌렸습니다

  • 사이트 전체 16 곳의 팝업을 사이트 자체 다이얼로그로 통일했습니다. 예전에는 브라우저 자체 창이라 위에 「cloudridge.cn 표시」가 붙었고, 모바일에서는 특히 어색했으며 사이트 스타일도 전혀 따르지 않았습니다. 이제 제목·본문·버튼을 모두 사이트가 제어하고, 위험한 작업은 빨간 버튼, Esc 취소, Enter 확인, 닫으면 방금 누른 버튼으로 초점이 돌아옵니다
  • 예전 서버가 문을 닫을 때까지 차단되어 있던 8명 + 3개 IP 를 차단 목록에 복원했습니다. 공개 페이지는 이제 12명 + 7개 IP 입니다. 이름·IP·차단 시각·처리자는 모두 당시 기록 그대로 옮겼고 지어낸 값은 없습니다. 한 가지 덧붙이면, 모드는 서버의 차단 파일을 읽어서 보고할 뿐이고 게임 안에서 실제로 막는 것은 서버 목록입니다 —— 반영에는 서버 재로드가 필요합니다
v1.9.21 웹사이트 2026-10-01

그 「알 수 없는 플레이어」는 같은 사람이었습니다

  • 플레이어 목록에는 줄곧 「未知玩家 · 000000」 라는 행이 있어, 집계되지 않은 네 번째 사람처럼 보였습니다. 원인을 밝혔습니다: 예전 서버의 floodgate 가 베드락 플레이어에게 발급한 UUID 는 00000000-0000-0000-0009-… 라는 자리표시자 영역이었고, 모드는 「이름」만 보고할 수 있었는데 —— 그 순간의 이름이 마침 그 UUID 였습니다. 실체는 birdzhonghuifei 가 베드락으로 놀던 기간이며, 본인 행으로 병합했습니다
  • 병합 규칙: 카운트 항목(플레이 시간, 로그인 횟수, 사망, 채굴, 설치, 이동 거리)은 더하고, 진척도는 합집합, 최초 접속은 더 이른 쪽, 마지막 접속은 더 늦은 쪽을 씁니다 —— 시각은 절대 더하면 안 됩니다. 그 행에 붙어 있던 배지 9개는 본인이 이미 같은 것을 가지고 있어 중복분은 버렸습니다. 순위표가 한 줄 줄었고 birdzhonghuifei 의 숫자는 더 완전해졌습니다
v1.9.20 웹사이트 2026-10-01

달력에서 연/월을 바로 고를 수 있습니다

  • 달력 팝업 왼쪽 위에 「연」 「월」 드롭다운이 생겼습니다. 연도를 고르고 월을 고르면 두 번 만에 아무 달로나 이동합니다 —— ‹를 눌러 한 달씩 넘길 필요가 없습니다. 앞뒤 버튼과 「오늘」은 그대로이고, 넘길 때 드롭다운도 함께 따라옵니다
  • 정렬 문제도 함께 고쳤습니다: 「최초 접속」으로 정렬하면 날짜를 알 수 없는 행이 1~4위로 올라와 순위표 전체가 망가진 것처럼 보였습니다 —— 「값이 없음」은 「가장 이름」과 다릅니다. 이제 이런 행은 오름차순이든 내림차순이든 항상 맨 아래로 내려갑니다
v1.9.19 웹사이트 2026-10-01

채팅 기록 229건 추가 복원

  • TrChat 플러그인 로그는 2023-09-01부터만 기록되어 2024년 하반기 일부가 비어 있었습니다. 한 번도 가져오지 않았던 예전 서버의 CoreProtect 데이터베이스 3개에서 2024-07~2024-12 채팅 34,417건을 찾아냈고, 중복을 제거한 뒤 229건의 발언을 복원했습니다(37일에 걸쳐 있으며 가장 이른 것은 2024-07-11)
  • 중복 판정은 "같은 플레이어가 ±5초 안에 같은 말을 했다"를 기준으로 합니다 —— 같은 발언이 TrChat과 CoreProtect에 각각 기록되고 타임스탬프는 보통 1초 차이, 때로는 분 경계를 넘습니다. 분 단위로 비교하면 그 수십 건이 새 발언으로 잘못 다시 들어옵니다
  • 이 37일이 원래 텅 비어 있던 것은 아닙니다 —— 당시 TrChat이 대부분의 대화를 기록했고, 되찾은 것은 빠졌던 몇 줄입니다. 2024년 7~12월의 이 날짜를 열면 당시 대화가 더 온전하게 보입니다
v1.9.18 웹사이트 2026-10-01

계정 안의 부캐를 펼칠 수 있습니다

  • 플레이어 목록에서 캐릭터를 둘 이상 가진 행 앞에 화살표가 생겼습니다. 기본은 접힘이고, 한 번 누르면 각 캐릭터가 개별 행으로 펼쳐져 각자의 누적 플레이 시간, 로그인 횟수, 마지막 접속, 상태가 그대로 보입니다(상위 행은 합계, 하위 행은 개별 값). 다시 누르면 접힙니다
  • 부캐 이름으로 검색하면 그 행이 자동으로 펼쳐집니다 —— Winter를 검색하면 Fruity_oxygen 옆에서 자기 수치를 바로 볼 수 있어, 누구 아래에 숨어 있는지 짐작할 필요가 없습니다. 오래된 버그도 함께 고쳤습니다: 플레이어 이름으로 정렬하면 머리글이 본문보다 한 열 적어 표 전체가 어긋났습니다
v1.9.17 웹사이트 2026-10-01

플레이어 순위를 계정 단위로 · 3년치 채팅 복원

  • 「플레이어 목록」이 이제 한 줄 = 사이트 계정 하나입니다. 같은 계정에 속한 캐릭터는 데이터를 합산합니다(Fruity_oxygen과 Winter가 한 줄, ElfinLettuc과 Faithe가 한 줄). 계정을 연결한 적 없는 사람은 각자 한 줄입니다. 이름 옆의 「N개 캐릭터」 배지로 누가 어디에 합쳐졌는지 볼 수 있습니다 — 예전에는 본캐와 부캐가 다른 줄로 갈라져 부캐의 시간이 헛된 것처럼 보였습니다
  • 계정 페이지(/accounts/번호)를 새로 만들었습니다. 계정에 속한 캐릭터를 하나씩 나열해 각자의 플레이 시간과 로그인 횟수를 보여주고, 위쪽 요약 수치는 이들을 더한 값입니다. 이 페이지는 완전 공개라 로그인 없이도 볼 수 있습니다. 존재하지 않는 계정 번호를 가리키던 잘못된 데이터 한 건도 함께 정리했습니다
  • 줄곧 자리표시자 값으로 남아 있던 세 필드를 채웠습니다: 마지막 접속(캐릭터 929개가 모두 2026-09-13으로 적혀 있었습니다), 최초 접속(936개가 똑같이 가짜 2026-09-13), 로그인 횟수(사이트 전체 합계가 291뿐이어서 928명이 「—」로 표시). 마지막 접속은 서버 저장 파일의 수정 시각에서, 최초 접속과 로그인 횟수는 역대 서버 로그에서 가져왔습니다. 이제 wwwsum은 2024-08-22, 7Strawberry는 2024-03-07로 정확히 표시되고, 로그인 합계는 291에서 21,766이 되었습니다
  • 채팅창이 개설 이래의 기록을 모두 되찾았습니다. 2022-12-16의 첫 줄부터 2026-09-25에 모드의 실시간 보고가 이어받기 전까지 174,457건의 발언과 입·퇴장 기록(발언 124,024, 입장 25,424, 퇴장 25,009)입니다. 예전에는 모드를 설치한 며칠치만 있었지만, 이제 웹 지도에서 아무 날이나 눌러도 그날의 대화를 볼 수 있습니다
  • 달력은 최근 400일만 클릭할 수 있었기 때문에 복원한 729일 중 492일은 열리지 않았습니다 — 복원했는데 볼 수 없는 상태였죠. 이제 기록이 있는 날은 모두 클릭할 수 있습니다. 또한 「등록 플레이어」 숫자가 홈과 목록에서 2만큼 달랐는데(791 대 789) 계정 기준으로 통일했습니다
v1.9.16 웹사이트 2026-09-30

외부로 나가는 요청이 이제 TLS 인증서를 검증합니다

  • 사이트가 외부로 보내는 모든 HTTPS 요청(스킨 서버, IP 위치, SMS 게이트웨이, 메일 서버, QQ 로그인, 관리자 화면의 테스트 버튼)은 지금까지 인증서 검증을 끈 채로 전송되었습니다. 그래서 경로 상의 누구든 자체 서명 인증서로 상대를 사칭해 요청을 통째로 가로챌 수 있었습니다. 이제는 모두 사이트에 함께 포함된 루트 인증서 묶음(Mozilla의 것, 루트 인증서 121개)을 기준으로 제대로 검증합니다.
  • 그중에서도 메일 연결이 가장 중요했습니다. 검증을 끈 상태에서는 경로 상의 누군가가 사서함 비밀번호와 모든 메일 본문을 한꺼번에 가져갈 수 있었습니다. 126 사서함의 인증서는 정상이므로 발송에는 영향이 없습니다.
  • 대가도 있습니다. 상대방의 인증서에 실제로 문제가 있으면 요청이 조용히 연결되는 대신 오류로 실패합니다. 관리자 화면의 테스트 버튼은 이 경우를 "인증서 검증 실패"로 따로 표시합니다. 루트 인증서 묶음이 혹시 없어지더라도 검증 없이 넘어가는 쪽으로 되돌아가지 않습니다 —— 더 분명하게 실패할 뿐입니다.
  • 오래된 문제 하나도 함께 고쳤습니다. 업데이트 내역에서 v1.9.6과 mod 1.6.0 항목의 제목이 계속 "title"로 표시되었습니다 —— 본문만 있고 제목이 없었는데, 페이지가 제목을 무조건 렌더링해서 키가 없으면 키 이름의 마지막 부분으로 대체되었기 때문입니다. 이제 제목을 채웠습니다
v1.6.6 모드 2026-09-30

차단 목록을 못 읽을 때 "아무도 차단되지 않았다"고 하지 않습니다

  • 사이트에 빈 차단 목록이 도착하면 저장된 차단 기록을 전부 덮어썼습니다. 모드는 파일을 읽지 못하거나 형식이 틀리면 빈 배열을 반환했고, 그것이 정확히 이 결과를 불렀습니다 —— 이제는 항상 null을 반환하며(파일이 정말 없는 경우는 여전히 "아무도 차단되지 않음"입니다), banned와 banned_ips를 둘 다 읽었을 때만 bans_authoritative=true를 선언합니다. 사이트 쪽에도 대응하는 보호를 넣었고, 제대로 고쳐지려면 양쪽이 함께여야 합니다
v1.9.15 웹사이트 2026-09-30

보안 점검: 여섯 가지 문제 수정

  • 관리자 영역의 문 하나가 반쯤 열려 있었습니다: 오너 / 관리자 / 서버 관리자 세 그룹 사람은 자기 사이트 계정 비밀번호로 프런트에 로그인하기만 하면 /admin/**를 그대로 열 수 있었습니다 —— 이메일 인증 단계가 통째로 건너뛰어졌습니다(원래는 관리자 로그인 페이지에서만 막혀 있었습니다). 이제는 "이 세션은 실제로 코드 입력을 통과했다"는 증표를 가지며, 프런트 로그인이 관리자 로그인이 되는 일은 없습니다. 사이트에는 예전부터 "관리자는 admins 테이블 계정만 인정한다"고 적혀 있었고, 이제 구현과 설명이 드디어 맞았습니다
  • 모드가 차단 목록을 읽지 못하면 빈 목록을 보고했고, 사이트는 "목록이 비었다"를 "차단이 모두 해제됐다"로 받아들였습니다 —— 그래서 데이터베이스의 차단 기록을 통째로 덮어쓰고 해제 이력을 지어내고 players.is_banned까지 지웠습니다. 이제 모드는 실제로 읽어냈을 때만 "이 목록이 정본"이라고 선언하고, 사이트도 그 선언(또는 비어 있지 않은 목록)을 받았을 때만 해제 대조를 합니다. 이것이 완전히 적용되려면 모드 1.6.6이 필요하며, 사이트 쪽은 이미 먼저 막아 두었습니다
  • 개인 페이지의 배너 주소는 플레이어가 직접 입력하는 값인데, 그것이 style="…url(주소)"에 그대로 들어갔습니다. 주소에 )를 하나만 넣어도 임의의 CSS 선언을 덧붙일 수 있습니다 —— 개인 페이지는 남이 보는 페이지라 방문자 전원이 당합니다(position:fixed로 전체 화면 피싱, 또는 추적 이미지로 방문자의 IP와 브라우저 유출). 이건 이스케이프로는 못 막습니다: HTML이 &quot;를 다시 따옴표로 되돌린 뒤 CSS에 넘기기 때문입니다. 이제 주소는 화이트리스트를 통과해야 하고, 통과하지 못하면 배너를 아예 표시하지 않습니다
  • /whitelist의 "내 신청"이라는 카드는 실제로 사이트 전체 최근 5건을 조회하고 있었습니다 —— 로그인한 사용자라면 누구나 남의 게임 ID, QQ 번호, 심사 메모를 볼 수 있었습니다. 이제는 소유자 기준으로 걸러지며, 관리자와 서버 관리 페이지는 여전히 전체 보기입니다
  • 도구 페이지의 DNS 조회는 내부 주소 차단을 유일하게 빠져나간 입구였습니다: 127.0.0.1이나 내부 호스트 이름도 그대로 조회됐고, SRV 레코드(대상은 남의 DNS가 정합니다)로 우회하는 길도 있었습니다. host:port의 포트 검사도 콜론을 나누기보다 먼저 실행되어 8.8.8.8:53으로 아무 포트나 찔러볼 수 있었습니다. 세 가지 모두 고쳤고, ::1을 가리키는 AAAA 레코드도 차단 대상에 넣었습니다
  • 세 가지 더: ① 로그인 후 이동하는 next=에 javascript:…를 넣으면 한 줄짜리 XSS가 됐습니다(Url::ensure()는 문자열에 index.php가 있으면 스킴을 보지도 않고 그대로 통과시켰습니다); ② 비밀번호 복구 스크립트를 실행한 뒤 관리자 로그인 페이지가 새 평문 비밀번호를 그 페이지를 연 누구에게나 보여줬습니다 —— 비밀번호는 원래 서버 콘솔에도 출력되므로 페이지에 있던 사본은 지웠습니다; ③ CDR_DEBUG_CSRF를 켜면 로그에 로그인 요청의 앞 160바이트, 즉 평문 비밀번호가 기록됐습니다 —— 이제는 필드 이름과 길이만 기록합니다
v1.9.14 웹사이트 2026-09-26

'업적 개수가 들쭉날쭉한' 문제 수정

  • 게임에 접속해 있을 때는 업적이 켜져 있다가 접속을 끊으면 전부 회색이 되는 문제를 고쳤습니다. 모드가 진행 파일을 읽지 못하면 빈 목록을 보내는데, 사이트가 그것을 '이 플레이어는 업적이 없다'로 해석해 데이터베이스에 기록하여 저장된 진행 상황을 지우고 있었습니다. 이제 빈 목록은 절대 쓰지 않습니다 —— 오래된 데이터를 남기는 편이 0으로 초기화하는 것보다 낫습니다 (adv_done도 마찬가지로 0보다 큰 값만 받습니다)
  • 같은 분류 안에서 '한 계열이 두 동강 나는' 정렬 문제도 고쳤습니다. '달성한 것 먼저' 규칙 때문에 탐험의 跳跃 10,000 / 100,000(달성)과 跳跃 500,000(미달성)이 그룹 양 끝으로 갈라지고 그 사이에 엔드·네더 진행이 끼어 있었습니다. 이제 계열별로 먼저 묶고(1 km / 10 km …, 1만 회 / 10만 회 …), 계열 안에서 달성한 것을 앞에 둡니다 —— 접기는 미달성 항목을 제자리에서 숨길 뿐이라 달성한 업적은 그대로 바로 보입니다
v1.6.5 모드 2026-09-26

'오프라인 플레이어의 업적을 못 읽는' 문제 수정

  • 월드의 진행 파일 이름은 하이픈이 있는 형태(077e53e3-c49c-362b-87ee-12457397e38c.json)인데, 모드는 하이픈을 뺀 32자로 경로를 만들어서 파일을 하나도 찾지 못했습니다. 접속 중인 플레이어는 서버 실시간 스냅샷을 거치므로 정상이었지만, 접속을 끊으면 '진행 없음'으로 처리되었습니다. 이 서버의 진행 파일 1,859개와 플레이어 963명이 해당되며, 이것이 '업적 개수가 들쭉날쭉한' 직접 원인입니다(사이트도 빈 목록을 쓰지 않도록 고쳤습니다). 이제 두 표기를 모두 시도하고, 정말 없을 때만 '없음'으로 봅니다
v1.9.13 웹사이트 2026-09-26

이름 채워 넣기 귀속 규칙 수정

  • 같은 이름이 채워 넣기 표에 여러 번 나올 수 있습니다 —— 한 사람이 옛 오프라인 UUID(00000000-0000-...)와 정식 UUID를 모두 가진 경우이며, 둘 다 그를 가리킵니다. 기존 코드는 파일 순서대로 먼저 온 쪽이 가져가는 방식이었습니다: 이 사이트에서 birdzhonghuifei는 106.4시간 행과 1.9시간 행 모두에 대응하는데, 긴 쪽이 우연히 먼저 와서 제대로 붙은 것입니다. 순서가 달랐다면 엉뚱한 사람에게 이름이 붙었을 것입니다. 이제는 플레이 시간이 가장 긴 행에 부여되며 순서와 무관합니다
v1.9.12 웹사이트 2026-09-26

'알 수 없는 플레이어' 863명의 이름을 모두 찾았습니다

  • 서버의 usercache.json은 약 한 달만 보관하므로, 1.21 생존 서버에서 1.21.11까지 끌어올린 월드에서는 오래된 플레이어의 이름이 이미 만료되어 있었습니다 —— 사이트는 UUID를 식별자로 쓸 수밖에 없어 「알 수 없는 플레이어 · xxxxxx」로 표시했습니다. 그래서 백업 보관소를 뒤졌습니다: 역대 서버의 usercache / whitelist / ops / banned-players를 시간순(오래된 것→새 것)으로 합치자 863개 이름이 하나도 빠짐없이 복구되었습니다 (순위표의 395시간 기록은 iRXC). v13 업그레이드 시 한 번 자동으로 채워 넣으며, 이름이 아직 UUID인 행만 건드리고 이미 실제 이름이 있는 행은 1바이트도 바꾸지 않습니다
  • 경계 조건도 막았습니다: players.name은 고유 인덱스이므로 채워 넣을 이름을 다른 행이 이미 쓰고 있으면 그 행을 건너뛰고 기록합니다 —— 고유 제약 충돌 때문에 업그레이드 전체가 실패하는 일은 없습니다. 한 명이 '알 수 없음'으로 남는 편이 마이그레이션이 멈추는 것보다 낫습니다
v1.9.11 웹사이트 2026-09-26

관리자 화면 플레이어 이름 수정 · 실제 이름이 더 이상 덮어써지지 않습니다

  • 관리자 화면의 플레이어 목록 / 대시보드 / 차단 / 화이트리스트 / 스킨 / 사용자 페이지에서 이름을 확인할 수 없는 플레이어를 그대로 UUID로 보여주고 있었습니다. 공개 쪽은 계속 「알 수 없는 플레이어 · xxxxxx」로 표시해 왔고, 관리자 쪽 몇 곳이 빠져 있던 것을 맞췄습니다. 해당 플레이어는 863명입니다 —— 서버의 usercache.json은 약 한 달만 보관하므로 이 오래된 월드가 물려준 이름은 이미 만료되었고, 사이트는 전체 UUID를 식별자로 쓸 수밖에 없습니다(표시 오류가 아니라 정말로 보여줄 이름이 남아 있지 않습니다)
  • 함께 데이터 손실 위험도 고쳤습니다. 모드가 이름을 확인하지 못하면 빈 이름을 보고하는데, 예전 코드는 그대로 UUID를 덮어썼습니다. 한 달 넘게 접속하지 않은 고참 플레이어는 다음 동기화 때 저장된 실제 이름이 영구히 지워집니다. 이제 이미 실제 이름이 있으면 유지하고, 정말 이름이 없을 때만 UUID로 대체합니다
v1.9.10 웹사이트 2026-09-26

플레이어 페이지의 '하루에 225시간' 수정

  • 플레이어 페이지의 '최근 30일 온라인 시간'에 나오던 이상한 숫자를 고쳤습니다. 서버가 죽거나 퇴장 이벤트를 놓치면 닫히지 않는 접속 기록이 남는데, 마감 처리가 '마지막으로 확인된 시각'을 종료 시각으로 삼아서 09-13에 시작된 기록이 09-23까지 계산됐고 그 225시간이 전부 참가한 날에 얹혔습니다. 이제 마감에는 세 가지 상한이 있습니다 — 6시간 상한, 그 플레이어의 다음 세션 시작 시각, 그리고 추정을 줄이기만 하는 '마지막 확인 시각'입니다
  • 이미 데이터베이스에 들어간 몇 개의 잘못된 행도 데이터베이스를 건드리지 않고 올바르게 표시됩니다(읽을 때 같은 규칙으로 자릅니다). '최근 로그인 기록', '누적 온라인 시간', '이번 주 온라인', '서버별 시간'도 같은 규칙으로 맞췄습니다 — 이전에는 각자 초를 따로 합산해서 같은 숫자가 페이지 안에서 서로 어긋났습니다
v1.9.9 웹사이트 2026-09-26

모바일 달력 넘침 수정 · 연간 온라인을 '그날 최고'로

  • 모바일 채팅에서 날짜를 고를 때 달력이 패널 테두리 밖으로 나가던 문제를 고쳤습니다 (좁은 화면에서는 패널 위에 띄우지 않고 한 줄로 배치하므로 너비가 곧 컨테이너 너비입니다)
  • 「1년」 범위의 온라인 인원을 6일 평균에서 그날 최고로 바꿨습니다 — 저녁에만 붐비는 서버는 하루 평균 2명이어도 그 시간에 십여 명이 동시에 있었을 수 있습니다. 평균으로 그리면 1년이 아무것도 말해주지 않는 평평한 선이 됩니다. 24시간 / 7일 / 30일은 그대로 평균입니다 (거기서 한 점은 수십 분에 불과합니다)
v1.6.4 모드 2026-09-26

자체 지연 플레이스홀더 %cloudridge:ping%

  • TAB 플레이어 행에서 내장 %player:ping%은 모든 플레이어에 0을 돌려줍니다 (같은 설정의 하단에서는 같은 플레이스홀더가 정상이므로, 행 렌더링 컨텍스트에 온라인 플레이어가 없는 것이 원인입니다). 새 플레이스홀더는 두 경로를 모두 시도합니다: 먼저 컨텍스트의 플레이어, 안 되면 GameProfile 이름으로 서버 온라인 목록을 조회. 둘 다 실패하면 거짓 0 대신 비워 둡니다
v1.6.3 모드 2026-09-26

시작·종료 보고

  • 서버가 켜질 때 「시작되었습니다」, 정상 종료 시 「종료되었습니다」를 보고합니다. 종료 보고는 동기로 보냅니다 — 프로세스가 곧 끝나므로 백그라운드 스레드에 맡기면 전송되지 않습니다. 크래시나 정전 시에는 종료 기록을 지어내지 않습니다
v1.9.8 웹사이트 2026-09-26

채팅: 서버 시작과 종료가 실시간 채팅에 기록됩니다

  • 서버 시작과 종료(시각 포함)가 채팅 패널에 한 줄로 표시됩니다. 아바타 자리에 작은 세로선을 쓰고, 색도 플레이어 발언과 구분했습니다
  • 업데이트 내역 본문이 코드와 굵게 두 가지 표기를 지원합니다 (이전에는 백틱만 처리해서 굵게는 별표가 그대로 보였습니다)
v1.9.7 웹사이트 2026-09-25

채팅창: 날짜별 보기, 발언 권한 완화, 대화 상자 구성 요소

  • 채팅 기록을 날짜별로 볼 수 있습니다. 달력에서 날짜를 클릭하면 그날의 채팅을 읽을 수 있고, 기록이 있는 날짜는 굵게 표시됩니다. 날짜를 바꿔도 페이지 전체가 새로 고쳐지지 않습니다.
  • 발언 권한을 완화했습니다. 로그인만 하면 발언할 수 있고, 게임 캐릭터를 먼저 연동할 필요가 없습니다. 연동한 경우에는 캐릭터 이름으로 표시하고, 연동하지 않은 경우에는 사이트 닉네임을 쓰며 게임에서는 실제 캐릭터와 구분되도록 [웹 · 미연동]으로 표시합니다.
  • 사이트 닉네임은 15일에 한 번만 바꿀 수 있습니다(최초 설정은 제한 없음). 내 계정에 남은 날짜가 표시됩니다. 닉네임은 기존 게임 캐릭터나 관리자와 겹칠 수 없으므로, 이름을 바꿔 다른 사람을 사칭할 수 없습니다.
  • 신고가 제대로 된 대화 상자로 바뀌었습니다. 글자 수를 세어 주는 사유 입력란이 브라우저 기본 제공 창을 대신합니다. 철회 확인과 관리 화면의 몇몇 확인 창도 함께 교체했습니다 — 브라우저 기본 대화 상자는 페이지 전체를 막아 버리기 때문입니다.
  • 관리자 채팅 관리에서 미연동 발신자를 표시합니다. 삭제, 신고 처리, 음소거는 그대로입니다.
v1.6.2 모드 2026-09-25

가짜 플레이어 필터 수정 + 웹 메시지 접두사 구분

  • 전혀 동작하지 않던 가짜 플레이어 필터를 고쳤습니다. 명단 기본값이 bot_이었는데 * 가 없으면 정확히 일치하는 이름만 걸러지므로, 가짜 플레이어가 하나도 필터링되지 않았습니다. 기본값을 bot_* 로 바꾸고, 서버를 열 때 실제로 적용되는 명단을 로그에 남기므로 "적어 두었지만 적용되지 않은" 상태가 다시 조용히 지나갈 일은 없습니다.
  • 웹 메시지 접두사를 메시지마다 내려보내도록 바꿨습니다. 캐릭터를 연동한 사용자는 [웹], 연동하지 않은 사용자는 [웹 · 미연동]이 되므로, 게임 안의 플레이어는 이 발언이 게임 캐릭터의 것인지 한눈에 알 수 있습니다.
  • 1.6.1 추가 기록: 접속, 퇴장, 사망, 발전 과제가 전혀 표시되지 않던 원인은 번역 키로만 분류했기 때문입니다. 일부 모드는 바닐라 메시지를 통째로 바꿔 버려 키를 가져올 수 없습니다. 이제 렌더링된 텍스트로 분류하는 대체 경로를 넣고, 서버를 열고 나서 처음 오는 시스템 메시지 25개에 진단 로그를 남깁니다.
v1.6.0 모드 2026-09-25

채팅 동기화: 게임 공개 채팅과 이벤트 실시간 전송

  • 채팅 동기화를 추가했습니다. 게임 내 전체 채팅 발언, 접속과 퇴장, 사망, 발전 과제를 실시간으로 웹사이트 채팅창에 전송합니다
  • 웹사이트 사용자가 보낸 메시지는 [网页] 접두사가 붙어 시안색으로 게임에 알려집니다. 시스템 메시지 이벤트를 피하려고 한 명씩 보내므로 두 번 알려지는 일이 없습니다
  • 사망과 발전 과제는 렌더링된 텍스트가 아니라 번역 키로 분류하므로, 서버 언어를 중국어로 바꿔도 그대로 동작합니다
  • 가짜 플레이어(Carpet 봇)의 접속, 퇴장, 사망은 전송하지 않습니다. 명단은 cloudridge.json의 chat_bot_names에서 바꿀 수 있고 기본값은 bot_입니다
  • 수집하는 것은 전체 채팅뿐입니다 — 귓속말(/msg, /tell, /w)은 절대 수집되지 않으며, 켤 수 있는 스위치도 없습니다
  • 새 설정 항목 upload_chat / chat_bot_names / chat_poll_ms를 추가했습니다. 기존 설정 파일도 그대로 쓸 수 있고 기본값이 적용됩니다
v1.9.6 웹사이트 2026-09-25

웹 채팅창 출시: 게임 채팅과 양방향 연동

  • 웹 지도 아래에 채팅창을 추가했습니다. 게임 내 전체 채팅 발언, 접속과 퇴장, 사망, 발전 과제 달성이 실시간으로 웹사이트에 표시되며, 각 메시지에 전송 시각이 붙습니다
  • 양방향으로 연결했습니다 — 웹 채팅창에서 보낸 메시지는 [网页] 접두사가 붙어 게임 전체 채팅에 표시됩니다. 게임 안팎에서 보이는 이름이 같으므로(연동한 캐릭터 이름) 다른 사람을 사칭할 수 없습니다
  • 로그인하지 않으면 채팅 내용이 보이지 않습니다(화면에서 숨기는 것이 아니라 서버가 1바이트도 내려보내지 않습니다). 로그인하고 게임 캐릭터를 연동해야 발언할 수 있습니다
  • 채팅은 "서버 운영 회차"별로 정리되며, 이전 회차의 기록으로 전환해 볼 수 있습니다. 서버를 다시 시작해도 사라지지 않습니다
  • 각 메시지에는 아이콘과 전송 시각이 붙습니다. 본인이 보낸 메시지는 철회할 수 있고, 다른 사람의 메시지는 신고할 수 있습니다
  • 관리자 페이지에 "채팅 관리"를 추가했습니다. 메시지 삭제(웹사이트와 게임에 동시에 반영), 신고 처리, 음소거, 작업 기록(삭제할 때도 원문을 남겨 추적할 수 있습니다)
v1.9.5 웹사이트 2026-09-25

업데이트 내역을 종류·월·버전으로 필터링

  • 업데이트 내역을 필터링할 수 있습니다. 상단의 세 숫자(웹사이트 / 모드 / 서버)가 클릭 가능한 칩이 되었고, 다시 누르면 해제됩니다
  • 월 필터와 버전 검색을 추가했습니다. "1.9"를 입력하면 1.9.0부터 1.9.4까지 나오고, 두 조건을 함께 쓸 수 있습니다
  • 필터 상태가 URL에 들어가므로 링크를 그대로 보내면 받는 사람도 같은 결과를 봅니다
  • 숫자는 전체 개수를 그대로 유지하며(필터링해도 줄지 않습니다), "이 조건에 맞는 업데이트가 없습니다"라는 빈 상태 안내를 추가했습니다
v1.5.2 모드 2026-09-25

서버 지표를 TAB에 바로 표시

  • %cloudridge:*% 플레이스홀더 18종(TPS, MSPT, 청크, 엔티티, 메모리, CPU, 네트워크 속도, 가동 시간)을 추가해 TAB 목록에 바로 표시할 수 있습니다
  • 모드가 원래 하던 수집을 그대로 씁니다 — 두 번 수집하지 않습니다. 렌더링 시점에는 캐시만 읽습니다. 렌더링은 매우 자주 일어나므로 거기서 파일을 읽거나 하위 프로세스를 띄우면 서버가 멈춥니다
  • TAB 모드를 설치하지 않아도 안전합니다. 등록 로직을 분리했고, 값이 없으면 거짓 0 대신 아무것도 표시하지 않습니다
v1.5.1 모드 2026-09-25

네트워크 카운터 수정 및 로그 조용히

  • 네트워크 전송량이 계속 0이던 문제를 고쳤습니다. 찾던 두 인터페이스는 표준 JDK에 존재하지 않아 그 코드는 절대 동작할 수 없었습니다. OS가 실제로 제공하는 원천으로 바꾸고, 문자열이 아니라 구조로 파싱해 한국어 환경에서도 유효합니다
  • 수집을 백그라운드 스레드로 옮겼습니다. 그 원천은 하위 프로세스가 필요하고, 인라인으로 하면 tick 스파이크가 생깁니다
  • "매 하트비트 스냅샷 기록" 스위치를 추가했습니다(기본 꺼짐). 켜도 값이 실제로 바뀔 때만 기록합니다
v1.9.4 웹사이트 2026-09-25

로그인 수정, 백업 안전망, API 문서 보강

  • 관리자 2단계 인증을 통과하지 못하던 문제를 고쳤습니다. 원인은 서버가 쓰는 PHP 버전에서 쓰기 트랜잭션의 커밋이 조용히 건너뛰어져 인증 코드가 데이터베이스에 남지 않던 것이었습니다. 메일은 오는데 코드를 넣으면 "먼저 코드를 받으세요"라고 나왔고, 재발송 제한도 함께 풀려 있었습니다
  • 같은 원인의 잠재적 문제 세 곳을 추가로 고쳤습니다(플레이어 검색, 하트비트 지표, 세션 기록)
  • 백업 정리를 범주별 할당량으로 바꿨습니다. 업그레이드 전·복원 전 안전 스냅샷은 일반 백업에 밀리지 않고, 직접 내보낸 백업은 자동으로 삭제되지 않습니다
  • 공개 플레이어 API의 검색 파라미터가 동작하지 않았습니다. 전체 500명을 넘으면 플레이 시간 500위 밖의 플레이어를 찾을 수 없었습니다. 부분 일치로 바꾸고 와일드카드 취약점도 막았습니다
  • 전송 내용이 서버 한도를 넘으면 빈 화면 대신 명확한 안내를 보여 줍니다
  • API 계약 문서에 공개 읽기 전용 엔드포인트 5개를 정리했습니다
  • 관리자 로그인 페이지의 "아이디·비밀번호로 돌아가기" 링크가 잘못된 단계로 가던 문제를 고쳤습니다
v1.21.11 서버 2026-09-25

서버를 Minecraft 1.21.11로 업그레이드

  • 서버를 1.21.1에서 1.21.11로 올리고 Fabric Loader, Fabric API와 모든 모드를 함께 갱신했습니다
  • 웹 지도가 열리지 않던 문제를 고쳤습니다. BlueMap 설정이 예전 형식이어서, 네더 지도가 렌더 범위를 최상위에 둔 탓에 플러그인 전체가 로드되지 않았습니다
  • 사이트와 모드의 표시 버전을 모두 1.21.11로 통일했습니다
  • TAB(플레이어 목록) 개편: 색상을 사이트 브랜드 색(시안 / 그린)으로 맞추고, 각 플레이어 이름 옆에 지연을 밀리초로 표시하며, 하단에 TPS·MSPT·메모리·청크·엔티티·CPU를 모았습니다
  • MOTD 개편: 브랜드 색 그라데이션으로 바꾸고, 모드에 남아 있던 영어 자리표시자 두 줄을 제거했습니다. 호버 안내에 웹사이트와 QQ 그룹을 추가했습니다
  • 표시되는 버전 표기를 모두 1.21.11로 통일했습니다
v1.5.0 모드 2026-09-24

Minecraft 1.21.11 지원

  • 모드를 Minecraft 1.21.11에 맞췄습니다(Fabric Loader 0.19.5 / Fabric API 0.141.6+1.21.11)
  • 명령 권한 판정을 서버 OP 목록으로 바꿨습니다. 예전 구현이 쓰던接口는 1.21.11에서 제거되었습니다. 콘솔과 명령 블록의 권한은 그대로입니다
  • 로드된 청크 수 집계를 새接口로 바꾸고, 예전·새 버전 모두에서 컴파일되는写法으로 작성했습니다
  • 그 밖에 버전에 따라 바뀐接口도 옮겼고, 공식 매핑과 하나씩 대조한 뒤 컴파일했습니다
v1.9.3 웹사이트 2026-09-23

배지 벽 접기, 차트 설명, 24시간 추이 수정

  • 업적 시스템을 28개에서 98개로 늘리고 생존 / 건축 / 탐험 / 레드스톤 / 농사 / 전투 / 교류 / 수집의 8개 분류로 나눴습니다. 각 분류에는 「달성 / 전체」가 표시됩니다. 그중 35개는 게임 안의 실제 업적을 그대로 판정하며, 날짜는 게임에서 업적이 뜬 그 순간입니다
  • 오각형 레이더 차트의 각 축에 설명을 붙였습니다. 무엇을 재고 어떻게 계산하며 얼마가 만점인지 알 수 있어 모양만 보고 짐작할 필요가 없습니다. 범례도 추가해 채워진 도형은 나, 회색 점선은 서버 평균입니다
  • 24시간 추이 차트가 실제와 맞지 않던 문제를 고쳤습니다. 원인은 기록에 모드의 원본 접속자 수(상시 접속 봇 포함)가 저장된 반면 화면에는 걸러낸 수를 보여 준 것이었습니다. 이제 하트비트 저장과 화면 표시가 같은 숫자를 쓰고, 선에 마우스를 올리면 시각과 접속자 수가 나옵니다
  • 차트의 기간을 바꿀 수 있습니다: 24시간 / 7일 / 30일 / 1년. 서버가 최근에 어땠는지 한눈에 보입니다. 서버가 꺼져 있던 시간대는 선이 끊기고, 열지 않은 날을 0명으로 그리지 않습니다
  • 플레이어 페이지의 배지 벽을 접을 수 있습니다. 달성한 배지는 항상 표시되고(그게 바로 전적입니다), 미달성 배지는 분류 제목이나 아래의 「모두 펼치기」 버튼 뒤로 숨습니다. 접은 상태는 기억되어 새로 고쳐도 그대로이고, JavaScript가 없어도 98개가 모두 표시됩니다
  • 세션 기록 수정: “접속 중”은 예전에 세션에 종료 시각이 있는지만 보았기 때문에, 서버 충돌이나 퇴장 이벤트 누락 시 계속 “접속 중”으로 남았고 같은 사람이 두 세션에서 동시에 접속 중으로 표시되기도 했습니다. 이제 서버가 실시간으로 보고하는 명단을 기준으로 하며, 맞지 않는 세션은 “비정상 종료”로 표시하고 자동으로 마감합니다. 퇴장 이벤트가 중복으로 와도 두 번째 세션은 열리지 않습니다
  • 「게임 진행」배지가 하나도 켜지지 않던 문제를 고쳤습니다. 판정에 쓰는 진행 ID에 불필요한 접두사가 붙어 있어 게임이 보고하는 진행 이름과 맞지 않았고, 그래서 35개의 실제 업적이 모두 미달성으로 표시되었습니다(화면에서는 회색일 뿐이라 아직 못 한 것처럼 보여서 눈으로는 알 수 없었습니다). 이제 ID가 맞으므로 달성한 배지는 정상적으로 켜지고, 게임에서 실제로 달성한 날짜가 표시됩니다
v1.9.2 웹사이트 2026-09-22

보안·개인정보 강화, 업로드와 사용성 마무리

  • QQ 로그인을 연결했습니다. AppID·AppKey·콜백 주소는 모두 설정되어 있고, Tencent 심사가 끝나고 관리 화면에서 스위치를 켜면 바로 사용할 수 있습니다. 그전까지는 로그인 페이지에 버튼을 표시하지 않습니다(눌러도 아무 일도 없는 입구를 만들지 않기 위해서입니다)
  • 보안 강화: /storage/ 디렉터리에 더 이상 직접 접근할 수 없습니다(데이터베이스 백업, 스킨 캐시처럼 공개되면 안 되는 파일이 들어 있습니다)
  • 데이터베이스에 남아 있던 관리자 비밀번호 평문을 모두 지우고, 암호화된 요약값만 남겼습니다
  • 캐릭터 연결 확인 API에 실패 제한을 추가했습니다. 짧은 코드를 계속 틀리면 잠시 차단되어 무작위 대입을 막을 수 있습니다
  • 플레이어 필터, SVG 검사, 항목 검증을 허용 목록과 파라미터 바인딩으로 바꿨습니다. 명시적으로 허용한 값만 통과하고, 외부에서 들어온 값이 쿼리에 그대로 들어가지 않습니다
  • 사이트 전체 74곳의 JSON 출력에 안전한 이스케이프 플래그를 추가했습니다. 페이지에 들어간 데이터가 태그로 해석되지 않습니다
  • 개인정보: 프로필 공개 스위치에는 아직 5곳의 우회 경로가 있었습니다(키가 필요 없는 공개 플레이어 API 포함). 모두 막았으니 꺼 두면 공개 API에서도 볼 수 없습니다
  • WebP 지원: 프로필 이미지, 배너, 이미지 라이브러리, 포럼 등 8곳 모두 WebP를 그대로 업로드할 수 있습니다
  • 관리 화면의 "허용 형식"이 문자열 "array"로 깨져 저장되던 문제를 고쳤습니다. 업로드 형식 목록이 무효가 되던 근본 원인이고, 이제 저장해도 깨지지 않습니다
  • 플레이 시간 표시를 사이트 전체에서 시간 단위로 통일했습니다(큰 숫자는 시간, 일수는 작은 부제). 순위표는 정렬한 항목의 열만 보여 줍니다
  • 구형 브라우저 대비: 활동 히트맵, 성장 바, 업로드 영역의 옅은 배경과 포커스 링이 color-mix()를 지원하지 않는 브라우저에서도 투명해지지 않습니다
  • 공개 플레이어 페이지의 이름 옆에 레벨 배지(Lv.N)를 추가했습니다. 좁은 휴대폰 화면에서도 넘치지 않습니다
  • 브랜드 이미지: 테스트 이미지로 덮여 있던 로고와 아이콘을 복구했고, 브랜드 이미지의 오프라인 보관과 brand-restore.php 도구를 추가했습니다. 앞으로 잘못 덮여도 바로 되돌릴 수 있습니다
v1.9.0 웹사이트 2026-09-19

플레이어 센터와 이미지 업로드 개편

  • 마이페이지를 개편했어요. 성장 진행도, 이번 주 활동, 업적 배지, 커뮤니티 활동 흔적, 최근 활동 타임라인이 한 페이지에 모여요
  • 게임 레벨을 추가했어요. 누적 플레이 시간으로 환산해서 10시간마다 1레벨(Lv.1부터)이고, 마이페이지와 공개 플레이어 페이지에서 모두 볼 수 있어요
  • 공개 범위 스위치를 추가했어요. 누적 플레이 시간, 마지막 접속 시간, 첫 접속 날짜, 접속자 목록 네 항목을 본인이 공개할지 정할 수 있고, 끄면 다른 페이지에서도 찾을 수 없어요
  • 프로필 이미지와 배너는 이미지를 바로 업로드할 수 있고 자동으로 WebP로 저장돼요 (용량이 작고 로딩이 빨라요). 프로필 이미지는 가운데 기준으로 정사각형으로 잘리고, 배너는 비율을 유지한 채 1920×1080 안으로 줄어요
  • 이미지 형식은 PNG / JPG / WebP / GIF를 지원해요. AVIF는 먼저 PNG나 WebP로 저장한 뒤 올리라는 안내가 나와요
  • 이미지 라이브러리를 추가했어요. 업로드한 이미지를 관리 화면 한곳에서 관리하고 크기, 용량, 사용된 위치를 볼 수 있어요
  • 업로드 보안을 강화했어요. 파일의 실제 내용으로 종류를 판단하고 (확장자만 바꿔 속인 파일은 모두 거부), 업로드 폴더 밖으로 나가려는 시도를 막고, SVG는 허용 목록에 있는 것만 통과시키며, 참조되지 않는 고아 파일은 정리해요
  • 게임 캐릭터 소유권 신청은 '사이트에서 신청 → 게임에서 /cdr claim 과 짧은 코드로 확인' 방식으로 바뀌었어요. 그 캐릭터 본인만 확인할 수 있어요
  • 마이페이지에 스킨 3D 미리보기를 추가했어요. 시드 지도와 실시간 지도는 모두 HTTPS로 바뀌었어요
v1.9.1 웹사이트 2026-09-19

권한 표를 다시 만들었어요 (이 서버에 실제로 설치된 모드 기준)

  • 권한 체크 표를 이 서버에 실제로 설치된 모드 기준으로 다시 만들었어요. 진짜 권한 노드가 있는 항목만 남고, 체크하면 실제로 적용돼요
  • 모드가 없어서 못 쓰는 기능(영지 관리, /hat, /back, 채팅 색상 등)은 체크 표에서 빠졌어요. 대신 아래에서 무엇이 없고 나중에 어떤 노드를 넣어야 하는지 솔직하게 설명해요
  • 각 권한마다 '체크하면 게임에서 실제로 무엇을 할 수 있는지'를 분명히 적었어요. 예를 들어 '관전 모드'는 절대 크리에이티브 모드까지 열어 주지 않아요
  • 크리에이티브 모드는 별도 항목이에요. 서버 주인과 관리팀이 체크할 때만 두 번 확인 없이 저장되고, 다른 그룹은 먼저 확인 창이 떠요. 사이트 계정도 서버 주인이나 관리팀이면 이제 관리 화면에 바로 로그인할 수 있어요
v1.8.2 웹사이트 2026-09-18

CloudRidge 블루와 새 색상, 더 안정적인 로그인

  • 사이트 전체 색상을 "CloudRidge 블루"로 바꿨어요. 색상 값은 서버 로고에서 그대로 가져와서 사이트와 로고를 나란히 놓아도 색이 어긋나지 않아요
  • 운영 환경에서 로봇 인증이 "모두 통과하지 못하는" 문제를 고쳤어요 (리버스 프록시 환경에서 실제 IP를 가져오지 못해 요청 제한이 모든 방문자를 같은 사람으로 취급했어요)
  • 인증은 통과했는데 페이지가 넘어가지 않을 때 제출 버튼이 멈춰 있지 않고 8초 뒤 자동으로 복구돼요
  • 홈 첫 화면의 버튼이 휴대폰에서 화면 밖으로 밀려나지 않아요
v1.8.1 웹사이트 2026-09-18

로봇 인증 업그레이드

  • 로봇 인증을 ALTCHA 2.x로 올리고, 대체 수단으로 이미지 인증번호를 추가했어요. 브라우저가 계산하지 못할 때는 그림에 있는 문자를 그대로 입력하면 돼요
  • 가입, 화이트리스트 신청, 인증번호 재발송 같은 요청도 로봇 인증 대상에 넣어서 남의 이메일로 인증번호를 요청하는 것을 막을 수 있어요
  • 홈에 "원클릭 QQ 그룹 가입"을 추가했어요. PC와 휴대폰 모두 QQ가 바로 열려요
  • 사이트 아이콘을 여러 크기로 갖춰서 휴대폰의 "홈 화면에 추가"에서도 아이콘이 나와요
v1.8.0 웹사이트 2026-09-18

업적, 기기 로그인 기억, 새 디자인

  • 플레이어 상세 페이지에 업적 배지와 능력 레이더를 추가해서 그 플레이어가 무엇을 잘하는지 한눈에 알 수 있어요
  • "이 기기 기억하기"를 추가했어요. 체크하면 30일 동안 다시 로그인하지 않아도 돼요 (비밀번호 변경이나 모든 기기 로그아웃 시 즉시 무효가 돼요)
  • 관리자 로그인에 두 번째 단계 이메일 인증번호를 추가하고, 오프라인 복구 키도 발급해요. 메일을 받을 수 없을 때도 관리 화면에 들어갈 수 있어요
  • 화이트리스트 신청 페이지가 자신의 상태에 따라 다른 내용을 보여줘요. 심사 중, 승인됨, 또는 지난번에 거절된 사유와 다시 제출 양식이에요
  • 사이트 전체 색상을 서버 로고와 같은 색인 청록과 먹색으로 바꾸고 제목은 세리프체로 했어요. 여백이 있는 산수화 같은 느낌이에요
  • 포럼 카테고리 아이콘은 emoji를 쓰지 않고 (일부 시스템에서 빈 네모로 보여서) 사이트 자체 아이콘으로 바꿨어요
v1.7.0 웹사이트 2026-09-18

가이드 검색과 실시간 정보

  • 서버 가이드에 검색을 추가했어요. 제목이나 본문 키워드로 바로 찾을 수 있어요
  • 가이드 사이드바에 "서버 실시간 정보"를 추가했어요. 버전, 로더, 모드 버전 같은 실시간 정보를 페이지를 옮기지 않고 볼 수 있어요
  • 가이드의 명령어 목록과 모드 목록을 주소로 바로 열 수 있어서 새 플레이어에게 공유하기 편해요
  • 휴대폰에서는 가이드 사이드바가 본문 위로 올라가고, 실시간 정보 블록이 화면 한 장을 다 차지하지 않아요
v1.6.0 웹사이트 2026-09-18

스킨 사이트 동기화

  • 스킨 사이트 동기화를 지원해요. 스킨 사이트에 같은 이름으로 가입해 스킨을 올리면 웹사이트가 자동으로 가져와요
  • 플레이어 상세 페이지에서 처음 보는 이름을 만나면 스킨 사이트에 한 번 자동으로 조회해서, 찾으면 바로 보여줘요
  • 마이페이지에 "스킨 다시 동기화"를 추가했어요. 스킨 사이트에서 스킨을 바꾸면 한 번 눌러 갱신할 수 있어요
  • 관리 화면에서 스킨 사이트 주소를 직접 입력할 수 있어요 (기본값은 LittleSkin). 나중에 사이트를 바꿔도 코드를 고칠 필요가 없어요
v1.4.0 웹사이트 2026-09-18

계정과 보안

  • 마이페이지를 개편해 "계정과 보안", "개인 설정" 두 영역을 추가했어요. 로그인 기록, 연동 변경, 비밀번호 변경이 여기서 가능해요
  • "모든 기기에서 로그아웃"을 지원해요. 비밀번호를 바꾸거나 다른 곳에서 로그아웃하면 다른 기기의 로그인이 즉시 무효가 돼요
  • 인증번호에 기기 잠금을 걸었어요. 같은 기기에서 하루 최대 5건까지만 보낼 수 있어서 스크립트로 문자와 메일을 퍼붓는 것을 막아요
  • 이메일이나 휴대폰 인증이 끝나지 않았으면 페이지 상단에서 한 번 알려주고, 인증을 마쳐야 화이트리스트 신청, 글쓰기, 캐릭터 연동을 할 수 있어요
  • 마이페이지에서 각 서버에서의 자신의 활동 요약을 볼 수 있어요
v1.5.0 웹사이트 2026-09-18

다시 패키징한 배포

  • v1.4.0과 내용이 완전히 같고 배포 패키지만 다시 만들었어요. 기능 변화는 없어요
v1.3.8 웹사이트 2026-09-17

로그인 방법 설명 보완

  • 비밀번호 로그인 페이지에 사용할 수 있는 세 가지 계정(이메일, 휴대폰 번호, 연동한 게임 이름)을 분명히 적어서 실제 지원 내용과 맞췄어요
  • 다국어 문구도 함께 보완했어요
v1.3.7 웹사이트 2026-09-17

로그인 페이지 배경 이미지

  • 로그인, 가입, 비밀번호 찾기 페이지에서 배경 이미지를 직접 설정할 수 있어요 (관리 화면에서 업로드). 카드는 반투명 유리 효과로 바꿨어요
  • 관리 화면 "외관"에서 홈 대표 이미지, 사이트 로고, 브라우저 아이콘, 로그인 페이지 배경 이미지를 올릴 수 있어요
  • 로그인은 이메일과 휴대폰 번호 외에 이미 연동한 게임 이름으로도 할 수 있어요
v1.3.6 웹사이트 2026-09-17

SMS 키 검사 다시 추가

  • SMS 키 검사를 다시 넣었지만, 실제로 문제가 되는 경우에만 알려줘요. 32자리 16진수로 입력한 경우예요 (그건 MD5이고 평문 KEY가 아니에요)
  • 안내에 KEY를 어디서 다시 복사해야 하는지 바로 적어 줘서 "키 오류"만 보고 추측할 필요가 없어요
v1.3.5 웹사이트 2026-09-17

SMS 키 안내 수정

  • 잘못 경고하던 SMS 키 길이 안내를 없앴어요 (이전에는 32자를 요구했지만 플랫폼의 실제 키는 16자예요)
  • 키가 맞는지는 SMS 플랫폼이 직접 답하도록 바꿔서 길이로 추측하지 않아요
v1.3.4 웹사이트 2026-09-17

로그인 수정과 보안 강화

  • 이메일과 휴대폰 비밀번호 로그인이 무조건 오류가 나서 열리지 않던 문제를 고쳤어요 (이전에는 500이 났어요)
  • 로그인 실패가 너무 많으면 일시적으로 제한해서 스크립트로 비밀번호를 대입하는 것을 막아요
  • 내비게이션 그룹 안에 현재 페이지가 있으면 그룹 버튼도 함께 강조돼서 지금 어디에 있는지 한눈에 보여요
  • 로그인 페이지에서 "QQ 로그인"과 "이메일 로그인"을 구분선으로 나눠서 헷갈리지 않게 했어요
v1.3.3 웹사이트 2026-09-16

SMS 설정 자가 점검

  • 관리 화면 SMS 설정에 "비용 없는 자가 점검"을 추가했어요. 문자를 실제로 보내지 않고도 사용자 이름, 키, 템플릿이 맞는지 확인할 수 있어요
  • "계정과 키가 틀렸다"인지 "템플릿이 아직 심사를 통과하지 못했다"인지 분명히 알려줘서 추측할 필요가 없어요
  • 예약 작업이 SMS 템플릿 심사 상태를 주기적으로 확인하고, 통과하면 사용 설정을 자동으로 알려줘요
v1.3.2 웹사이트 2026-09-16

여러 서버 지원

  • 여러 서버를 지원해요. 서버마다 유형(생존, 크리에이티브, 미니게임)을 설정할 수 있고, 프런트는 유형별로 다른 내용을 보여줘요
  • 크리에이티브 서버는 건축 패널 설명을, 미니게임 서버는 대전 설명과 PvP 순위를 보여줘요
  • 화이트리스트와 밴 같은 변경이 서버마다 실제로 실행됐는지 확인해서 "어떤 서버는 동기화되지 않았다"는 상황이 더 이상 생기지 않아요
  • 관리 화면에서 한 건의 변경을 특정 서버에만 보내도록 지정할 수 있어요
v1.1.6 모드 2026-09-16

서버 유형 지원

  • server_type 설정을 추가했어요. 생존, 크리에이티브, 미니게임, 로비, 기타 중에서 고를 수 있고 웹사이트는 유형에 따라 다른 내용을 보여줘요
  • 플레이어 누적 통계 전송을 계속 수정해서 웹사이트의 누적 데이터가 더 정확해졌어요
  • 설정 항목 설명과 게임 내 안내 문구를 보완했어요
v1.3.1 웹사이트 2026-09-16

관리자 로그와 메시지 센터

  • 관리 화면에 "작업 로그"를 추가했어요. 누가 언제 무엇을 바꿨는지 모두 확인할 수 있어서 문제가 생겨도 데이터베이스를 뒤질 필요가 없어요
  • 관리 화면에 "메시지 센터"를 추가했어요. 메일과 SMS 발송 기록을 볼 수 있어서 플레이어가 "인증번호가 안 왔다"고 할 때 바로 확인할 수 있어요
  • 관리 화면에 화이트리스트 일괄 도구를 추가했어요. 한 번에 추가하고, 제거하고, 만료된 목록을 정리할 수 있어요
  • 사용자 그룹 권한 판정이 작동하지 않던 문제를 고쳐서 그룹 권한 설정이 이제 실제로 적용돼요
  • 관리 콘솔 첫 화면에 최근 14일 추이 그래프를 추가했어요. 신규 사용자, 화이트리스트 신청, 방문 수, 신규 플레이어
v1.3.0 웹사이트 2026-09-16

플레이어 스킨과 내비게이션 그룹

  • 플레이어 스킨을 추가했어요. 64×64 스킨을 올리면 마이페이지와 플레이어 상세 페이지에서 3D 모델로 보여줘요 (외부 라이브러리는 전혀 불러오지 않아요)
  • 마이페이지에 "내 스킨" 영역을 추가해서 언제든 올리거나 삭제할 수 있어요
  • 상단 내비게이션을 그룹 드롭다운(서버, 커뮤니티)으로 바꾸고, 휴대폰에서도 두 줄로 빽빽해지지 않아요
  • 서버 가이드에서 [[mods]], [[server-facts]] 같은 실시간 블록이 일부 페이지에서 대괄호 그대로 보이던 문제를 고쳤어요
  • 푸터에 ICP 등록번호와 공안 등록 아이콘을 추가했어요
v1.2.3 웹사이트 2026-09-13

SMS 채널과 여러 문제 수정

  • SMS 인증번호 채널을 연동해서 휴대폰 번호 가입과 비밀번호 찾기가 가능해졌어요 (관리 화면에서 플랫폼 설정을 채우면 적용돼요)
  • "관리 화면에서 설정을 바꿨는데 프런트에 반영되지 않는" 문제를 고쳤어요. 메일, SMS, 봇, 화이트리스트 설정이 이제 제대로 적용돼요
  • 서버 상태 페이지의 노드 상세가 열리지 않던(500 오류) 문제를 고치고, 알 수 없는 노드는 정상 안내를 보여주도록 했어요
  • 밴 사유가 영어 "Banned by an operator."로 표시되던 문제를 고쳤어요. 이제 중국어로 표시돼요
  • 로그인하지 않고 화이트리스트 신청을 누르면 먼저 로그인으로 안내하고, 로그인 후 신청 페이지로 자동으로 돌아와요
v1.2.2 웹사이트 2026-09-13

계정 시스템과 화이트리스트 온라인 신청

  • 계정 시스템을 추가했어요. 이메일이나 휴대폰으로 인증번호를 받아 가입하고, 비밀번호로 로그인하고, 비밀번호를 잊으면 재설정할 수 있어요
  • 화이트리스트 온라인 신청을 추가했어요. 게임 ID와 연락 방법을 하나 이상 입력하면 신청할 수 있고, 관리자가 승인하면 서버에 자동으로 반영돼요
  • QQ 번호를 적었고 그룹에 가입해 있으며 QQ 레벨이 기준을 넘으면 QQ 봇이 바로 자동 승인해요. 사람을 기다릴 필요가 없어요
  • 서버 주인과 관리팀은 웹 오른쪽 아래 떠 있는 버튼에서 신청을 승인하고, 화이트리스트를 추가하거나 삭제하고, 서버 설정을 바로 바꿀 수 있어요
  • 관리 화면에 "원클릭 업데이트 소식 발행"을 추가했어요. 앞으로 업데이트마다 자동으로 한 건씩 기록돼요
v1.1.5 모드 2026-09-13

화이트리스트 동기화와 설정 프록시

  • 화이트리스트 동기화를 추가했어요. 웹사이트에서 승인된 신청이 서버 화이트리스트에 자동으로 기록돼서 관리자가 직접 추가할 필요가 없어요
  • 서버 설정 파일을 웹사이트 관리 화면에서 대신 수정할 수 있어요. 수정 전에 원본 파일을 자동으로 백업해요
  • 대기 작업 큐를 추가해서 웹사이트가 내려보낸 작업을 모드가 가져가 실행하고 결과를 돌려줘요
v1.2.1 웹사이트 2026-09-13

편의 도구와 상태 페이지 개편

  • "편의 도구" 페이지를 추가했어요. 그라데이션 글자 생성기, 서버 상태 조회, 서버 주소 점검, 틱 환산, 플레이어 조회
  • 서버 상태 페이지를 개편했어요. 24시간 가동률, 서비스 목록, 장비 상태를 추가했고 눌러서 노드 상세도 볼 수 있어요
  • 한 계정으로 여러 게임 캐릭터를 연동하고 대표 캐릭터를 지정할 수 있어요 (게임 내 /cdr main 으로도 바꿀 수 있어요)
  • 건축 갤러리를 큰 이미지로 보는 방식으로 바꿔서 보기가 훨씬 편해졌어요
  • 서버 가이드의 명령어 목록과 모드 목록이 서버 실제 상황을 자동으로 따라가서 직접 옮겨 적을 필요가 없어요
v1.1.4 모드 2026-09-13

서버 규칙 확대와 중국어·영어 안내

  • 서버 규칙 전송이 더 완전해졌어요. 사망 시 아이템 드롭, 아이템 보존 같은 게임 규칙도 상태와 함께 전송돼서 가이드 페이지 정보가 더 정확해요
  • 게임 내 명령어 안내가 중국어와 영어를 지원하고 플레이어의 클라이언트 언어에 맞춰 자동으로 바뀌어요
v1.1.3 모드 2026-09-13

더 정확해진 플레이어 데이터

  • 플레이어 누적 통계 전송을 수정해서 월드 데이터를 더 정확하게 읽어요. 웹사이트의 누적 데이터가 더 이상 어긋나지 않아요
  • 허수아비와 봇 계정은 집계 단계에서 제외돼서 웹사이트 순위에 나타나지 않아요
v1.2.0 웹사이트 2026-09-13

개설부터 지금까지의 플레이어 데이터

  • 서버 월드 통계를 연동했어요. 개설 이후 플레이 시간, 사망, 킬, 채굴, 설치, 이동 거리를 모두 볼 수 있어요
  • 플레이어 목록을 누적 플레이 시간 순으로 정렬할 수 있고, 눌러서 자세한 데이터를 볼 수 있어요
  • 잠수용 허수아비와 봇 계정을 자동으로 구분해 제외해서 더 이상 순위 자리를 차지하지 않아요
  • 밴 공개에 "밴된 IP" 항목을 추가하고 IP 위치도 표시해요
  • MSPT가 표시되지 않던 문제를 고쳤어요. 이제 TPS와 MSPT가 각각 독립된 눈금을 가져요
v1.1.2 모드 2026-09-13

플레이어 통계와 모드 목록

  • 접속 플레이어를 UUID와 함께 전송하도록 바꿔서 이름을 바꿔도 두 사람으로 늘어나지 않아요
  • 월드 통계를 읽어 개설 이후 데이터를 전송해요. 누적 플레이 시간, 사망, 킬, 채굴, 설치, 이동 거리
  • 서버에 설치된 모드 목록과 사용 가능한 명령어 목록을 자동으로 전송해요 (Fabric API의 수십 개 하위 모듈은 걸러냈어요)
  • 밴된 IP도 함께 전송해서 웹사이트에 별도 항목으로 보여줘요
v1.1.1 웹사이트 2026-09-13

아바타 대체 표시와 관리 화면 개편

  • 아바타를 불러오지 못해 화면이 깨진 이미지로 가득 차던 문제를 고쳤어요. 외부 아바타를 가져올 수 없으면 플레이어 이름 첫 글자 아바타로 자동 전환돼요
  • 관리 화면을 개편했어요. 상단 관리 바에 사이드바 메뉴 검색을 추가해서 바꾸고 싶은 항목을 키워드로 찾을 수 있어요
  • 일부 서버에서 로봇 인증이 오류를 내고 페이지가 열리지 않던 문제를 고쳤어요
  • 모드 API 주소가 리다이렉트되면 "API는 정상인데 사이트에는 데이터가 하나도 없다"는 함정에 빠지던 문제를 고쳤어요. 관리자 자가 점검에서 바로 알려줘요
  • 웹 지도에 연결할 수 없을 때 빈 화면 대신 명확한 안내를 보여줘요
v1.1.1 모드 2026-09-13

API 주소 리다이렉트 보호

  • API 주소가 301, 302로 리다이렉트되면 바로 오류를 내고 올바른 주소를 알려줘요. 더 이상 조용히 데이터를 잃지 않아요
  • 전송 실패 원인은 게임 내 /cdr status 에서 바로 볼 수 있어요
v1.1.0 웹사이트 2026-09-13

계정 시스템과 건축 갤러리

  • "건축 갤러리"를 추가했어요. 직접 지은 건물 스크린샷을 올리면 다른 사람이 좋아요를 누르거나 크게 열어 볼 수 있어요
  • 플레이어 목록과 플레이어 상세 페이지를 추가했어요. 플레이 시간, 사망 횟수, 채굴량, 이동 거리를 한눈에 볼 수 있어요
  • 관리자 패널을 공개했어요. 소식, 페이지, 갤러리, 사용자, 시스템 설정을 웹에서 관리할 수 있어요
  • 다국어와 색상 테마 전환을 추가했어요. 밝은 테마와 어두운 테마도 직접 바꿀 수 있어요
  • 밴 기록의 처리 결과를 공개해서 처리가 투명하게 보이도록 했어요
v1.1.0 모드 2026-09-12

관측 모드 첫 버전

  • 30초마다 서버 상태를 웹사이트로 전송해요. 접속자 수, TPS, MSPT, CPU, 메모리, 디스크, 네트워크
  • 밴 목록과 플레이어 접속·퇴장 이벤트를 전송하고, 웹사이트는 이를 바탕으로 플레이 시간을 집계해요
  • 게임 내 /cdr bind <연동 코드> 로 계정을 연동하고, /cdr status 와 /cdr reload 는 관리자가 상태 확인과 설정 다시 불러오기에 써요
  • 네트워크 요청은 모두 백그라운드 스레드에서 실행돼서 웹사이트에 연결하지 못해도 서버가 느려지지 않아요
v1.0.0 웹사이트 2026-09-12

웹사이트 정식 공개

  • 웹사이트를 정식으로 공개했어요: 홈, 서버 상태, 플레이어 가이드, 밴 공개, 소식, 게시판
  • 홈에서 접속자 수, TPS, 장비 사용량을 실시간으로 보여줘요. 데이터는 서버 모드가 30초마다 전송해요
  • QQ 원클릭 로그인을 지원해요. 로그인하면 게임 캐릭터를 연동하고 게시판에 글을 쓸 수 있어요
  • 사이트 전체가 외부 CDN에 의존하지 않고 로봇 인증도 직접 호스팅해서 국내에서 더 빠르게 열려요
  • 휴대폰과 PC 모두 정상적으로 볼 수 있고, 화면이 좁으면 내비게이션 메뉴가 자동으로 접혀요

날짜는 해당 버전의 공개일이에요. 새로운 문제를 발견하면 게시판에 알려 주시거나 서버 관리자에게 직접 연락해 주세요.