CastleSurvive는 HTML/CSS/JavaScript 기반의 웹게임으로, 처음에는 대부분의 기능이 클라이언트에서 처리되는 구조로 출발했습니다. 빠른 테스트와 간단한 배포에는 유리했지만, 코드가 그대로 노출되기 때문에 구조적으로 보안에 취약할 수밖에 없는 문제가 있었습니다. 특히 랭킹 시스템처럼 민감한 데이터는 누군가 개발자 도구만 열어도 조작이 가능했기에, 이번에 본격적인 개선 작업에 착수했습니다.
🔐 클라이언트 코드, 이제는 외부에서 보기 어렵게
이번 작업의 핵심 중 하나는 클라이언트 코드에 대한 난독화 처리입니다. 중요한 로직이 그대로 노출되지 않도록, 전체 코드에 대해 난독화를 적용했습니다. 변수명, 함수명, 구조 자체를 외부에서 파악하기 어렵도록 변환한 상태이며, 실 배포 시에는 이 난독화된 파일만 제공됩니다.
테스트를 위한 경우에는 원본 파일을 <script>로 잠시 삽입해 기능 확인을 하고 있지만, 최종 배포 시에는 코드가 그대로 보이지 않도록 관리하고 있습니다. 이렇게 기본적인 방어막을 먼저 마련한 후, 핵심 기능을 서버로 옮기는 작업을 병행했습니다.
🧾 랭킹 등록 로직, 서버에서 처리
기존에는 점수 계산과 등록이 모두 클라이언트에서 처리되었습니다. 하지만 이 구조는 쉽게 조작이 가능하기 때문에, 랭킹 등록 관련 로직을 Firebase Functions를 이용해 서버에서 처리하도록 이전했습니다.
이제는 플레이어가 게임을 마친 뒤 점수와 닉네임만 서버에 전달하고, 실제 점수 유효성 검증 및 데이터베이스 저장은 서버 측에서 단독으로 진행됩니다. 클라이언트 측에서 점수를 조작하거나 비정상적인 데이터를 보내더라도 서버에서 차단되기 때문에, 랭킹 시스템의 신뢰도가 한층 높아졌습니다.
📢 광고 출력 문제와 테스트
현재 광고와 관련된 코드에서 "광고"라는 텍스트만 출력되고 실제 광고가 뜨지 않는 현상이 있었습니다. 이 문제는 실제 배포 환경에서는 광고 SDK 로딩 문제로 인해 해결될 가능성이 높지만, 그 전까지는 테스트용 광고 단위를 삽입하여 반복 검증 중입니다.
또한, 광고 전략 역시 개편하고 있습니다. 단순히 종료 후 광고 1회 출력이 아닌, 상단/하단/양 사이드 배너 광고와 게임 종료 시 전면 광고를 결합하여 수익화 구조를 다양화할 예정입니다. 플레이 도중 몰입을 방해하지 않으면서, 종료 후 자연스럽게 광고를 노출하는 흐름을 만들고자 합니다.
📌 정리하며
이번 업데이트는 겉으로는 크게 달라진 것이 없어 보이지만, 내부적으로는 CastleSurvive의 안정성과 보안성을 높이기 위한 중요한 작업이었습니다. 클라이언트에서 모든 걸 처리하던 구조에서 벗어나, 점차 서버 기반 로직 중심의 게임 구조로 발전해가고 있는 중입니다.
'개발일기 > 웹게임_Castlesurviver' 카테고리의 다른 글
[업데이트] CastleSurvive의 랭킹 시스템, 단순함 속의 긴장감 (0) | 2025.05.17 |
---|---|
👑 CastleSurviver[Beta] – 당신의 생존 본능을 깨워라! (0) | 2025.05.17 |
[정보]_웹 게임을 안드로이드 앱으로 변환하는 방법 (0) | 2025.05.06 |
[업데이트]_ 터치 조이스틱 및 WASD 키 입력 기능 추가 (1) | 2025.05.06 |
[업데이트]_거대 파이어볼 기능 추가 및 충돌 시스템 개선 (0) | 2025.05.04 |