← 읽을거리

웹게임에 하트 경제를 붙일 때 고민한 것들

제작기 · 2026-09-04

두들게임즈는 설치도 가입도 필요 없는 웹게임이다. 그런데도 각 게임에는 '하트'라는 자원이 있고, 하트가 없으면 새 판을 시작할 수 없다. 처음 이 구조를 넣을지 말지를 두고 팀 안에서 의견이 갈렸다. "가볍게 즐기는 손그림 게임"이라는 정체성과 "자원을 아껴 써야 하는" 제약은 언뜻 상극처럼 보였기 때문이다.

왜 무료 게임에 제한을 두는가

결론부터 말하면 하트를 넣긴 넣었다. 이유는 두 가지였다. 하나는 순수하게 페이스 조절이다. 제한이 전혀 없으면 한 사람이 한 번에 몇 시간이고 눌러댈 수 있는 구조가 되는데, 이건 짧게 짧게 여러 번 즐기도록 설계한 '틈새 시간용 게임'이라는 기획 의도와 맞지 않았다. 다른 하나는 현실적인 이유다. 광고 기반 수익 구조에서는 어느 정도의 자연스러운 끊김이 있어야 광고 노출과 자발적 재방문이 함께 돌아간다. 다만 제한을 지나치게 세게 걸면 애초에 사람들이 발길을 끊는다는 것도 분명했다. 그래서 "얼마나 걸어 잠글까"가 아니라 "어디서, 언제 소모시킬까"를 더 오래 고민했다.

소모 시점을 '탭'이 아니라 '의도'에 맞추기

가장 중요하게 정한 원칙은 하트를 페이지를 여는 순간이 아니라, 실제로 플레이하겠다는 첫 행동에서만 소모시키는 것이다. 실제로 두들타워 코드에는 이런 주석이 남아 있다. "하트는 판의 첫 탭에서 소모(로드/구경만으론 소모 없음)." 즉 게임 페이지에 들어와서 화면을 구경하거나, 랭킹을 보거나, 잠깐 머물다 나가는 행동은 전부 무료다. 하트는 오직 실제로 판을 시작하겠다는 첫 조작이 들어올 때만 깎인다. 이 순서가 사소해 보여도, 페이지에 들어오자마자 자원부터 깎이는 구조와 실제로 플레이하기로 결심한 순간에 깎이는 구조는 체감이 전혀 다르다. 전자는 방문 자체에 비용을 매기는 셈이고, 후자는 소비 의도에만 비용을 매기는 셈이다.

실제 숫자

지금 적용된 값은 최대 10개, 15분마다 자동으로 1개씩 회복, 그리고 광고를 한 편 보면 즉시 1개를 더 받되 하루 최대 8번까지로 제한했다. 코드에도 이 세 숫자가 그대로 상수로 박혀 있다. 최대 보유량 10개, 회복 주기 90만 밀리초(정확히 15분), 광고 보상 일일 한도 8회다. 15분이라는 회복 주기는 "한 게임을 짧게 즐기고 다른 일을 하다가 다시 돌아왔을 때 자연스럽게 1개 정도는 차 있는" 감각을 기준으로 잡았다. 하루 8번이라는 광고 상한은 광고를 무한정 반복 시청하며 하트를 채우는 걸 막기 위한 안전장치다. 이 숫자들은 고정된 진리가 아니라 지금 시점에 정해둔 값이고, 실제 이용 패턴을 보며 계속 조정해 나갈 값이라는 것도 밝혀둔다.

가득 찼을 때는 시계가 다시 시작한다

회복 시스템을 만들 때 놓치기 쉬운 함정이 하나 있다. 하트가 이미 10개로 가득 찬 상태에서 시간이 계속 흐르면, 그동안의 '회복 시간'을 어떻게 처리할지가 애매해진다. 두들게임즈의 처리 방식은 이렇다. 하트가 최대치에 도달한 순간 회복 타이머를 그 시점으로 다시 맞춰버린다. 즉 10개가 가득 찬 채로 세 시간을 내버려 둬도 '밀린 회복분'이 쌓였다가 하트를 하나 쓰자마자 우르르 채워지는 일은 없다. 대신 하트를 하나 써서 9개가 되는 순간부터 다시 15분짜리 회복 타이머가 새로 돈다. 이렇게 하면 두 가지가 동시에 해결된다. 사용자 입장에서는 가득 찬 상태에서 손해 보는 시간이 없고(어차피 더 채울 데가 없으니까), 시스템 입장에서는 오랫동안 안 켠 사람이 다시 켰을 때 회복분이 한꺼번에 몰아서 지급되는 이상한 상황을 막을 수 있다. 사소한 타이머 리셋 한 줄이지만, 이게 없으면 "하루 종일 안 하다가 켜면 하트가 비정상적으로 많이 차 있는" 버그 같은 경험으로 이어질 수 있었다.

