보이지 않는 수호자 — 그리고 드디어 이유를 설명해 주는 차단 👁️
얼마 전 저희는 설계부터 아이 친화적으로라는 글에서 신고, 피드백, 그리고 지켜보는 눈에 대해 썼어요. 솔직히 지켜보는 눈이 그중 가장 약한 부분이었어요. 신고를 받을 수는 있었지만, 월드에서 실제로 무슨 일이 벌어지는지는 거의 들여다볼 수 없었어요. 그래서 그 부분을 손봤어요. 두 가지 구성 요소로요. 감독을 위한 관찰자 모드와, 영향을 받는 플레이어에게 드디어 상황을 알려 주는 완전히 새로워진 차단 시스템이에요.
관찰자 모드. 신고가 들어오면(“누가 이상한 걸 짓고 있어요”, “누가 못된 말을 써요”) 이제 월드를 방해하지 않고 들어가 볼 수 있어요. 정말로 보이지 않아요. 수정된 게임이 그냥 무시할 수 있는 “저를 그리지 마세요” 방식이 아니에요. 서버가 관찰자의 존재를 다른 누구에게도 아예 알리지 않아요. 아바타도, 주차된 우주선도, 차지한 착륙장도, 하강 애니메이션도, 반려동물도, 스피더도, 차지한 플레이어 자리도, 바뀌는 플레이어 수도 없어요. 그 월드의 모두에게는 말 그대로 아무도 없어요. 비행은 벽을 통과하고(그러지 않으면 막힌 기지 안에 절대 들어갈 수 없으니까요), 생물은 관찰자를 무시하고, 어차피 사격은 할 수 없어요.
지켜본다는 건 지켜보기만 한다는 뜻이에요. 관찰자는 월드의 어떤 것도 건드릴 수 없어요. 딱 한 가지 예외는 블록을 캘 수 있다는 거예요. 불쾌한 건축물을 월드에서 실제로 없앨 수 있는 유일한 수단이고, 지운 것은 하나하나 모두 기록돼요. 채팅에서 관찰자는 음소거 상태이고, 일부러 모습을 드러내려면 별도의 명령이 필요해요. 그리고 화면에는 SPECTATOR 배지가 계속 떠 있어요. 평소처럼 플레이하고 있다고 착각하는 일이 절대 없어야 하니까요.
왜 이렇게 엄격하게 만들었을까요. 밖에서는 보이지 않지만 저희에게 중요했던 결정이 두 가지 있어요. 첫째, 관찰자 역할은 저장 파일에 저장되지 않고 입장할 때마다 서버 설정에서 다시 계산돼요. 저장 파일은 내려받아 다른 곳에 다시 올릴 수 있어요. 저장된 감독자 역할이 있다면 그것도 함께 저희가 소유하지 않은 기기로 가 버릴 거예요. 둘째, 이건 월드 옵션이 아니에요. 월드의 주인이 자기 월드에 대한 감독을 끌 수 있어서는 안 돼요. 그래서 월드가 기본적으로 꺼 두는 “관리자 치트” 설정에도 연결하지 않았어요.
어디서 무슨 일이 있었는지 찾기. 이를 위한 새 명령어가 있어요. /players는 누가 접속해 있는지, 그리고 이 월드에서 한 번이라도 플레이한 모든 사람을 보여 줘요. /builds는 누군가 어디에 지었는지 보여 줘요. /where는 플레이어가 있는 곳으로 안내해 줘요. /goto는 행성을 넘어서도 점프해요(예전 텔레포트는 좌표만 설정해서 엉뚱한 행성에 떨어뜨렸어요 🙈). 게다가 관리자 패널의 개요 페이지는 월드 저장 파일에서 바로 읽어서 플레이어, 구조물, “건축 핫스팟”을 보여 줘요. 기지 코어도 없이 외딴 곳에 덩그러니 세워 둔 집도 이렇게 찾아요. 그리고 바뀐 모든 칸은 이제 누가 마지막으로 건드렸는지, 언제였는지를 기억해요. 넣기 전에 저장 공간 비용을 재 봤어요. 어차피 저장이 칸 단위라서 데이터베이스에 추가되는 행이 하나도 없어요.
비공개 월드에서도 — 이중 잠금 뒤에서. 첫 버전에는 터무니없는 구멍이 있었어요. 보이지 않는 관찰자가 공개된 비밀번호 없는 월드에만 들어갈 수 있었는데, 그런 곳이 바로 가장 일이 적게 벌어지는 곳이에요. 아이들은 거의 항상 비밀번호가 친구들 사이에서 돌고 도는 비공개 월드에서 플레이하죠. 그래서 이제 감독이 거기까지 닿아요. 뒷문이 되지 않도록 접근은 이중으로 잠겨 있어요. 비밀 코드를 제시해야만 만들 수 있는 운영자 계정, 그리고 이를 위한 전용 플레이어 이름이 둘 다 필요해요. 이 이름은 시스템 전체에서 예약돼 있어서 다른 누구도 등록하거나 그 이름으로 플레이할 수 없어요. 둘 중 하나라도 없으면 아무 일도 일어나지 않아요.
그리고 차단 이야기예요. 예전에는 이 부분을 정말 엉망으로 다뤘어요. 차단된 계정도 로그인은 아무 문제 없이 되었고, 월드에 들어갈 때에야 벽이 나타났어요. 이유도, 날짜도, 문의할 방법도 없이요. 플레이어 입장에서는 게임이 그냥 고장 난 것이었어요. 이제는 로그인 자체가 상태를 알려 주고, 메시지 받은편지함도 있어요. “월드가 삭제되었습니다(이유)”, “차단이 해제되었습니다” 같은 메시지요. 이 메시지는 일이 일어나는 순간에 기록돼요. 나중에는 그 정보가 더 이상 없으니까요. 삭제된 월드는 말 그대로 사라지잖아요.
추방이 아니라 타임아웃. 차단은 이제 주로 기간이 정해진 임시 차단이고, 기본값은 사흘이에요. 만료된 타임아웃은 모든 확인 지점에서 “차단되지 않음”으로 처리되어서, “사흘 쉬기”가 어느새 영구 배제로 바뀌는 일이 절대 없어요. 그래도 기록은 이력으로 남아요. 이유는 정해진 범주(채팅, 건축물 훼손, 부정행위, 이름, 기타)로 오고, 독일어와 영어로 번역되어 표시돼요. 사람이 뭔가를 덧붙이면 입력한 그대로 표시돼요. 전체에서 가장 중요한 점은, 메시지가 다시 환영받는 날짜를 알려 줄 수 있다는 거예요.
이제 월드 주인이 자기 월드를 직접 관리할 수 있어요. 월드를 가지고 있다면 여러분의 월드에 대해 같은 수단을 갖게 돼요. 저희 것만큼 확실하게 적용되는 나만의 차단 목록이에요. 이 목록은 계정(그래서 이름을 바꿔도 소용없어요) 그리고 게임 속 이름(오락실 게스트에게는 계정이 아예 없으니까요)을 함께 기억해요. 월드를 실제로 방문한 사람 목록에서 고르면 돼요. 이름을 손으로 입력하다 보면 엉뚱한 아이를 막게 되기 쉬우니까요. 그리고 차단은 다음 입장만 결정하기 때문에 내보내기도 있어요. 플레이어는 즉시 메뉴로 돌아가고, 자기 언어로 이유를 보게 돼요. 메시지는 연결이 닫히기 전에 전달돼서, 수정된 게임이 그냥 무시하고 계속 플레이할 수 없어요.
일부러 만들지 않은 것. 차단 우회에 맞서는 뻔한 방법은 기기 인식(“새 계정, 같은 PC”)일 거예요. 저희는 세 가지 이유로 접었어요. USB 메모리를 꽂거나 Windows가 큰 업데이트를 하면 식별자가 바뀌어요. 수정된 게임은 5분이면 속일 수 있어요. 똑같은 이미지로 설치된 학교 컴퓨터는 전부 같아 보여요. 거기에 법적인 문제도 있어요. 독일 법에 따르면 기기 식별자를 읽으려면 동의가 필요한데, 16세 미만은 유효하게 동의할 수 없어요. 감독이 감시로 바뀌어서는 안 돼요. 그리고 코드에 적힌 규칙이 하나 더 있어요. 운영자 계정 자체는 차단도 추방도 할 수 없어요. 그러지 않으면 안쪽에서 감독을 끌 수 있으니까요.
이 모든 것은 이미 코드에 들어 있고 다음 서버 업데이트와 함께 적용돼요. 이걸 쓸 일이 되도록 적기를 진심으로 바라요. 🌟
댓글