로블록스 타이머 앱 2탄 - 배포, 설치 완성기 : 탈출구를 원천 봉쇄하기까지의 여정^^

📝 한줄 요약

1편에서 하루 만에 만든 로블록스 타이머 앱, 이번엔 아이가 시도할 모든 탈출 경로를 미리 예측해 막고 실제 배포 및 설치까지 완성했다.

바쁘시면 이것만 읽어도 돼요:

  • 앱을 만드는 것과 '진짜 쓸 수 있는 앱'을 만드는 건 다른 문제였다

  • 아이가 시도할 행동(종료, 재부팅, 삭제 등)을 미리 예측해 하나씩 막았다

  • "로블록스를 안 켜면 타이머가 시작 안 되겠지" → 자동 감지로 차단

  • "컴퓨터 껐다 켜면 타이머 리셋되겠지" → 재부팅 후 자동 복원으로 차단

  • "작업 관리자로 끄면 되지" → 종료 방지 + 워치독으로 차단

  • "그냥 앱 삭제해버리면 되지" → 언인스톨러 PIN 잠금으로 차단

  • 이 모든 걸 Claude Code와 대화하며 하나씩 구현했다

🎯 이런 분들께 도움돼요

  • 1편을 읽고 "배포까지 어떻게 됐어요?" 궁금하셨던 분

  • 자녀 보호 앱을 직접 만들어보고 싶은 부모

  • "완성했는데 실제로 쓰니까 문제가 생겼다"는 경험을 하신 분

  • AI와 함께 점점 더 단단한 결과물을 만들어가는 과정이 궁금한 분

🔗 이전 글

1편: Claude Code로 하루 만에 로블록스 타이머 앱 만들기


😫 "만들었다"와 "쓸 수 있다"는 다른 말이었다

1편에서 저는 하루 만에 로블록스 타이머 앱을 완성했다고 했습니다. 그리고 마지막에 이렇게 썼죠.

"아직 아들 PC에 배포 전입니다. 이제 말 대신 앱이 규칙을 집행합니다."

배포 전이었습니다. 기능은 돌아갔지만, 진짜 환경 — 아이가 실제로 쓰는 PC, 아이의 계정, 아이가 시도할 행동들 — 을 아직 통과하지 못한 상태였습니다.

배포를 준비하면서 저는 한 가지를 먼저 생각했습니다. 이 앱을 처음 본 아이는 어떻게 행동할까?

제 예측은 이랬습니다. 앱이 설치되고 타이머가 켜지는 순간부터, 아이는 이걸 끄거나 무력화할 방법을 찾기 시작할 것이다. 처음엔 당연한 방법부터 시도하겠지. X 버튼, 트레이 아이콘 우클릭, 작업 관리자. 그게 안 되면? 설정 바꾸기, 컴퓨터 재부팅, 앱 삭제.

원래 시간 규칙은 이미 합의된 상태라 반발은 없을 거라 생각했습니다. 하지만 아이들은 규칙을 어기려는 게 아니어도 "이게 어떻게 작동하는지" 테스트해보는 걸 본능적으로 합니다. 그리고 그 테스트에서 허점이 발견되면, 그게 탈출구가 됩니다.

그래서 배포 전에 탈출구를 전부 막기로 했습니다.

🛠️ 사용한 도구

  • 도구: Claude Code

  • 모델: Claude Sonnet

  • 결과물: Windows 11 설치 파일 (.exe NSIS 인스톨러)

  • 배포: GitHub Releases v0.3.1


🔧 탈출구를 하나씩 막는 여정

탈출구 1 — "X 버튼 누르면 되지?"

가장 먼저 막아야 할 경로였습니다. 창의 X 버튼을 누르거나 Alt+F4를 누르면 앱이 꺼지면 안 됩니다.

아이가 작업 표시줄에서 앱을 찾아 종료하는 경로 차단해줘

Claude Code가 구현한 방식은 간단하지만 확실했습니다. X 버튼을 눌러도 앱이 종료되지 않고 시스템 트레이로 숨어버리게 만들었습니다. 작업 표시줄에도 아예 아이콘이 보이지 않습니다. 트레이 아이콘을 우클릭해도 종료 버튼이 없습니다.

앱이 떠 있다는 걸 알지만, 끄는 버튼 자체가 없습니다.


탈출구 2 — "로블록스 안 켜면 타이머가 시작 안 되겠지?"

