
로블록스 게임에서 옵션 기능 하나가 서버 전체를 죽인 일
아이와 같이 할 게임을 만들어보자며 시작한 로블록스 프로젝트가 있습니다. 몬스터를 피해 10층 타워를 올라가는 게임인데, 만들다 보니 게임패스 결제까지 붙여서 실제로 서비스 중이에요.
이틀 동안 19개 커밋을 밀어넣었는데, 그중 제일 뼈아팠던 버그 하나를 적어봅니다.

1. 증상: 게임이 아예 안 켜졌습니다
랭킹 보드를 붙이려고 DataStore(로블록스의 데이터 저장 기능)를 연결한 뒤였습니다. 스튜디오에서 테스트하는데 서버가 통째로 죽었어요. 기록이 저장 안 되는 정도가 아니라 게임 자체가 시작이 안 됐습니다.
원인은 허무했습니다. 스튜디오 설정에 **“Studio API 서비스 접근 허용”**이라는 옵션이 있는데, 이게 꺼져 있으면 DataStore 호출이 예외를 던집니다. 그런데 제 코드는 그 예외를 아무도 안 잡고 있었어요.
2. 진짜 문제는 “선택 기능이 필수처럼 짜여 있던 것”
여기서 배운 게 있습니다. 기록 저장은 없어도 되는 기능입니다. 저장이 안 되면 아쉽긴 해도 게임은 돌아가야 정상이죠.
그런데 코드 구조상 초기화 과정에서 DataStore를 부르고 있었고, 거기서 예외가 나니 그 뒤 코드가 전부 실행되지 않았습니다. 곁다리 기능 하나가 핵심 경로를 붙잡고 있었던 거예요.
수정은 간단했습니다. DataStore 호출을 pcall로 감싸고, 실패하면 경고만 남기고 게임은 그대로 진행하도록 했습니다. 이 경험 이후로는 **“이 기능이 죽으면 게임도 죽나?”**를 습관적으로 확인하게 됐어요.
3. 순위표를 붙이면 치트도 따라옵니다
기록 저장과 랭킹 보드를 붙인 그날, 같은 커밋에 치트 대응도 들어갔습니다. 순서가 그럴 수밖에 없더라고요. 순위표가 생기는 순간 순위를 조작할 이유가 생기니까요.
혼자 하는 게임일 땐 신경 쓸 필요가 없던 문제가, 경쟁 요소를 넣자마자 튀어나왔습니다.
4. 플레이 테스트가 바꾼 것들
커밋 기록을 보면 설계보다 관찰이 바꾼 것이 훨씬 많습니다.
- 5층 → 10층 → 무한 모드: 재밌어하니까 계속 늘렸습니다
- 리스폰 즉사 버그 수정 / 체크포인트 안전지대: 부활하자마자 몬스터에게 잡혀 죽는 문제. 체크포인트 반경엔 몬스터가 못 들어오게 막았습니다
- 바닥 패드 → 눈에 띄는 초록 포털 문: 놀이터에서 타워로 돌아가는 길을 아무도 못 찾았어요. 기능은 멀쩡했는데 안 보이는 게 문제였습니다
세 번째가 특히 기억에 남습니다. 만든 사람은 어디 있는지 아니까 절대 못 발견해요.
💡 로블록스 개발 팁 & 주의할 점
- 팁: 몬스터를 여러 종류 만들 때 속도만 다르게 하면 재미가 없습니다. 저는 추격 몬스터 하나를 점프로 넘을 수 없을 만큼 크게 만들었는데, 이게 훨씬 나았어요. “빠른 적”은 더 빨리 달리면 되지만 “넘을 수 없는 적”은 다른 전략을 요구하거든요.
- 주의할 점: DataStore를 붙일 땐 반드시
pcall로 감싸세요. 스튜디오 API 설정 말고도 로블록스 서버 장애, 요청 한도 초과 등 실패 경로가 여럿입니다. 저장 실패가 게임 종료로 이어지면 안 됩니다.
정리
가장 큰 교훈은 “있으면 좋은 기능”이 죽었을 때 무슨 일이 벌어지는지 확인해야 한다는 거였어요.
저는 저장 기능이 조용히 실패할 거라고 막연히 생각했습니다. 실제로는 게임 자체가 안 켜졌고요.
태그: #로블록스, #Roblox, #Luau, #게임개발, #DataStore, #Rojo, #인디게임, #클로드코드, #게임패스, #장애대응