실무
PLEY — 아동 행동패턴 연구 앱 재설계
클라이언트(앱)에 종속돼 실패하던 웨어러블 토큰 갱신 처리를 서버사이드 스케줄러로 이관해, 오프라인·저전력 환경에서 무너지던 데이터 수집 성공률을 0%에서 90%이상으로 끌어올려 연구 실험 자체를 성립시켰습니다
Overview
아동의 올바른 스마트폰 사용을 유도하기 위한 행동패턴 연구용 모바일 앱 PLEY의 백엔드·안드로이드 개선을 담당했습니다. 국내 대학 소속 아동 연구팀과 협업해 진행한 연구용 앱으로, 전임 담당자가 개인 사정으로 중도 하차하며 인수인계 없이 넘겨받았습니다. 코드베이스 구조 분석부터 시작해 겉으로는 유지보수처럼 보였지만, 실제로는 '특정 기능을 어느 계층에 배치했는가'라는 시스템 아키텍처 자체의 문제를 안고 있었습니다.
System Architecture
Constraints
- 진행 중인 연구의 기존 데이터 스키마와 토큰 관리 RDB(PostgreSQL) 구조를 유지해야 함
- 인수인계 없이 넘겨받은 레거시 코드베이스 — 구조 분석부터 선행 필요
- 아동 단말은 저전력 정책·간헐적 네트워크 등 통제 불가능한 실사용 환경
- On-premise 백엔드 인프라 위에서 운영 (외부 클라우드 미사용)
- 다음 연구 코호트 일정에 맞춘 개선 납기
Tech Stack
- Node.js
- PostgreSQL
- Crontab (On-premise Scheduler)
- Android (Native)
- Wearable Vendor API (걸음 수 연동)
- OAuth Token (access/refresh)
Learnings
- 특정 기능을 클라이언트/서버 어느 쪽에 두든, 그 기능의 제약조건과 경우의 수를 구체적으로 이해한 뒤 배치를 결정해야 한다
- '앱이 활성일 때만 동작'처럼 암묵적 전제를 잡으면 정상처럼 보이지만, 실사용 패턴(저전력 종료·간헐 연결)이라는 경우의 수를 넣는 순간 무너진다
- 인수인계 없이 넘겨받은 레거시는 증상(데이터 유실)이 아니라 아키텍처의 기능 배치에서 근본 원인을 찾아야 한다
- 실험 설계(실험군/대조군)를 성립시키려면 UI 스레드 이슈 같은 클라이언트 디테일까지 연구 조건의 일부로 다뤄야 한다