앱인토스 미니앱 경조사 봉투장부 화면 세 장
|

앱인토스 미니앱 5 – 경조사 봉투장부

앱인토스 미니앱 제작기 다섯 번째는 경조사 봉투장부입니다. 축의금이나 부의금을 누구에게 얼마 보냈고 얼마 받았는지 적어 두는 앱이에요.

“저번에 그 친구 결혼식 때 얼마 했더라” 하는 순간이 누구에게나 있잖아요. 이 앱은 그때 꺼내 보는 장부입니다. 매일 쓰는 앱이 아니라는 점을 기준으로 삼았고, 이 글은 거기서 나온 결정들을 적은 기록입니다.

로컬에서 앱을 직접 실행해 찍은 시연 영상. 이름과 금액은 시연용으로 넣은 예시입니다 (소리 없음)

경조사 봉투장부는 어떤 앱인토스 미니앱인가

경조사 봉투장부 홈 화면. 검색창과 새 기록 남기기 버튼, 내가 보낸 금액과 받은 금액 합계가 보인다
홈: 검색과 합계
기록 입력 시트. 내가 보낸 돈을 고르고 이름, 금액, 경조사 종류, 관계를 입력한 모습
새 기록 입력
전체 장부 화면. 사촌형으로 검색해 보낸 기록과 받은 기록 두 건이 나와 있다
별칭으로 검색

화면은 하단 탭 기준으로 홈, 장부, 내 기록 참고 세 개입니다. 홈에서는 보낸 금액과 받은 금액 합계를 나눠서 보여주고, 장부에서는 이름이나 관계, 행사로 기록을 찾습니다. 내 기록 참고는 사람과 행사를 고르면 그 사람에게 내가 보냈던 기록만 추려 주는 화면이에요.

위 화면의 이름과 금액은 시연용으로 넣은 예시입니다.

다시 찾는 때는 ‘다음 경조사’

앞에서 다룬 물 마시기나 카드값 페이스는 매일 열 이유를 만드는 게 과제였습니다. 이 앱은 사정이 달라요. 경조사는 한 달에 한 번 있을 수도 있고 반년 동안 없을 수도 있으니까요.

매일 쓰는 앱

  • 연속 기록, 매일 알림이 어울린다
  • 어제와 오늘을 이어 주는 게 중요

행사 때 쓰는 앱

  • 다시 찾는 단위가 하루가 아니라 다음 경조사
  • 그때 필요한 걸 바로 찾게 해 주는 게 중요

그래서 이 앱에는 매일 출석을 세는 기능도 정기 알림도 넣지 않았습니다. 정해진 주기가 없는 일에 알림을 보내면 쓸모없는 알림이 되기 쉽거든요. 대신 기록이 쌓이는 만큼 올라가는 장부 등급을 두고, 오랜만에 열었을 때 첫 화면에서 바로 검색하고 바로 기록할 수 있게 하는 데 힘을 썼습니다.

함께 읽기앱인토스 미니앱 2 – 카드값 페이스앱인토스 미니앱 카드값 페이스 제작기입니다. 한 번 보고 끝나는 계산기가 아니라 매일 열어볼 앱으로 만들려고 짠 화면과 핵심 코드를 적었…

사적인 기록이라서 넣지 않은 것

누구에게 얼마를 보냈는지는 꽤 민감한 정보입니다. 그래서 몇 가지는 넣지 않았어요.

공유 기능이 없습니다. 다른 앱에서는 결과를 카드로 만들어 공유하게 하는 경우가 많지만, 관계와 금액이 담긴 기록을 공유할 거리로 만들고 싶지 않았습니다.

이름을 꼭 실명으로 적지 않아도 됩니다. 입력란에 “김민수 대리, 사촌형” 같은 예시를 넣어서 별칭으로 써도 된다는 걸 알려 주고, 검색도 별칭으로 되게 했어요.

기록은 기기 안에만 저장하고 서버로 보내지 않습니다.

읽기에 실패한 것과 기록이 없는 것은 다르다

돈 기록을 다루는 앱에서 제일 피하고 싶은 장면은, 기록이 멀쩡히 있는데 앱이 빈 장부를 보여주는 겁니다. 그래서 저장된 기록을 읽은 결과를 세 가지로 나눴습니다.

