전체 글
-
리뷰 분석부터 Firebase Analytics 이벤트 설계까지 — LED 전광판 앱 리뉴얼 회고Android 2026. 5. 19. 17:26
들어가며기존에 운영하던 LED 전광판 응원 앱을 새로운 아키텍처로 리뉴얼했습니다. 단순한 코드 교체가 아니라 “리뷰 분석 → 개선 포인트 도출 → 리뉴얼 → Analytics 이벤트 설계 → 데이터 기반 검증” 으로 이어지는 사이클을 만드는 작업이었습니다.이 글은 리뉴얼 과정 중에서도 “지표를 어떻게 설계하고 심었는가” 에 초점을 맞춰 정리한 회고입니다.1. 왜 리뉴얼이 필요했는가 — 기존 앱의 한계기존 앱 (LED Screen)항목 기존 앱패키지kr.co.simplebestapp.cheering언어Java아키텍처단일 모듈, MVCAnalytics 이벤트4개 (응원시작, 카톡추천, 광고닫기, 광고구경가기)빌드 시스템Gradle Groovy DSL가장 큰 문제는 사용자 행동을 거의 추적할 수 없었다는 점이..
-
Foreground Service 카메라구조변경Android 2026. 5. 19. 17:19
🎥 Foreground Service에서 카메라를 돌리는 법플로팅 뷰에서 헤드리스 구조로 — Android Foreground Service에서 CameraX로 실시간 얼굴 인식을 구현하면서 겪은 구조 변천사📌 목차배경: 왜 Foreground Service에서 카메라가 필요했나거리 측정의 원리1차 구조: 플로팅 PreviewView전환점: 헤드리스 구조로의 변경헤드리스 전환 후 해결해야 했던 것들최종 구조 정리마무리1. 배경: 왜 Foreground Service에서 카메라가 필요했나아이가드는 스마트폰을 너무 가까이서 보는 습관을 교정해주는 앱이다. 전면 카메라로 사용자의 얼굴을 인식하고, 눈과 화면 사이의 거리를 실시간으로 측정한다. 기준보다 가까우면 경고 오버레이를 띄워주는 방식이다.🎯 핵심 ..
-
Android 녹화 앱에서 Lifecycle을 무시하면 생기는 일카테고리 없음 2026. 5. 18. 16:59
1분 영상 녹화 기능을 구현하면서 겪었던 두 가지 Lifecycle 이슈. 구현 코드는 길지 않지만, 이 처리가 없으면 실제 사용 환경에서 바로 문제가 생긴다.배경영상 일기 앱을 만들면서 발생한 일이다. 핵심 기능은 하루에 1분짜리 영상을 촬영하는 것이다. CameraX와 Jetpack Compose 조합으로 카메라 화면을 구현했고, 녹화 버튼을 누르면 60초 카운트다운과 함께 촬영이 진행된다.녹화 기능 자체는 CameraX의 Recording API를 사용하면 비교적 straightforward(구현 흐름이 단순한 편)하다.문제는 녹화 중 발생하는 외부 이벤트였다.단순히 "녹화가 된다" 수준으로는 충분하지 않았다. 실제 사용 환경에서는 화면이 꺼지거나, 앱이 백그라운드(background, 화면 뒤로 ..
-
타임랩스 기능 - MediaMuxer 버리고 Media3 Transformer로 갈아탄 이야기Android 2026. 5. 18. 16:49
영상 일기 앱을 만들면서 매일 찍은 짧은 영상들을 하나의 타임랩스로 합치는 기능이 필요했다.예를 들어 사용자가 한 달 동안 매일 1분씩 영상을 찍었다면, 총 30분 분량의 영상을 30초짜리 하이라이트 영상으로 압축해서 보여주는 기능이다.처음엔 단순하게 생각했다."영상 여러 개 이어 붙이고 재생 속도만 빠르게 하면 되는 거 아닌가?"그래서 Android의 저수준 미디어 API인 MediaMuxer를 사용해 구현을 시작했다.결론부터 말하면, 결국 Media3 Transformer로 전면 재작성했다.이번 글은 그 과정에서 왜 접근 방식을 바꾸게 됐는지 기록해보려 한다.처음 선택한 방식: MediaMuxerMediaMuxer는 Android에서 여러 미디어 트랙을 하나의 파일로 합칠 때 사용하는 API다.처음 ..
-
아이가드 개발기 - 얼굴 인식 정확도를 올리기 위한 삽질기카테고리 없음 2026. 5. 15. 18:44
📱 얼굴 인식 정확도를 올리기 위한 고군분투전면 카메라로 눈-화면 거리를 실시간 측정하는 Android 앱 “아이가드” 개발 삽질기📌 목차아이가드는 어떤 앱인가?거리 측정의 원리첫 번째 벽: 플로팅 카메라 뷰의 한계두 번째 벽: 성능 최적화세 번째 벽: Service에서 CameraX 사용하기네 번째 벽: 화면 ON/OFF와 카메라 동기화마무리: 배운 것들1. 아이가드는 어떤 앱인가?아이가드는 스마트폰을 너무 가까이서 보는 습관을 교정해주는 앱입니다. 전면 카메라로 사용자의 얼굴을 인식하고, 눈과 화면 사이의 거리를 실시간으로 측정해서 너무 가까우면 경고 오버레이를 띄워준다.핵심 흐름단계 설명1️⃣최초 실행 시 사용자의 기준 거리 측정 (50개 샘플 수집 → 평균)2️⃣백그라운드 서비스에서 지속적으로..
-
쿠팡 공유 URL 리다이렉트 추적하기Android 2026. 5. 15. 18:39
WebviewController로 쿠팡 공유 URL 리다이렉트 추적하기📌 한 줄 요약쿠팡 공유 링크는 단축 URL이라 실제 상품 URL이 아니다. JS 리다이렉트까지 처리하려면 HTTP 클라이언트가 아닌 WebView를 써야 한다.🔗 1. 리다이렉트란?사용자가 쿠팡 같은 앱에서 “공유하기”를 누르면 넘어오는 URL은 실제 상품 페이지 URL이 아니다.공유로 받은 URL: ...실제 상품 URL: ..쇼핑몰은 공유 시 단축 URL / 추적 URL / 파트너스 링크를 사용한다. 이 URL을 브라우저에서 열면 HTTP 301/302 리다이렉트 응답을 통해 실제 상품 페이지로 자동 이동된다.서버에 스크래핑 요청을 보내려면 최종 도착지 URL(실제 상품 URL) 이 필요하다. 단축 URL을 그대로 넘기..
-
Android QR 스캐너 성능 최적화카테고리 없음 2026. 5. 15. 00:01
📷 Android QR 스캐너 성능 최적화 — CodeScanner에서 CameraX + ZXing 직접 구현으로📌 한 줄 요약서드파티 QR 라이브러리가 카메라 리소스를 제대로 해제하지 못해 다중 창, 재시작, Push 진입 시 오류가 반복됐다. CameraX + ZXing을 직접 조합해서 라이프사이클 제어권을 직접 가져왔다.🗂 1. 배경 — 왜 바꿔야 했나로또 앱에 QR 스캐너 기능을 붙일 때 처음엔 com.github.yuriy-budiyev:code-scanner 라이브러리를 썼다. 설정이 간단하고 빠르게 붙일 수 있었기 때문이다.codeScanner.apply { camera = CodeScanner.CAMERA_BACK formats = CodeScanner.ALL_FORMATS..
-
앱링크 딥링크를 이용해 사용자 수 늘리기 - 자연 유입을 위한 공유 링크 시스템 구축Android 2026. 5. 14. 17:49
들어가며앱 서비스를 운영하다 보면 항상 고민하게 되는 것이 사용자 유입입니다.광고를 통한 유입은 빠른 효과를 기대할 수 있지만, 지속적으로 비용이 발생하고 효율이 떨어질 수 있습니다.회사에서는 광고 외에도 기존 사용자의 공유를 통한 자연 유입(Organic Growth) 을 만들고자 했습니다.사용자가 앱 내 콘텐츠(판매점 정보, 당첨 금액 등)를 카카오톡이나 SNS로 공유하고, 그 링크를 통해 새로운 사용자가 앱에 유입되는 구조입니다.이를 위해 다음 조건을 만족하는 링크 시스템이 필요했습니다.앱이 설치되어 있으면 특정 화면으로 바로 이동앱이 설치되어 있지 않으면 Play Store로 이동설치 후 첫 실행에서도 원래 보려던 콘텐츠로 연결공유 링크 클릭 수 및 유입 경로 추적 가능이 글에서는 위 요구사항을 ..