여기서 저는 아이의 관점에서 생각했습니다. 타이머가 앱에서 '시작' 버튼을 눌러야 켜진다면? 아이가 그냥 버튼을 안 누르면 그만입니다.

더 나아가서 — 아이가 앱 창을 아예 안 열고 로블록스만 몰래 켜면?

로블록스가 실행되면 타이머 앱을 직접 실행하지 않아도 타이머가 자동으로 작동하게 해줘. 아이가 앱을 숨기더라도.

3초마다 컴퓨터에서 돌아가는 프로그램 목록을 확인해서, 로블록스가 켜지는 순간 자동으로 타이머를 시작하도록 만들었습니다. 아이가 앱 창을 열든 열지 않든 관계없이, 로블록스를 켜는 순간 타이머가 시작됩니다.

그리고 한 가지 더 — 허용된 시간대(오후 4시~10시)가 아닐 때 로블록스를 켜면, 타이머도 시작하지 않고 로블록스를 즉시 강제 종료합니다.


탈출구 3 — "컴퓨터 껐다 켜면 타이머가 리셋되겠지?"

이걸 생각한 순간 "아 이거 진짜 막아야 한다"고 느꼈습니다.

40분 쓰고 타이머 20분 남았는데, 컴퓨터를 그냥 껐다 켜면? 타이머가 처음부터 다시 시작된다면, 재부팅이 사실상의 초기화 버튼이 됩니다.

아이가 타이머를 피하기 위해 컴퓨터를 강제 재시작하는 상황을 방지해줘

타이머가 시작될 때 시작 시각과 제한 시간을 파일에 저장하도록 만들었습니다. 컴퓨터를 껐다 켜도, 앱이 다시 실행되면 파일을 읽어서 "아직 오늘 남은 시간이 있다"는 걸 확인하고 남은 시간부터 이어서 시작합니다. 자정이 넘어서 날짜가 바뀌면 그때는 자동으로 초기화됩니다.


탈출구 4 — "설정에서 허용 시간 늘리면 되지?"

설정 화면에서 허용 시간을 30분에서 3시간으로 바꿔버리면? 타이머가 무의미해집니다.

모든 관리자 기능을 비밀번호로 잠가줘. 부모만 트레이 아이콘을 1.5초 안에 3번 클릭하면 PIN 입력 창이 열리게 해줘

관리자 PIN 패널을 숨겨두었습니다. 트레이 아이콘을 1.5초 안에 3번 연속 클릭해야만 PIN 입력 창이 열리고, 맞는 PIN을 입력한 사람만 설정을 바꾸거나 타이머를 조정할 수 있습니다. 초기 PIN은 0000이고, 부모가 원하는 번호로 바꿀 수 있습니다. 5번 틀리면 30초 잠금.

이제 설정 화면은 PIN을 아는 사람만 접근할 수 있습니다.


탈출구 5 — "작업 관리자로 프로세스 끄면 끝이잖아?"

Ctrl+Shift+Esc. 윈도우 작업 관리자를 열고 앱 프로세스를 찾아서 '작업 끝내기'를 누르면?

이게 실제로 작동했습니다. 배포 직후 테스트에서 작업 관리자로 프로세스를 종료하면 앱이 꺼졌습니다. 이건 반드시 막아야 했습니다.

작업관리자에서 앱 강제 종료 못하는거 맞아? 앱 삭제도 임의로 못하도록도 추가 패치해줘

Windows에는 '예약된 작업'이라는 기능이 있습니다. 설치할 때 이 기능을 이용해서 앱을 등록하면, 표준 사용자 계정(아이 계정)에서는 이 프로세스를 작업 관리자로 종료할 수 없게 만들 수 있습니다. 관리자 계정은 가능하지만, 아이가 쓰는 표준 계정은 막힙니다.

추가로 '워치독'도 만들었습니다. 혹시라도 앱이 꺼지면, 30초 안에 자동으로 다시 켜지는 감시 프로그램입니다. 이 워치독도 동일한 방식으로 보호되어 있습니다.

잠깐 — 앱 이름도 바꿨습니다

이 과정에서 한 가지 문제를 발견했습니다. 작업 관리자에 프로세스 이름이 `나의 약속.exe`로 떡하니 표시됐습니다. 바로 찾아서 끄기 너무 쉬운 이름이었습니다.

