AssetTiger 유료화, 자산·비품·재고 관리 SaaS를 직접 만들어 이관하는 중입니다
사내에서 비품과 장비를 관리하던 AssetTiger 가 8월 1일부로 유료로 바뀌었습니다. 자산 250개까지는 무료라 계속 무료로 쓰고 있었는데, 그 무료 플랜이 통째로 30일 체험판이 됐습니다.
안내받은 일정은 이렇습니다.
- 8월 1일 — 체험 시작
- 8월 31일 — 체험 종료
- 9월 1일 — 업그레이드하지 않은 계정은 읽기 전용(view-only) 으로 전환
자료가 지워지는 건 아니지만 등록도 수정도 못 하게 됩니다. 자산 관리 도구가 읽기 전용이면 사실상 쓸 수 없습니다.
유료는 Basic 플랜 기준 연 220달러(자산 500개, 사용자 수 무제한)입니다. 첫 해 50% 할인으로 리워드 캐시 110달러를 넣어줘서 첫 해는 110달러지만, 이듬해부터는 220달러입니다. 어쨌든 매년 나가는 돈이 생긴 겁니다. (7월 24일에 받은 안내 메일과 2026년 8월 기준 요금제 페이지를 옮긴 것입니다. 요금 정책은 그쪽 사정으로 언제든 달라질 수 있으니 최신 내용은 공식 사이트에서 확인하세요.)
옮겨야 할 데이터는 자산 168건, 이력 683건, 사진 140장이었습니다.
유료로 올리자니 쓰지도 않는 기능이 대부분이었고, 다른 무료 서비스로 옮기자니 몇 년 뒤에 같은 공지를 또 받을 것 같았습니다. 그래서 실제로 쓰는 기능만 골라 직접 만들기로 했습니다.
먼저 정한 것 — 백업만 있으면 옮길 수 있어야 한다
기능을 정하기 전에 이것부터 정했습니다. 옮길 수 없으면 아무리 잘 만들어도 쓸모가 없기 때문입니다.
다행히 AssetTiger는 자산 목록을 CSV로 내보낼 수 있습니다. 그러니 그 파일을 그대로 받아들이는 가져오기를 가장 먼저 만들었습니다.
- 내보낸 CSV를 올리면 컬럼을 하나씩 짝지어 줍니다. 자산 코드·자산명·카테고리·위치·구입가·구입일처럼 이름만 다르고 뜻이 같은 필드가 대부분이라 대개 그대로 붙습니다.
- 없는 카테고리·위치·부서는 가져오면서 만들어집니다. 미리 손으로 등록해 둘 필요가 없습니다.
- 자산 코드를 키로 잡아 같은 파일을 두 번 올려도 중복이 생기지 않습니다. 이관은 한 번에 끝나지 않고, 빠진 걸 채워 다시 올리는 일이 반복되기 때문입니다.
지금 사내 데이터를 이 방식으로 옮기는 중입니다. 자산과 사진이 먼저 넘어갔고, 이력은 이벤트로 붙이고 있습니다.
유료화 공지를 받은 쪽이 저희만은 아닐 겁니다. 그래서 이 가져오기는 무료 등급에서도 제한 없이 씁니다. 옮겨 올 수 있어야 써볼 수라도 있습니다.
무엇을 만들었나

