현재 위치: 01 / 작업 — Life-Up

CASE 01 / APP

Life-Up — 습관 관리 앱

앱 결제와 웹 결제를 한 구독으로 묶고, 고치는 주기가 다른 기능을 서버 6개로 나눈 습관 앱입니다.

분야
습관 관리 앱
플랫폼
iOS · Android(한 코드) · 웹 포털
언어
한국어 · 영어 · 일본어
상태
App Store · Google Play 출시, 운영 중
Life-Up 앱 화면 세 개 — 12주 습관 기록, 오늘 할 습관 목록, 키우는 고양이 버디

요약

무엇
매일의 작은 실천을 퀘스트로 바꾸는 습관 관리 앱. 습관을 기록하면 코인을 받고, 그 코인으로 버디를 키웁니다
맡은 일
기획 · 디자인 · 앱 · 웹 포털 · 서버 · 결제 · 스토어 출시 · 운영, 전부 직접
기술
React Native(Expo) · React · Spring Boot · RevenueCat · Paddle · Kubernetes

Life-Up은 의지로 버티는 대신 계속할 이유를 만드는 앱입니다. 할 일과 습관을 기록하면 코인이 쌓이고, 그 코인으로 버디를 키웁니다. 매주 새 글이 올라오는 매거진, 정해 둔 시간에 오는 알림, 광고 없이 쓰는 구독도 들어 있습니다. 작은 앱처럼 보여도 성격이 다른 기능이 다섯 갈래로 얽혀 있어서, 처음 구조를 어떻게 잡느냐가 그 뒤의 수정 비용을 정했습니다.

서버를 기능별 6개로 나눴습니다

문제
습관 기록, 버디 키우기, 매거진, 알림, 구독은 바뀌는 속도가 다릅니다. 매거진은 매주 새 글이 올라가고 기능도 자주 손보지만, 결제는 거의 바뀌지 않는 대신 한 번 틀리면 돈 문제가 됩니다. 서버 하나에 모두 넣으면 매거진 화면 하나를 고치려고 결제 코드까지 함께 다시 배포해야 합니다.
선택
인증·습관·게임·매거진·알림·구독을 각각의 서버로 나누고, 앞에 게이트웨이를 하나 두었습니다. 앱과 웹은 게이트웨이 주소 하나만 알고, 그 뒤가 어떻게 나뉘었는지는 모릅니다. 배포도 서버마다 따로 하도록 자동화했습니다.
이유
고친 곳만 다시 올리면 되니, 매거진을 손보는 날에도 결제 서버는 그대로 둡니다. 한 서버에 문제가 생겨도 나머지 기능은 계속 돕니다. 대신 운영할 서버가 늘어나는 비용이 있어서, 고객 앱에 처음부터 이렇게 나누자고 권하지는 않습니다. 기능 수와 바뀌는 속도를 보고 정합니다.
오늘 할 습관 목록과 12주 활동 기록 화면(데모 계정)

앱 결제와 웹 결제를 한 등급으로 묶었습니다

문제
앱 안에서 구독을 팔려면 애플·구글의 인앱 결제를 써야 합니다. Life-Up은 웹 포털에서도 구독을 팝니다. 두 결제가 따로 놀면, 웹에서 결제한 사람이 앱을 열었을 때 무료 회원으로 보이고 광고까지 뜹니다.
선택
앱은 RevenueCat으로 App Store·Google Play 결제를, 웹은 Paddle을 붙였습니다. 두 곳에서 오는 결제 완료 신호를 서버가 받아 계정마다 하나의 등급으로 합치고, 둘 다 있으면 높은 쪽을 씁니다. 결제 신호는 미리 맞춰 둔 인증값이 있을 때만 받습니다. 주소만 알면 누구나 "결제됐다"고 보낼 수 있기 때문입니다.
이유
어디서 결제했든 같은 권리를 받아야 하기 때문입니다. 등급을 확인하지 못한 순간에는 광고를 띄우지 않는 쪽을 골랐습니다. 무료 회원에게 광고를 한 번 덜 보여 주는 것보다, 돈을 낸 사람에게 광고가 보이는 쪽이 훨씬 나쁘기 때문입니다.
할 일 목록과 버디 성장 화면(데모 계정)

한 코드로 두 플랫폼, 세 언어는 처음부터

문제
iOS와 Android를 따로 만들면 고칠 때마다 두 번 고쳐야 하고, 시간이 지나면 두 앱이 조금씩 달라집니다. 언어도 같습니다. 화면 글자를 코드에 바로 적어 두면, 나중에 번역을 붙일 때 모든 화면을 다시 열어야 합니다.
선택
React Native(Expo)로 한 코드에서 두 플랫폼 앱을 만들고, 첫 화면부터 글자를 언어 파일로 분리해 한국어·영어·일본어를 함께 넣었습니다. 스토어 설명, 업데이트 안내, 매거진 글도 세 언어로 냅니다.
이유
두 결정 모두 나중에 바꾸려면 사실상 다시 만들어야 하는 것들입니다. 처음에 정해 두면 해외 출시를 언제 정하든 앱을 다시 만들 필요가 없습니다.

결과물

  • 앱iOS·Android, 한 코드(React Native·Expo), 한국어·영어·일본어
  • 웹 포털구독 결제, 계정 관리
  • 서버기능별 6개(인증·습관·게임·매거진·알림·구독) + 게이트웨이, 서버별 자동 배포(Kubernetes)
  • 로그인Google·Apple 로그인, 가입 없이 둘러보는 게스트 모드
  • 결제앱 인앱 구독(RevenueCat) + 웹 구독(Paddle), 계정 하나의 등급으로 병합
  • 알림·매거진정해 둔 시간의 리마인더, 세 언어 매거진(주 1회 발행)
  • 출시App Store·Google Play. 애플 심사에서 로그인 방식(4.8), 계정 삭제(5.1.1), 구독 화면의 약관 링크(3.1.2), 홍보 이미지 속 가격(2.3.2)으로 반려를 받았고, 고쳐서 통과했습니다
Life-Up 웹사이트 lifeup.laonmon.com 첫 화면

구독·결제가 있는 앱을 맡기신다면

앱 결제와 웹 결제를 둘 다 붙여 운영해 본 경험이 그대로 들어갑니다. 상품을 어디서 팔지, 두 곳에서 산 구독을 어떻게 합칠지, 결제 신호를 어떻게 검증할지를 기획 단계에서 정합니다.

애플이 결제 앱에서 보는 것 — 구독 화면의 약관 링크, 구매 복원 버튼, 홍보 이미지 — 을 제출 전에 점검하고, 반려되면 고쳐서 다시 올리는 것까지 추가 비용 없이 합니다.

서버를 몇 개로 나눌지는 앱 규모를 보고 정합니다. 작은 앱은 서버 하나로 시작하는 편이 운영비가 적게 듭니다.

다음 사례

SwingNote

AI 골프 스윙 분석 앱 · iOS·Android · 한/영/일

CONTACT

LET'S
TALK.

만들고 싶은 것을 편하게 적어 주세요.

홈페이지·앱 제작 문의, 비즈니스 제휴, 그 밖에 궁금한 점 무엇이든 괜찮습니다. 로고나 원고가 없어도 됩니다. 하시는 일과 필요한 것을 적어 주시면 범위와 기간을 정리해 견적으로 답장드립니다.

급한 질문은 오른쪽 아래 챗봇에 먼저 물어보셔도 됩니다.