Victor

[연재] 카드 혜택 (2) AI가 약관을 읽어 한도를 뽑다

연재 · 2026-07-31

60% 할인 카드가 실제로 깎아주는 돈은 13,000원이었습니다

 

지난 편에서 카드 1,180장을 모았다고 했잖아요. 모아놓고 추천 기능을 붙였습니다. "음식점에 한 달 30만 원 쓴다"고 하면 어느 카드가 제일 이득인지 순위를 매기는 거예요.

 

돌려봤더니 1등이 이렇게 나왔습니다.

 

롯데 LOCA LIKIT Eat — 음식점 60% 할인. 월 180,000원 할인.

 

30만 원의 60%니까 18만 원. 계산은 맞아요. 그런데 뭔가 이상하잖아요. 한 달에 18만 원을 깎아주는 카드가 있을 리가 없습니다.

 

약관을 찾아봤어요. 그랬더니 이렇게 적혀 있었습니다.

 

통합 월 13,000원 한도 (모든 혜택 합산)

 

60%가 맞긴 맞는데, 그렇게 깎아주는 게 한 달에 13,000원까지였어요. 그것도 음식점만 13,000원이 아니라 음식점·배달앱·카페·구독을 전부 합쳐서 13,000원입니다.

 

 

18만 원이라고 띄운 화면과 실제 13,000원. 열세 배 넘게 뻥튀기된 숫자를 1등이라고 보여주고 있었던 겁니다.

 

오늘은 이 한도를 어떻게 뽑아냈는지 이야기해 보려고 합니다.

 

"월 최대 얼마"가 어디에도 정리돼 있지 않았습니다

 

카드 데이터를 받아오면 이런 것들이 항목으로 깔끔하게 들어 있어요. 카드 이름, 발급사, 연회비, 전월실적, 혜택 이름, 할인율.

 

그런데 월 한도는 항목으로 없습니다.

 

없는 게 아니라, 항목이 아니라 문장 안에 있어요. 혜택 설명 원문을 그대로 보면 이렇게 생겼습니다.

 

 

읽어보시면 중간에 "전월실적 50만원 이상인 경우에 한해 월 최대 2천 마일리지까지 서비스 제공"이라는 대목이 있어요. 그 앞뒤로는 대상 가맹점 목록이 나오고, 뒤로는 제외 업종이 줄줄이 붙습니다. 문장 하나에 조건이 예닐곱 개 들어 있는 거예요.

 

이런 게 카드 1,180장에 붙어서 혜택 줄로만 5,265줄입니다. 사람이 앉아서 읽을 수 있는 양이 아니에요. 하루에 500줄씩 읽어도 열흘이 넘습니다.

 

규칙으로 뽑으려다 포기했습니다

 

처음엔 문장에서 숫자를 찾아내는 규칙을 만들어서 뽑으려고 했어요. "월 최대 ○○원" 같은 꼴을 찾는 식으로요.

 

금방 한계가 왔습니다. 카드사마다 쓰는 말이 다 달랐거든요.

 

  • 월 최대 1만원
  • 월 1만원 한도
  • 통합 월 1.3만 한도
  • 건당 5천원, 월 2회
  • 연 6만원 (월 3만원)
  • 월 20만원 이용 시 20% 청구할인

 

마지막 줄 같은 건 규칙으로 못 잡습니다. 이건 한도가 "20만 원"이 아니라 "20만 원까지 쓴 금액의 20%", 그러니까 최대 4만 원이라는 뜻이거든요. 문장을 이해해야 나오는 숫자예요.

 

"연 6만원 (월 3만원)" 같은 것도 그렇습니다. 연 단위와 월 단위가 같이 적혀 있는데 우리한테 필요한 건 월 쪽이죠.

 

말을 이해해야 뽑히는 숫자라는 결론이 났습니다.

 

약관을 통째로 읽혔습니다

 

그래서 방식을 바꿨어요. 규칙으로 뽑지 말고, 약관 원문을 그대로 AI에게 읽히고 숫자를 받자.

 

문제는 양이었습니다. 5,265줄을 한 번에 넘길 수는 없어요. 그래서 카드 15장씩 잘라서 묶음 파일로 만들었습니다.

 

 

1,180장이 79묶음이 됐어요. 묶음 하나에 카드 15장, 그 카드들의 모든 혜택과 약관 원문이 들어갑니다.

 