조직 단위로 자산을 등록하고 이력을 남기는 멀티테넌트 SaaS 입니다. 이름은 TagLoft(https://tagloft.net) 입니다.
아래 화면들은 요금제 페이지의 「무료 둘러보기」 버튼으로 들어가는 데모 방문자 계정에서 찍었습니다. 로그인 없이 누구나 같은 화면을 볼 수 있습니다. 데모 조직의 자산은 전부 예시 데이터라, 앞에서 말한 사내 자산 168건과는 숫자가 다릅니다.
조직 간 격리는 화면이 아니라 DB의 행 수준 보안(RLS) 이 강제합니다. 화면 코드가 실수해도 다른 조직 데이터는 애초에 쿼리에 잡히지 않습니다. 격리를 애플리케이션에 맡기면 언젠가 한 번은 새기 때문입니다.
자산 등록과 이력
체크아웃·체크인, 대여·반납, 예약, 이동, 수리, 폐기 — 상태가 바뀔 때마다 이벤트로 남습니다. “지금 어디 있나” 뿐 아니라 “언제 누가 가져갔나”가 남아야 실제로 쓸모가 있습니다.

실사(재고조사)
장부상 그 위치에 있어야 할 자산이 실제로 있는지 확인합니다. 시작 시점의 위치를 그대로 저장하므로, 나중에 자산을 옮겨도 지난 실사 결과는 바뀌지 않습니다.

스캔 — 앱을 깔지 않습니다
라벨을 찍어 자산을 조회하는 기능 자체는 AssetTiger에도 있었습니다. 저희가 다르게 잡은 건 앱을 따로 내지 않았다는 점입니다. 휴대폰 브라우저로 주소만 열면 카메라가 바로 뜹니다.
스토어를 거칠 일도, 사내에 설치 파일을 돌릴 일도 없습니다. 창고에서 잠깐 쓰겠다고 앱부터 깔라고 하면 그 자리에서 그냥 안 씁니다.
홈 화면에 추가해 두면 주소창 없이 전체 화면으로 열려서 쓰는 입장에선 앱과 다를 게 없습니다. 기기를 바꿔도 다시 설치할 게 없습니다. QR에는 URL이 들어 있어 일반 카메라 앱으로도 그냥 열립니다.
바코드·QR 라벨 인쇄도 직접 만들었습니다. A4 라벨 시트 규격을 고르고 시작 위치를 지정해, 쓰다 남은 시트를 이어서 씁니다. 이 기능은 Team 요금제부터 엽니다.
그 밖에 물품인수증(서명이 들어간 PDF와 외부 서명 링크)이 있습니다.

요금제는 자산 300개까지 계속 무료입니다. 기간 제한이 있는 체험판이 아니라, 300개를 넘어설 때만 유료를 생각하면 되는 등급입니다. 그 위로 월 9,900원과 29,900원.

결제를 두 개 붙인 이유
국내 카드와 해외 카드는 결제 주체가 다릅니다.
해외는 Paddle 을 씁니다. Paddle이 판매자(Merchant of Record)가 되어 각국 부가세를 계산·신고·납부하는 책임을 지고, 우리 매출은 “Paddle에 용역을 제공한 것”으로 잡힙니다.
국내는 우리가 판매자입니다. 포트원으로 붙이고, 실제 결제대행(PG)은 KG이니시스 입니다. 카드사 정기결제 가맹 심사도 KG이니시스를 통해 받고, 빌링키를 받아 우리가 카드를 긁습니다.
그래서 결제 수단이 통화를 정합니다. 국내 카드는 원화, 해외 카드는 달러. 환산 관계가 아니라 서로 다른 가격표입니다.
카드를 긁어보고 나서야 보인 것들
기능보다 어려웠던 건 결제였습니다. 그리고 여기서 나온 문제들은 코드 리뷰로는 하나도 찾을 수 없는 종류였습니다. 길게 적으면 개발기만 남을 것 같아 두 개만 적습니다.
등급을 올렸더니 한 달이 공짜로 붙었다
기간 중간에 상위 등급으로 올리면 남은 일수만큼 차액만 청구하고 결제일은 그대로 두는 것이 규칙입니다. 그런데 상향 직후 다음 결제일이 한 달 뒤로 밀렸습니다.
원인은 “결제 완료” 웹훅이었습니다. 그 웹훅을 받으면 결제 기간을 한 주기 연장하는데, 차액 결제와 갱신 결제를 구분하지 못했습니다. 차액은 이미 지난 기간의 차이를 메우는 돈이지 기간을 사는 돈이 아닙니다. 첫 결제와 갱신만 날짜를 옮기도록 고쳤습니다.
상향하는 모든 고객이 매번 한 달씩 무료로 받았을 결함입니다.
국내 결제가 전부 실패했는데, 왜인지 알 수 없었다
INVALID_REQUEST 만 뜨고 이유가 없었습니다. 포트원은 어느 필드가 잘못됐는지 함께 돌려주는데, 우리 코드가 둘 중 하나만 취하고 나머지를 버리고 있었습니다. 둘 다 보여주게 고치자 답이 바로 나왔습니다.
customer.name violated the rule REQUIRED
customer.email violated the rule REQUIRED
customer.phoneNumber violated the rule REQUIRED
빌링키를 발급할 때는 이 셋을 이미 받고 있었습니다. 그런데 청구는 별개의 호출이고, 거기엔 아무것도 실려 가지 않았습니다.
더 큰 문제는 갱신이었습니다. 다음 달 청구는 야간 배치가 합니다 — 다이얼로그도, 브라우저도, 세션도 없습니다. 첫 결제만 고쳤다면 한 달 뒤 모든 구독이 조용히 실패할 참이었습니다.
그 밖에도 환불 후 유료 등급이 남는 문제, 환불 창이 다른 요금제 정가를 제안하던 문제, 그리고 결제와 무관하지만 계정 삭제가 한 번도 동작한 적이 없던 문제를 잡았습니다. 이 이야기는 다음 편에서 따로 적겠습니다.
테스트 채널인데 실제로 카드 승인이 났다
국내 PG의 테스트 채널로 결제하면 정산은 없지만 카드사 승인은 실제로 일어납니다. 콘솔은 이 건을 “테스트 결제”로 분류하는데, 카드 앱에는 승인 알림이 옵니다.
콘솔의 분류만 보고 “돈이 나가지 않았다”고 판단했다가 카드사 문자로 반박당했습니다. 확인 없이 단정한 것이 잘못이었습니다. 그래서 결제 버튼 아래 문구를 이렇게 고쳤습니다.
⚠ 승인 전 테스트 결제 채널입니다. 이 채널의 결제는 정산되지 않지만 카드 승인은 실제로 일어나므로, 결제하시면 카드사 승인 내역이 남고 저희가 곧바로 취소해 드립니다.
지금 상태
- 이관: 백업 CSV로 자산과 사진을 옮겼고, 이력을 붙이는 중입니다
- 해외 카드 결제(Paddle): 라이브. 구독 개시·상향·하향 예약·해지·환불 전 경로를 실제 카드로 검증했습니다
- 국내 카드 결제(포트원 · KG이니시스): 심사 중. 정기결제 가맹 심사는 사이트 검수 3~5영업일에 카드사 심사 2~3주가 더 붙습니다
- 유료 고객: 아직 없습니다
출시했다고 쓰고 싶지만 사실은 출시 직전입니다. 국내 결제가 열리고 첫 청구가 실제로 나가는 걸 봐야 끝입니다.
다음 편 예고 — 국내 PG 심사 결과, 첫 실고객 결제, 그리고 야간 배치가 실제로 갱신을 청구하는 날.
AssetTiger 는 MyAssetTag 의 상표이며, TagLoft 는 해당 회사와 아무런 제휴·후원·보증 관계가 없습니다. 본문의 요금·일정 언급은 2026년 7월 24일에 받은 안내 메일과 2026년 8월 기준 공식 요금제 페이지를 기준으로 한 사실 서술입니다.