앱 이름을.."나의 약속"이라고 되어있는거 고쳐! My Pact for My future 라고 했잖아.

프로세스 이름을 `My Pact.exe`로 변경했습니다.


탈출구 6 — "그냥 앱 삭제해버리면 되지?"

제어판 → 앱 추가/제거 → 삭제. 가장 극단적인 방법이지만, 충분히 시도할 수 있는 경로입니다.

앱이 삭제되어버리면 모든 게 무의미해집니다.

앱 삭제도 임의로 못하도록도 추가 패치해줘

Windows 설치 파일(인스톨러)을 커스터마이징해서, 삭제를 시작하기 전에 반드시 PIN을 입력하도록 만들었습니다. 관리자 패널의 PIN과 동일한 번호입니다. PIN이 틀리거나 취소하면 파일 삭제 자체가 진행되지 않습니다.

부모가 앱 설정에서 PIN을 바꾸면, 삭제 시 요구하는 PIN도 자동으로 같이 바뀝니다.


탈출구 7 — "게임 껐다 켜면 타이머가 리셋되겠지?"

이건 배포 후에 발견한 버그였습니다. 예상하지 못했던 문제였습니다.

게임을 시작한 지 10분 만에 종료하고 나중에 다시 실행하면, 타이머가 이전 시간을 유지하지 못하고 다시 60분으로 돌아가고 있습니다.

로블록스를 끄면 타이머도 함께 종료되는데, 다시 로블록스를 켜면 새 타이머가 처음부터 시작됐습니다. 10분 쓰고 게임 끄고, 1시간 후 다시 켜면? 처음부터 60분. 이게 의도한 동작이 아니었습니다.

타이머가 일시정지 상태가 되어야 했습니다. 로블록스를 끄는 순간 남은 시간을 파일에 저장하고, 다시 로블록스를 켜는 순간 그 시간부터 이어서 시작하도록 수정했습니다.

이제는 10분 플레이하고 로블록스를 끄면, 다음에 다시 켤 때 50분부터 시작합니다. 오늘 허용된 게임 시간은 로블록스가 실제로 실행된 시간만 카운트됩니다.


마무리 — 부팅 시 메인 화면이 떠버렸다

컴퓨터를 부팅하면 앱이 화면 가운데 뜨지 않고, 시스템 트레이에 숨어 있도록 수정해 주세요.
게임이 시작되면 즉시 타이머가 실행되도록.

배포 초기에 컴퓨터를 켤 때마다 앱 메인 화면이 화면 가운데 큼직하게 떴습니다. 게임을 안 하고 있는데 타이머 앱이 뜨면 불편하기도 하고, 불필요하게 존재감을 드러내는 것이었습니다.

지금은 부팅해도 아무 창이 뜨지 않습니다. 앱은 트레이에 조용히 숨어서 로블록스가 켜질 때만 우측 상단에 작은 타이머로... 나타납니다.


✅ 결과 (After)

최종 앱 화면

대기 화면

설정 화면

로블록스
로블록스 코리아 - 스크린샷 1

초록 (5분 초과)

노랑 (5분 이하)

주황 (3분 이하)

빨강 (1분 이하)

흰색 배경에 녹색 알람 시계
흰색 배경에 노란색 디스플레이가 있는 디지털 시계
흰색 배경에 주황색 숫자가 있는 디지털 시계
흰색 배경에 빨간색 디지털 시계가 표시됩니다.

경고 팝업 (5분 전)

최종 카운트다운

한국 시간시계 - 스크린샷
흰색 배경에 빨간색 디지털 시계

Before vs After

항목

Before (1편 이후)

After (현재)

앱 종료

X버튼으로 가능

종료 버튼 자체 없음

타이머 시작

직접 버튼 클릭 필요

로블록스 켜는 순간 자동 시작

재부팅 회피

재부팅 시 타이머 리셋

재부팅 후 남은 시간 복원

설정 변경

누구나 가능

부모 PIN 없이 접근 불가

작업 관리자 종료

가능

표준 계정에서 불가

앱 삭제

자유롭게 가능

PIN 없이 삭제 불가

게임 껐다 켜기

타이머 리셋

남은 시간 이어서 진행

부팅 시 화면

메인 화면 노출

트레이 상주 (화면 안 뜸)

현재 상태