그리고 각 묶음을 따로따로 읽혔습니다. 79개를 한 줄로 세워놓고 차례차례 읽히는 게 아니라 여러 개를 동시에 돌렸어요. 묶음끼리는 서로 상관이 없으니까 순서를 지킬 이유가 없거든요.

 

받아오는 값은 세 가지입니다. 혜택별 월 한도, 카드 전체의 통합 월 한도, 그리고 할인율이요.

 

왜 하필 15장씩인가

 

15라는 숫자는 몇 번 바꿔가며 정한 값이에요.

 

너무 적게 자르면 묶음 개수가 늘어납니다. 5장씩 자르면 236묶음이 돼요. 묶음이 많아질수록 오가는 횟수가 늘고 그만큼 느려지고 비싸집니다.

 

반대로 너무 크게 자르면 한 번에 넘기는 글이 길어져요. 카드 한 장에 혜택이 평균 네댓 줄이고, 줄마다 약관이 길게는 1,400자씩 붙습니다. 카드 50장을 한 묶음에 넣으면 글이 수만 자가 돼요. 그러면 뒤쪽에 있는 카드를 대충 읽는 일이 생깁니다. 앞쪽은 꼼꼼히 읽고 뒤쪽은 훑는 거죠.

 

읽는 양이 많아지면 정확도가 떨어진다는 건 사람이나 기계나 비슷하더라고요. 그래서 한 묶음이 너무 길어지지 않는 선에서 15장으로 잡았습니다. 약관도 혜택당 1,400자, 유의사항은 2,200자까지만 넘기고 그 뒤는 잘랐어요.

 

마일리지는 원으로 바꿀 수가 없습니다

 

한도를 다 뽑고 나서 남은 문제가 하나 있었어요. 마일리지 카드입니다.

 

"1,500원당 1 마일리지 적립, 월 최대 2천 마일리지" 같은 혜택은 한도가 원이 아니라 마일이에요. 그런데 다른 카드는 원으로 깎아주잖아요. 단위가 다르면 순위를 못 매깁니다.

 

1마일이 몇 원인지는 정답이 없어요. 어디에 쓰느냐에 따라 다르고, 사람마다 다릅니다. 그래서 정하지 않고 물어보기로 했어요. 화면에서 마일 값을 직접 넣을 수 있게 하고, 기본값을 넣어두되 "추정"이라고 화면에 적어뒀습니다.

 

이건 정답을 몰라서 남겨둔 게 아니라, 정답이 없는 걸 정답인 척하지 않으려고 남겨둔 겁니다. 마일 값을 제가 하나로 박아버리면 그 순위가 마치 계산된 사실처럼 보이니까요.

 

유의사항에 숨어 있던 통합 한도

 

여기서 한 가지를 더 챙겨야 했어요.

 

맨 앞의 LIKIT Eat 기억하시죠. 그 카드의 13,000원은 혜택 하나하나에 붙은 한도가 아니라 카드 전체에 걸린 한도였습니다. 음식점 혜택 설명만 읽으면 안 나와요. 카드 맨 아래 "유의사항"에 적혀 있습니다.

 

그런데 유의사항은 혜택이 아니라서 원래는 걸러내던 부분이었어요. 카드 혜택 목록을 만들 때 "이건 혜택이 아니다"라고 빼놓던 자리였거든요.

 

거기에 제일 중요한 숫자가 있었던 겁니다.

 

 

그래서 걸러낸 부분을 버리지 않고 따로 모아서 같이 넘기게 바꿨습니다. "이건 혜택 설명은 아닌데, 여기에 통합 한도나 실적 조건이 숨어 있을 수 있으니 같이 읽어라" 하고요.

 

지금 1,180장 중 256장에 통합 월 한도가 잡혀 있습니다. 다섯 장 중 한 장꼴이에요. 이걸 안 챙겼으면 그 256장이 전부 뻥튀기된 채로 추천됐을 겁니다.

 

AI가 "한도 없음"이라고 해도 지우지 않았습니다

 

결과를 받아서 데이터에 반영할 때 규칙을 하나 뒀어요.

 

AI가 "이 혜택엔 한도가 없다"고 답해도, 이미 규칙으로 찾아둔 숫자가 있으면 그 숫자를 남긴다.

 

 

이유는 간단합니다. 틀리는 방향이 다르기 때문이에요.

 

한도가 있는데 없다고 하면 → 금액이 부풀려집니다. 18만 원 사건이 그거예요. 한도가 없는데 있다고 하면 → 금액이 작게 나옵니다. 순위가 좀 손해 볼 뿐이에요.

 

