사이드 프로젝트

[Linkting] 웹 퍼즐에서 Android 출시 준비까지

mefd 2026. 10. 20. 16:35
728x90
반응형

2026-10-08 웹 미리보기부터 2026-10-15 Android 출시 준비 단계까지 정리한 기록

노트북과 체크리스트
이미지 출처: Unsplash (라이선스 자유 사용)

핵심 요약

  • 하나의 Expo 프로젝트에서 웹과 Android가 같은 퍼즐 규칙과 데이터를 사용하도록 구성했다.
  • 웹 정적 배포에서 시작해 Android 광고 동의, 보상형 힌트, 알림, 이미지 저장과 공유까지 연결했다.
  • 기본 퍼즐은 무료로 유지하고, 수익화는 보상형 광고와 Android 광고 제거 상품부터 검토한다.
  • 현재 코드는 자동 검사까지 통과하지만, 실기기 광고 검증과 Play Store 출시 검수는 남아 있다.
  • 기능 구현과 출시 완료를 구분하기 위해 계획, 체크리스트, 검증 기록을 저장소에 함께 관리한다.

왜 다시 전체를 정리하나

처음 Linkting을 만들 때의 방향은 웹에서 가볍게 시작하고 반응이 있으면 앱으로 확장하는 것이었다. 초기 기획은 이전 글인 [Linkting] 아이디어에서 웹과 앱으로 확장하기에 정리했다. 이후 실제 작업은 웹 배포만으로 끝나지 않았다. Android 프로젝트와 EAS 설정, 광고 동의, 보상형 힌트, 알림, 공유, 스토어 자료까지 한 저장소에 들어왔다.

기능이 늘어나니 “코드가 있다”와 “사용자에게 출시할 수 있다”를 구분할 필요가 생겼다. 그래서 이번 글에서는 개별 오류보다 저장소 전체를 기준으로 현재 구현된 범위, 운영 원칙, 검증 결과와 남은 일을 정리한다.


웹과 Android가 공유하는 중심을 먼저 고정했다

Linkting은 5×5 조각을 돌려 시작점부터 도착점까지 모든 칸을 하나의 길로 연결하는 퍼즐이다. 오늘의 문제, 연습 문제, 지난 기록, 되돌리기와 다시 시작을 제공한다. 날짜는 UTC 기준이라 한국에서는 오전 9시에 다음 문제가 열린다. 로그인과 서버 저장은 두지 않았고 진행 상태와 완료 기록은 기기에 저장한다.

프로젝트 구조는 화면 경로, 퍼즐 도메인, 사용자 기능, 플랫폼 서비스로 나눴다. 퍼즐 생성과 정답 판정은 React나 저장소를 모르도록 두고, 웹과 Android가 같은 로직을 호출한다. 저장·공유·광고처럼 플랫폼 동작이 다른 부분만 .web.ts와 .native.ts로 분리했다. 덕분에 퍼즐 규칙을 고칠 때 두 플랫폼의 코드를 따로 수정하는 일을 줄일 수 있었다.

app/                         화면 경로
src/entities/puzzle/         퍼즐 데이터·판정·보드
src/features/play-puzzle/    플레이 동작
src/shared/lib/services/     저장·공유·광고·분석 어댑터

무료 퍼즐과 수익화의 경계를 정했다

기본 퍼즐은 웹과 Android에서 무료로 제공한다. 앱 설치나 계정 생성을 핵심 퍼즐 이용 조건으로 만들지 않는다. Android에서는 특정 타일을 강조하는 힌트를 제공하고, 무료 사용분 이후에는 보상형 광고를 본 경우에만 추가 힌트를 주는 방향을 정했다. 광고 제거는 Android의 일회성 상품부터 검토하고 웹 결제와 유료 아카이브는 뒤로 미뤘다.

광고 SDK를 붙이는 것보다 먼저 한 일은 동의 흐름을 막는 것이었다. UMP 동의 상태를 확인할 수 없거나 광고 요청이 허용되지 않은 상태에서는 Mobile Ads를 초기화하지 않는다. 테스트 광고도 일반 동의 흐름을 무시하지 않도록 분리했다. Play 심사를 피하려고 결제 화면을 숨겨 두었다가 OTA로 켜는 방식도 사용하지 않기로 했다. 실제 상품과 가격, 정책 문구가 준비된 뒤 앱 화면과 Play Console을 맞추는 것이 기준이다.