GitHub Releases에 설치 파일 배포 완료. 아들 PC에 설치 및 작동 확인. 현재 문제없이 잘 작동 중.

Github 배포, 오픈 링크

https://github.com/toughCSB/roblox-playtime-guardian


💬 이 과정에서 배운 AI 활용 팁

효과적이었던 것

  • "아이라면 어떻게 행동할까?"를 먼저 생각하고 구현했다 기능을 순서대로 만드는 게 아니라, 사용 환경에서 발생할 수 있는 문제를 먼저 나열하고 하나씩 막아갔습니다. Claude Code에게 "이 앱을 쓰는 아이가 시도할 수 있는 탈출 방법을 나열해줘"라고 물어보는 것만으로도 체크리스트가 만들어졌습니다.

  • 버그를 발견하면 상황을 그대로 전달했다 "게임 껐다 켜면 타이머가 리셋됩니다"처럼 증상을 직접 말했습니다. 원인 분석이나 해결 방법을 미리 생각하지 않아도, 현상을 정확히 전달하면 Claude Code가 원인부터 찾아줬습니다.

  • 배포 후에도 계속 개선할 수 있다는 걸 알았다 처음에 완벽하게 만들려다 지치는 것보다, 일단 배포하고 실제 사용하면서 발견되는 문제를 하나씩 고쳐가는 방식이 훨씬 효율적이었습니다. 배포 후에 발견된 버그(게임 종료 시 타이머 리셋)가 오히려 핵심 기능 개선으로 이어졌습니다.

이렇게 하면 안 돼요

  • "다 됐겠지" 하고 넘어가지 말 것 만들었을 때는 잘 됐지만 실제 환경에서 터진 게 여러 개였습니다. "자녀의 표준 계정에서 자동 시작이 됩니까?" 같은 구체적인 환경 조건을 직접 테스트해봐야 합니다.

  • 에러 메시지를 버리지 말 것 빌드 중에 이상한 에러 메시지가 나왔을 때, 처음엔 그냥 다시 시도했습니다. 에러 메시지를 Claude Code에 그대로 복붙하면 대부분 바로 원인과 해결책을 알려줬습니다.


🌍 다른 업무에 적용한다면?

이번 작업에서 핵심은 "사용자가 이 도구를 어떻게 회피할지 미리 생각하고 막는다"는 접근이었습니다. 이건 자녀 보호 앱에만 해당하는 게 아닙니다.

  • 출퇴근 기록 시스템: 직원이 어떻게 빠져나갈지 생각하고 설계

  • 자동화된 보고서 도구: 누가 어떤 예외 케이스를 만들어낼지 미리 대비

  • 사내 접근 권한 도구: 권한이 없는 사람이 어떤 경로로 접근을 시도할지 시뮬레이션

"내 도구를 쓰는 사람이 이걸 어떻게 우회할까?"를 먼저 물어보는 습관이 생겼습니다.


🚀 앞으로의 계획

Phase 1이 완성됐습니다. 다음은 Phase 2입니다.

  • 웹 대시보드 연동 — Electron 앱에서 기록한 게임 시간을 웹 대시보드에서 주간/월간 그래프로 확인

  • 요일별 개별 설정 — 평일과 주말 외에, 방학이나 학원 없는 날 등 예외 설정

  • 부모 알림 — 아이가 로블록스를 켰을 때 부모에게 알림 전송 또는 모바일 승인까지 구현?


📋 재사용 가능한 프롬프트

프롬프트 1: 탈출 경로 체크리스트 뽑기

내가 만든 [도구/앱/시스템]을 사용하는 사람이 의도를 벗어나서 사용하거나 규칙을 우회하려 할 때 시도할 수 있는 모든 방법을 나열해줘.

그 중에서 실제로 막을 수 있는 방법과 막기 어려운 방법을 구분해줘.

프롬프트 2: 버그 원인 추적

[어떤 상황]에서 [어떤 증상]이 발생합니다.

이 증상의 원인을 분석하고, 어떻게 고쳐야 하는지 알려줘.

코드 수정 전에 원인 설명을 먼저 해줘.

프롬프트 3: 실제 사용 환경 점검

이 앱이 [실제 환경 조건 — 특정 계정 권한, 특정 OS 버전, 특정 상황]에서 정상 작동하는지 확인해줘.

문제가 있다면 그 원인과 해결책을 알려줘.

1
1개의 답글

뉴스레터 무료 구독