앞쪽이 훨씬 위험합니다. 그래서 둘이 어긋나면 금액이 작아지는 쪽을 택하게 했어요. 숫자를 지우는 건 확실할 때만 하고요.

 

같은 이유로 통합 한도도 AI가 답을 못 준 카드는 기존 값을 그대로 뒀습니다.

 

모르는 건 모른다고 남겼습니다

 

약관을 읽혀도 한도가 안 나오는 혜택이 있어요. 약관에 아예 안 적혀 있는 경우요.

 

여기서 두 가지를 구분해야 했습니다.

 

1. 읽어보니 한도가 없는 혜택 (무제한 적립 같은 것) 2. 읽어봤는데 한도가 있는지 없는지 모르겠는 혜택

 

둘 다 "한도 숫자 없음"으로 저장되면 같아 보이지만 성격이 완전히 다릅니다. 1번은 계산에 써도 되고, 2번은 쓰면 안 돼요.

 

그래서 "확인됨" 표시를 따로 뒀습니다. 결과가 이렇게 나왔어요.

 

 

혜택 5,265줄 중에 3,247줄에서 월 한도 숫자를 뽑았고, 1,625줄은 "읽어보니 한도가 없다"로 확정했습니다. 그리고 393줄이 아직 모르는 상태로 남아 있어요.

 

이 393줄은 추천 순위에서 뺐습니다. 대신 "참고"로 따로 보여줘요. 모르는 걸 아는 척하고 순위에 올리는 것보다, 빼놓고 따로 알려주는 게 낫다고 봤습니다.

 

한도를 넣었더니 1등이 바뀌었습니다

 

한도를 다 채워 넣고 나니까 추천 결과가 완전히 달라졌어요.

 

카페에 한 달 5만 원을 쓴다고 해볼게요.

 

 

1등이 롯데백화점 FLEX카드입니다. 월 15,000원 할인, 실질 50%. 근거도 같이 붙어요 — 커피 50% 월 1만 원, 스트리밍 30% 월 5천 원. 둘을 합쳐서 15,000원이고, 이미 한도에 도달했다고 표시됩니다.

 

이번엔 같은 카페인데 한 달 30만 원을 쓴다고 바꿔볼게요.

 

 

1등이 다른 카드로 바뀝니다. KB YOU Prime 카드가 올라와요. 월 30,000원 할인, 실질 10%.

 

아까 50% 카드는 어디 갔을까요. 여전히 15,000원만 깎아줍니다. 한도가 15,000원이니까요. 30만 원을 썼는데 15,000원이면 실질 5%예요. 할인율이 50%인 카드가 10% 카드한테 집니다.

 

이게 한도를 넣기 전에는 안 보이던 것입니다. 전에는 그냥 "50%가 10%보다 좋다"였어요.

 

얼마를 쓰느냐에 따라 유리한 카드가 바뀝니다. 적게 쓰면 할인율 높은 카드, 많이 쓰면 한도 큰 카드예요. 이건 한도를 알아야만 나오는 결론입니다.

 

 

음식점도 마찬가지입니다. 월 30만 원 기준 1등이 월 4만 원 할인이에요. 60% 할인 카드가 아니라요.

 

한 카드 안에서 한도를 나눠 쓰게 했습니다

 

마지막으로 하나 더 있었어요.

 

LIKIT Eat처럼 통합 한도가 걸린 카드는 계산이 한 번 더 꼬입니다. 음식점 혜택에서 13,000원을 다 쓰면 카페 혜택은 0원이 되거든요. 같은 지갑에서 꺼내 쓰는 거니까요.

 

그런데 처음엔 혜택마다 따로 13,000원을 계산하고 있었습니다. 그러면 음식점 13,000 + 카페 13,000 + 배달 13,000… 이렇게 붙어서 또 부풀어요.

 

그래서 한 카드 안의 혜택들이 통합 한도를 나눠 쓰도록 고쳤습니다. 나누는 순서는 지출이 큰 쪽부터예요. 제일 많이 쓰는 데에 한도를 먼저 배정하는 게 실제로 제일 이득이니까요.

 

 

숫자 옆에 근거를 붙였습니다

 

한도를 뽑고 나서 하나를 더 했어요. 그 숫자가 어디서 나왔는지를 화면에 같이 적는 겁니다.

 