유료 옵션은 세 가지, 성격이 다 다르다

급하게 더 하고 싶은 사람을 위한 유료 옵션은 세 가지인데, 성격이 서로 다르다. 첫 번째는 1,100원짜리 '하트 풀 리필'로, 말 그대로 하트를 즉시 10개까지 채워주는 일회성 상품이다. 두 번째는 2,190원짜리 '24시간 무제한'으로, 하트 개수 자체를 채워주는 게 아니라 하루 동안 하트 소모 없이 무제한으로 플레이할 수 있게 해주는 기간제 상품이다. 세 번째는 12,900원짜리 '평생 무제한 + 광고 제거'로, 하트 시스템과 게임 중간 광고를 아예 영구히 없애는 가장 비싼 옵션이다. 세 옵션을 나란히 두면 "얼마나 자주 급하게 더 하고 싶은가"에 따라 자연스럽게 갈리도록 설계돼 있다. 오늘 하루만 몰아서 하고 싶다면 24시간권이 맞고, 지금 당장 몇 판만 더 하고 싶다면 즉시 리필이 맞고, 아예 이 게임을 습관처럼 자주 켠다면 평생권이 맞는 식이다.

로그인 여부에 따라 하트를 계산하는 방식도 다르다

로그인하지 않아도 하트 경제와 게임 자체는 동일하게 작동하지만, 그 뒤에서 계산하는 방식은 다르다. 로그인한 사용자는 서버가 하트 개수의 '권위 있는' 값을 갖고 있어서, 클라이언트는 20초마다 서버에 현재 상태를 물어 화면을 최신으로 맞춘다. 반면 로그인하지 않은 게스트는 서버에 저장할 계정이 없으니, 브라우저의 로컬 저장소에 마지막으로 하트를 쓴 시각을 저장해두고, 그 시각으로부터 몇 분이 지났는지를 계산해서 몇 개가 회복됐는지 그때그때 스스로 계산한다. 두 방식 모두 사용자에게 보이는 결과("하트가 몇 개 있고, 다음 회복까지 몇 초 남았다")는 똑같이 나오도록 맞춰져 있다. 로그인은 순전히 기록을 저장하고 랭킹에 이름을 남기기 위한 선택 사항일 뿐, 하트 계산 방식이 다르다고 해서 게스트가 불리해지는 부분은 없다. 다만 게스트로 남아 있는 한 이 저장 위치는 브라우저 하나에 묶여 있다는 한계는 분명히 있다. 브라우저 저장 공간을 지우거나 다른 기기·다른 브라우저로 접속하면 하트 상태는 이어지지 않고 기본값(10개 가득)으로 다시 시작된다. 이건 버그가 아니라 게스트 모드의 자연스러운 한계이고, 기기를 넘나들며 같은 하트 상태를 유지하고 싶다면 로그인이 필요하다는 것도 이런 이유에서다.

로그인하지 않아도 게임은 그대로다

한 가지는 분명히 해두고 싶다. 하트는 판을 시작하는 데만 관여할 뿐, 로그인 여부와는 무관하다. 로그인하지 않아도 하트 경제와 게임 자체는 동일하게 작동하고, 로그인은 순전히 기록을 저장하고 랭킹에 이름을 남기기 위한 선택 사항이다. 두 가지를 하나로 묶어 "로그인해야 더 준다"는 식으로 유도하지 않은 것도 의도적인 설계 원칙이다.

리미키미 · 대표 최지훈 · 사업자등록번호 247-01-03603
통신판매업신고 2026-고양일산동-0326 · 경기 고양시 일산동구
enquiry@rimikimi.com · 050-6988-2464
두들게임즈 · 읽을거리 · 게임 가이드 · 이용약관 · 환불정책 · 개인정보처리방침