카드사 여섯 곳, 양식이 여섯 개였다

김도도·2026년 9월 11일

여섯 곳이 여섯 개 다 달랐다

명세 파일을 올리면 시스템이 읽어서 거래 목록으로 바꾼다. 처음엔 한 카드사 것만 읽을 줄 알았다. 그 카드사 파일로 만들었으니까.

다른 카드사 파일을 올리면 그냥 죽었다. 읽을 줄 아는 표시를 못 찾으니 거기서 멈춘다.

그래서 실제로 쓰는 카드사 명세를 모아 나란히 열어봤다. 여섯 곳이었고, 양식이 여섯 개 다 달랐다. 어떤 건 다섯 번째 줄부터 표가 시작되고 어떤 건 열두 번째 줄부터 시작한다. 항목 이름도 제각각이다. 어떤 곳은 "가맹점명"이라고 쓰고 어떤 곳은 다른 말을 쓴다.

여기까지는 예상한 범위였다. 예상 못 한 건 그다음이었다.

같은 카드사인데 두 개다

한 카드사는 혼자서 양식이 두 개였다.

부가세 신고용으로 받은 파일과, 그냥 이용내역으로 받은 파일의 생김새가 달랐다. 카드사 사이트에서 무엇을 목적으로 받느냐에 따라 다른 파일이 내려온다. 실무자는 필요에 따라 둘 다 쓴다.

그러니까 "어느 카드사냐"만으로는 부족하다. 어느 카드사에서 무엇으로 받았느냐까지 봐야 한다.

그리고 두 곳은 파일에 암호가 걸려 있었다. 우리가 건 게 아니라 카드사 사이트에서 받으면 그렇게 나온다. 열려면 암호가 필요한데, 그 전까진 파일 안을 볼 수조차 없다.

고르게 할 것인가, 알아보게 할 것인가

처음 화면에는 카드사를 고르는 칸이 있었다. 올릴 때 카드사를 선택하면 시스템이 거기에 맞춰 읽는다.

만드는 쪽에서는 이게 제일 깔끔하다. 판별을 안 해도 되고, 틀릴 일도 없다.

쓰는 쪽에서 보면 다르다. 실무자는 파일을 내려받고, 그게 어느 카드사 건지 확인하고, 목록에서 그걸 찾아서 고르고, 그다음에 올린다. 게다가 같은 카드사에 양식이 둘이면 그 둘 중 뭘 받았는지도 기억해야 한다. 파일 하나 올리는 데 판단이 두 번 들어간다.

업체를 백 곳 넘게 담당하는 사람에게 판단 두 번은 작은 게 아니다. 그리고 이건 시스템이 이미 알 수 있는 것을 사람에게 묻는 일이다. 파일 안에 답이 들어 있으니까.

지문으로 알아맞히기

칸을 없앴다. 대신 파일을 열어 몇 군데만 보고 어디 건지 판정하게 했다.

시트 이름이 무엇인지, 표가 몇 번째 줄부터 시작하는지, 그 줄에 어떤 말이 적혀 있는지. 이 조합이 카드사마다 다르다. 겹치는 곳이 없어서 몇 군데만 보면 갈린다. 사람이 파일을 열었을 때 "아 이건 어디 거네" 하고 아는 그 근거를 그대로 옮긴 셈이다.

암호가 걸린 파일은 먼저 그것부터 알아챈다. 판별을 시도하다 막히면 그때 암호를 묻는다. 안 걸린 파일에는 묻지 않는다. 모든 사람에게 암호를 묻고 대부분이 빈칸으로 넘기는 화면을 만들지 않으려고 이렇게 했다.

결과적으로 실무자 화면에서 할 일은 하나가 됐다. 파일을 던진다.

바뀔 걸 아는 부분은 코드 밖으로

여기까지 만들고 나서 걸린 게 하나 있었다. 이 양식들은 반드시 바뀐다.

카드사가 사이트를 개편하면 열이 하나 늘거나 이름이 바뀐다. 우리한테 알려줄 리도 없다. 어느 날 갑자기 실무자가 올렸는데 안 읽히는 걸로 알게 된다.

그때마다 코드를 고쳐야 한다면, 한 줄 바꾸자고 빌드하고 배포하는 일을 반복하게 된다. 그러면 급할수록 손이 굼떠진다.

그래서 어느 칸이 무슨 뜻인지를 코드 밖 설정으로 뺐다. 양식이 바뀌면 그 설정만 고친다. 판별 방식과 읽는 방식은 그대로 두고, 자주 바뀌는 것만 밖에 둔 것이다.

남길 것

두 가지가 남았다.

하나는 선택지를 주는 게 친절이 아니라는 것이다. 고르게 하면 만드는 쪽은 편하지만 그 편함은 쓰는 사람의 판단으로 산 것이다. 시스템이 알아낼 수 있는 걸 사람에게 묻고 있지 않은지 한 번씩 봐야 한다.

다른 하나는 바뀔 걸 아는 부분을 코드 안에 두면 언젠가 사고가 된다는 것이다. 남이 정하는 형식, 남이 바꾸는 규격은 내 코드의 일부가 아니다. 밖에 두고 갈아 끼울 수 있게 해두면, 바뀌는 날이 사고가 아니라 그냥 작업이 된다.

profile
AI를 부려 낯선 도메인을 해체하고 현장의 문제를 해결합니다.

0개의 댓글