순위에 뜨는 카드마다 이런 게 붙어 있어요.

 

  • 월20만이용×20%=4만
  • 커피50%월1만·스트리밍30%월5천
  • 아웃백30%,월3만원(연6만)
  • 패밀리레스토랑 월최대4만, 월4회

 

약관에서 뽑을 때 숫자만 받지 않고 "왜 그 숫자인지" 한 줄을 같이 받아둔 겁니다. 그걸 그대로 화면에 내보내요.

 

이걸 넣은 이유는 7편에서 계산기 만들 때와 같습니다. 금액만 보여주면 못 믿거든요. "월 4만 원 할인"이라고만 적혀 있으면 그게 진짜인지 확인할 방법이 없잖아요. 근거가 붙어 있으면 이상할 때 카드사 약관을 찾아가서 대조할 수 있습니다.

 

그리고 이건 저한테도 필요했어요. 이상한 숫자를 발견했을 때 어디를 봐야 하는지 알려주는 표시니까요. 실제로 18만 원 사건도 근거를 붙여놓고 나서야 "이게 왜 60%지?" 하고 잡혔습니다.

 

사람이 붙잡은 곳

 

이번 편에서 사람 몫이었던 걸 정리하면 이렇습니다.

 

첫째, 18만 원이 이상하다고 느낀 것. 계산은 틀린 데가 없었어요. 30만 원의 60%는 18만 원이 맞습니다. 그런데 카드사가 한 달에 18만 원을 깎아줄 리 없다는 건 계산이 아니라 상식이에요. 그 상식이 없으면 그냥 넘어갑니다.

 

둘째, 걸러냈던 유의사항을 다시 주워 온 것. "이건 혜택이 아니니까 빼자"는 판단이 처음엔 맞았어요. 그런데 거기에 제일 중요한 숫자가 있었습니다. 한 번 정한 걸 되돌린 거예요.

 

셋째, 어긋날 때 어느 쪽으로 틀릴지 정한 것. AI 답과 규칙 답이 다를 때 금액이 작아지는 쪽을 택한 것. 이건 기술이 아니라 어느 쪽 실수가 더 나쁜가에 대한 판단입니다.

 

넷째, 모르는 걸 모른다고 남긴 것. 393줄을 억지로 채우지 않고 순위에서 뺀 것이요.

 

읽는 일 자체는 사람이 못 합니다. 5,265줄을 읽고 숫자를 뽑는 건 열흘 걸릴 일이고, 열흘 걸려도 중간에 지쳐서 놓쳐요. 그건 기계 쪽이 훨씬 낫습니다.

 

그런데 읽은 결과를 얼마나 믿을지 정하는 건 사람 쪽이었어요. 다 믿고 반영했으면 지금도 어딘가에서 18만 원짜리 거짓말을 하고 있었을 겁니다.

 

카드 혜택은 victor-house.com/cards에서 보실 수 있습니다. 혹시 실제 한도와 다른 걸 발견하시면 화면 아래 신고 버튼으로 알려주세요.

 

다음 편은 이 도구의 마지막 이야기입니다. 지갑에 담아둔 카드를 폰에서도 PC에서도 똑같이 보이게 하려다 겪은 일들을요. 한글 비밀번호 때문에 로그인이 안 되던 사건도 있었습니다.

 

#카드혜택 #신용카드 #체크카드 #카드추천 #카드한도 #월할인한도 #통합한도 #전월실적 #카드약관 #카드혜택비교 #LIKIT #롯데카드 #KB국민카드 #카페할인 #음식점할인 #배달앱할인 #짠테크 #생활비절약 #카드테크 #AI활용 #AI자동화 #클로드 #바이브코딩 #비개발자개발 #데이터정제 #개인프로젝트 #사이드프로젝트 #도구만들기 #휴먼인더루프 #빅터하우스

댓글

    로그인 없이 쓰는 대신, 등록한 댓글은 직접 지울 수 없습니다. 지워야 할 댓글은 옆의 신고를 눌러주세요.
    네이버 블로그글 원문 보러가기 →유튜브 쇼츠만드는 장면 20초로 보기 →
    관리자 Victor · 문의는 우상단 신고·제안으로 남겨주세요.
    글과 화면은 정적 파일로 만듭니다. 댓글과 조회수만 외부 데이터베이스에 저장합니다 — 개인정보처리방침

    오류 신고 · 제안

    관리자 Victor에게 전달됩니다