구분 현재 방향
기본 퍼즐 웹·Android 모두 무료
힌트 무료 사용분 + Android 보상형 광고
광고 제거 Android 일회성 상품 우선 검토
유료 아카이브 이용 반응과 수익성 확인 후 검토

앱에 필요한 기능은 플랫폼별로 검증했다

Android에서는 Safe Area, 네비게이션 바, 하드웨어 백키를 웹과 별도로 다뤘다. 매일 퍼즐을 다시 열 이유를 만들기 위해 기기 로컬 알림을 추가했고, 결과 이미지는 PNG로 저장하거나 운영체제 공유창으로 보낼 수 있게 했다. 공유 카드에는 웹 주소를 넣되, 오늘의 정답이 바로 노출되지 않도록 기본 카드와 정답 포함 카드를 구분했다.

이미지 저장은 권한만 허용됐다고 끝나지 않았다. 임시 파일 생성, Media Library의 Asset 저장, 저장 결과 확인과 실패 메시지까지 한 흐름으로 검증했다. 이 문제는 [error] Expo에서 이미지 저장이 되지 않던 문제 해결에 따로 기록했다. 앱 아이콘, 스토어 설명, 기능 그래픽, 화면 캡처와 Data Safety 검토안도 저장소에 준비했지만 이것이 Play 심사 통과를 뜻하지는 않는다.


구현 완료와 출시 완료를 문서로 분리했다

작업 범위는 PLAN.md, 출시 조건은 RELEASE_CHECKLIST.md, 운영 방법은 OPERATIONS.md에 나눠 기록했다. Codex와 Claude Code는 같은 계획과 Git 이력을 사용하지만 각 도구의 명령과 스킬은 분리했다. 자세한 흐름은 [Development] Codex와 Claude가 같은 프로젝트를 작업하게 만든 과정에 정리했다.

현재 개발 브랜치에서는 TypeScript 검사와 Vitest 테스트 30개가 통과했다. 웹 빌드, 보안 검사, 브라우저 이동 검사는 별도 명령으로 두었다. 다만 자동 검사 통과만으로 정식 출시라고 쓰지 않는다. 보상형 광고는 Android 실기기에서 최종 확인해야 하고, 광고 제거 상품의 가격과 production 빌드 제출 일정도 아직 확정하지 않았다. Play Console의 Data Safety 답변과 실제 AdMob 설정도 제출 직전에 다시 대조해야 한다.

npm run typecheck
npm test
npm run build
npm run test:e2e

지금 남은 일

가장 먼저 할 일은 Android 실기기에서 동의 전 광고 요청이 없는지, 광고 시청 후 힌트가 정확히 한 번 지급되는지 확인하는 것이다. 이후 광고 제거 상품의 가격과 혜택을 확정하고 결제 복원까지 검증해야 한다. 출시 직전에는 개인정보처리방침, 스토어 설명, Data Safety 답변과 앱의 실제 동작을 다시 맞춘다.

웹은 검색 노출과 실제 이용 흐름을 계속 확인한다. Android production 빌드는 이 검수가 끝나고 최종 승인한 뒤 진행한다. 지금 상태는 웹과 앱의 공통 기반 및 주요 기능 구현, 스토어 자료 준비까지이며 정식 Android 출시 완료 단계는 아니다.


결론 한 줄

Linkting은 웹 미리보기에서 시작해 Android 출시 준비 단계까지 왔지만, 실제 출시 여부는 실기기 광고·결제·스토어 검수를 마친 뒤 판단한다.


※ 본 글의 SDK·광고·스토어 정책과 프로젝트 상태는 2026-10 기준이며, 각 서비스 정책 변경에 따라 달라질 수 있습니다. 특정 서비스에 대한 평가는 이 프로젝트의 운영 조건을 기준으로 한 판단입니다.

※ 이 글의 초안 구조화와 코드·문서 교차 확인에 AI(Codex, Claude Code)를 보조로 활용했습니다. 사실 확인·판단·최종 서술은 필자 책임입니다.

728x90
반응형