앱 일곱 개를 한 도메인에, ntsapp.dev 허브를 만든 방법
마크업이 두 벌 있으면 반드시 어긋납니다. 단일 마크업 소스, 쓰인 글자만 굽는 한글 폰트 서브셋, 내용 해시 파일명까지, 이 사이트 자체를 만든 기술적 결정들을 기록합니다.
만들다 막힌 자리와 고친 과정입니다. 무엇을 만들었다는 자랑보다, 무엇이 조용히 망가져 있었는지를 적습니다.
계획해서 쓰는 글이 아닙니다. 멀쩡해 보이던 것이 어느 날 안 되거나, 제보가 하나 들어오거나, 수치를 재 보니 생각과 전혀 다를 때 한 편이 생깁니다. 그래서 글마다 증상 → 틀린 짐작 → 실제 원인 → 고친 것 순서가 비슷합니다.
앱 단위로 묶여 있으니 한 프로젝트를 처음부터 따라 읽을 수 있습니다. 같은 함정을 다른 프로젝트에서 또 만난 경우가 많아, 글 안에서 서로 연결해 두었습니다.
전체 73편 · 1 / 7페이지
마크업이 두 벌 있으면 반드시 어긋납니다. 단일 마크업 소스, 쓰인 글자만 굽는 한글 폰트 서브셋, 내용 해시 파일명까지, 이 사이트 자체를 만든 기술적 결정들을 기록합니다.
심사에서 거절당했습니다. 저는 신청해도 되는 상태라고 판단했었고, 판단 근거는 분량이었습니다. 페이지를 재 보니 분량은 문제가 아니었고, 얇은 페이지가 어디에 있느냐가 문제였습니다.
게임을 여러 개 만들다 보니 무료로 풀린 에셋과 게임마다 만든 특화 기능이 계속 쌓였습니다. 여우 한 마리를 움직이려고 만든 방식이 사람의 움직임을 만드는 데 그대로 쓰였고, 탐험용 4x4를 만들며 짠 차량 코드는 다른 게임의 지프가 됐습니다. 이렇게 쌓인 것을 클로드 코드의 스킬로 묶어 두면 다음 게임이 더 부드럽고 풍성해진다는 경험을 적었습니다.
매치 시즈는 보드 자체가 전장입니다. 침식이 가장자리부터 칸을 먹어 들어오고, 매치가 그걸 밀어냅니다. 침식 칸을 블록이 아니라 장애물로 정의한 것, 번지기 전에 2.4초를 예고한 것, 이 둘이 게임의 성격을 정했습니다.
규칙은 그대로 두고 그림만 바꿨는데 게임이 달라 보입니다. 귀여움은 색이 아니라 흰 테두리·얼굴·광택·좁은 명도 폭에서 나왔습니다. 보드도 7×7에서 8×8로 넓히고 목표 점수를 다시 잡았습니다.
같은 판이 계속되면 지루해집니다. 매치 시즈에 주기적으로 터지는 사건 네 가지를 넣었습니다. 위협 둘, 기회 둘을 섞어 같은 것이 연달아 나오지 않게 했고, 특수 블록으로 통째로 받아칠 수 있게 설계했습니다.
타이틀 화면, 하트 다섯 개, 닉네임, 서버 순위표, 상태를 따라가는 BGM 세 트랙을 넣었습니다. 하트는 개수와 시각을 같이 저장하면 반드시 어긋나기 때문에 회복 기준 시각 하나만 진실로 두었습니다.
위협 둘과 기회 둘로 시작한 이벤트에 셋을 더 붙였습니다. 선물·컬러밤·중심 침식입니다. 전부 처음부터 나오면 첫 판이 시끄러워서, 판이 오를 때마다 하나씩 열리게 했습니다. 직선 5매치 보상도 폭탄에서 컬러밤으로 바꿨습니다.
하트가 떨어졌을 때 스스로 눌러 보는 보상형 광고 하나만 넣었습니다. 앱이 스스로 띄우지 않고, 실패해도 재시도하지 않습니다. 닉네임 금칙어 필터와 데이터 삭제 안내는 앱이 아니라 서버에 뒀습니다.
매치 시즈를 안드로이드에 올렸습니다. 한글이 전부 깨져 있었고, 20초 안에 두 번 죽었습니다. 둘 다 제 검증 방식이 구조적으로 볼 수 없는 결함이었습니다 — 성공한 화면과 실패한 화면이 똑같이 나오는 검사였습니다.