ledgerStorage.tsts
export function readLedgerEntries(storage: StorageLike, key: string): LedgerReadResult {
  let raw: string | null;
  try {
    raw = storage.getItem(key);
  } catch {
    return { status: 'unavailable' };
  }

  if (raw === null) return { status: 'ready', entries: [] };

  try {
    const parsed: unknown = JSON.parse(raw);
    if (!Array.isArray(parsed) || !parsed.every(isLedgerEntry)) return { status: 'corrupt' };
    return { status: 'ready', entries: parsed };
  } catch {
    return { status: 'corrupt' };
  }
}

세 가지 상태를 따로 다룬다

저장된 게 아예 없으면 빈 장부가 맞습니다. 하지만 저장소를 못 읽었거나 내용이 깨져 있을 때는 빈 장부로 바꿔 보여주지 않아요. 빈 장부로 보이면 사용자가 새로 기록을 시작하고, 그 순간 원래 기록을 덮어쓸 수 있기 때문입니다. 항목 하나하나의 모양까지 확인하는 것도 같은 이유예요.

함께 읽기앱인토스 미니앱 11 – 체중 다이어리앱인토스 미니앱 체중 다이어리 제작기입니다. 오늘 체중을 빠르게 적고 7일·30일 흐름과 주간 요약을 보는 앱을 만들면서, 빠진 날짜를…

저장이 됐을 때만 ‘저장했어요’

저장 쪽도 같은 생각으로 짰습니다. 저장 함수는 성공했는지를 참과 거짓으로 돌려줍니다.

ledgerStorage.tsts
export function writeLedgerEntries(storage: StorageLike, key: string, entries: LedgerEntry[]): boolean {
  try {
    storage.setItem(key, JSON.stringify(entries));
    return true;
  } catch {
    return false;
  }
}

화면에서는 이 값이 참일 때만 “기록을 저장했어요”를 띄웁니다. 저장하지 못했을 때는 입력한 내용을 그대로 둔 채 다시 시도하라고 알려줘요. 기기 저장 공간이 꽉 찼을 때 저장된 줄 알고 넘어가는 일이 없게 하려는 겁니다.

전면 광고도 이 순서를 따릅니다. 앱을 열고 처음 저장할 때는 나오지 않고, 그다음 저장부터 저장 완료를 먼저 보여준 뒤에 안내를 거쳐서만 나올 수 있어요. 기록이 남았는지 확인하는 순간을 광고가 가리면 안 된다고 봤습니다.

내가 보낸 기록만 추려 보기

“그 사람한테 얼마 했더라”에 답하는 화면이 내 기록 참고입니다. 사람과 행사를 고르면 이 한 줄이 기록을 추려요.

App.tsxts
const records = entries.filter(e => e.type === 'given' && e.name === name && e.event === event).sort((a,b) => b.date.localeCompare(a.date));

내가 보낸 기록 가운데 그 사람, 그 행사에 해당하는 것만 골라 최근 날짜부터 보여줍니다. 받은 금액은 여기에 섞지 않고, 내가 보냈던 기록만 깔끔하게 보이게 했어요.

다음에 할 일

이 앱은 기능을 늘리기보다 지금 있는 흐름을 매끄럽게 하는 쪽으로 다듬으려고 합니다. 오랜만에 연 사람이 첫 화면에서 망설이지 않는지, 사람들이 실제로 어떤 말로 검색하는지를 보고 문구를 맞춰 가는 일이에요.

프로젝트를 어떤 식으로 진행하는지는 프로젝트 진행 방식에, 매일 열 이유를 만든 앱 이야기는 카드값 페이스 글에 있습니다.

경조사 봉투장부 자주 묻는 질문

경조사 봉투장부는 어떤 앱인가요?

결혼식, 장례식, 돌잔치 같은 경조사 때 주고받은 금액을 이름이나 별칭으로 기록해 두고, 다음 경조사 때 예전에 얼마를 보냈는지 찾아보는 앱입니다.

기록은 어디에 저장되나요?

기기 안에만 저장합니다. 기록을 서버로 보내지 않습니다.

알림이나 공유 기능은 왜 없나요?

경조사는 정해진 주기가 없어서 정기 알림을 두지 않았고, 사적인 관계와 금액이 담긴 기록이라 공유 기능도 넣지 않았습니다.

이 글은 앱인토스 미니앱 「경조사 봉투장부」의 기록입니다. 앱인토스는 토스 앱 안에서 미니앱을 서비스하는 플랫폼이고, 공식 안내는 앱인토스 개발자센터에 있습니다.

이 글은 직접 만들고 운영하며 남긴 기록입니다. 적힌 수치는 작성 시점의 제 계정 기준이며, 같은 결과나 수익을 보장하지 않습니다.

Similar Posts

One Comment

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다