REA로 은행 연동까지 뜯어보니…AI는 코드를 다 읽었고 계약 앞에서 멈췄다

서버 코드까지 설치 파일에 실은 가계부 앱이 보여 준 해자의 자리, 그리고 역분석이 허용되는 선

나무 책상 위 계약서에 보안 키가 놓여 있고, 노트북 화면에 인증 오류가 표시되어 있다.
AI 생성 이미지
핵심 요약 AI 요약
1
20분 연동 구조 분석:REA와 클로드 코드는 19분 45초 만에 Actual Budget의 은행 연동 업체 5곳과 호출 구조를 찾아냈으며, 정가 기준 비용은 6.15달러였다.
2
모의 거래 재현:AI가 만든 재현본은 가짜 업체 서버에서 거래 3건을 받아 두 번째 동기화의 중복 거래를 0건으로 처리했지만, 실제 은행 거래는 한 건도 받지 못했다.
3
코드 밖 접근 권한:실제 은행 연동은 코드가 아니라 업체 계정과 발급 키, 이용자의 은행 인증 및 동의가 없어 막혔다.
4
동봉된 서버 코드:Actual은 동기화 서버를 데스크톱 앱에 넣어 배포해 서버 코드가 드러났지만, 그 코드만으로 외부 업체의 서비스에 접근할 수는 없었다.
5
실측과 복제의 경계:이번 결과는 원본 소스가 설치 파일에 담긴 MIT 라이선스 앱 한 건의 실측이며, 상용 앱의 분석과 경쟁 제품 배포에는 별도의 법률·약관상 제약이 따른다.
기사 목차 펼치기 / 접기

본지가 REA와 클로드 코드(Claude Code)로 가계부 앱의 은행 연동 기능을 뜯어봤다. 연동 업체 다섯 곳과 호출 구조가 20분 만에 다 나왔지만, 실제 은행 거래는 한 건도 받지 못했다. 막은 것은 코드가 아니라 API 키와 업체 계정, 은행 동의였다.

앞서 본지는 [1부 실측 분석]을 통해 같은 앱의 거래 입력 및 데이터 저장 구조를 AI가 어떻게 읽어 냈는지 확인했다. 이어지는 2부에서는 그 실측을 이어받아, AI가 앱을 통째로 읽어 내는 시대에 소프트웨어 기업이 과연 무엇으로 자신의 해자를 지켜내는지 그 방어선의 실체를 따져 본다.

9일 만에 28만 별… ’24분 노션 복제’ 열풍의 실체

REA 저장소의 별은 10월 8일 2만개였고, 17일에는 30만개를 넘었다. 불과 9일 만에 28만개의 별이 폭증했다. 불을 붙인 장면 하나가 노션 복제 영상이다. 한 유튜버는 소스 코드 없이 24분 만에 노션을 통째로 복사했다고 주장했고, 영상 설명에는 블록 77종의 설계도와 채점표 16을 적었다. 못 베낀 것도 4가지 있었다고 밝혔지만, 본지는 그 내용을 확인하지 못했다.

도구를 만든 쪽의 설명은 더 조심스럽다. REA 면책 문서는 “독점 소프트웨어를 복제하거나 그 보호된 코드와 자산을 재현하는 일”(copying proprietary software or reproducing its protected code and assets)을 돕지 않는다고 적었다. 영상의 주장은 본지가 검증할 수 없었고, 그래서 같은 도구로 직접 실측했다.

20분 만에 털린 5개사 연동 구조… 멈춰 선 ‘빈 금고’

대상은 1부와 같은 Actual Budget 26.10.0이고, 이번 과제는 은행 거래 자동 가져오기였다. 어떤 외부 업체와 어떻게 통신하는지 밝히고, 같은 기능을 재현하되 막히는 지점을 기록하게 했다. 19일 오후 6시28분에 시작해 19분 45초 만에 끝났고, 정가 기준 비용은 6.15달러(약 8200원)였다. 도구 호출 60회 가운데 REA 호출은 8회였다.

AI는 연동 업체 다섯 곳을 찾았다. Actual의 공식 은행 연동 문서에 명시된 외부 연동사는 북미의 SimpleFIN과 브라질의 Pluggy, 뉴질랜드의 Akahu, 유럽의 GoCardless와 Enable Banking 등 총 5곳이다. 본지가 실습 전에 주소 검색으로 찾은 곳은 두 곳뿐이었다.

앱이 은행에 직접 붙지 않고 앱 안에 든 동기화 서버가 업체 API를 대신 부르는 구조도 원본과 같았다. 동기화 시작일을 오늘부터 89일 전으로 잡는 규칙까지 맞혔다. AI는 가짜 업체 서버를 세워 재현본을 끝까지 돌렸다. 거래 3건을 받았고, 두 번째 동기화에서 중복은 0건이었다.

실제 은행 앞에서는 멈췄다.

소프트웨어 방어선 실측: 앱 내부의 코드 vs 앱 외부의 계약
본지 실측 (Actual Budget 26.10.0 은행 연동)
앱 내부 (클라이언트) 20분 만에 노출
앱 안에 있던 것 (코드와 껍데기)
• 화면, 백엔드, 동기화 서버 코드 전체 노출
• 외부 5개 연동사를 호출하는 클라이언트 통신 로직
• 구조만 남고 비어 있는 비밀값 저장소(Config)
앱 외부 (실물 세계) 접근 불가 차단
앱 밖에 있던 것 (진짜 해자의 자리)
• 연동 업체의 공식 API 엔드포인트와 유료 구독 계정
• 기관이 심사 후 발급하는 비밀 키 및 RSA 인증서
• 고객이 직접 로그인해 허가하는 금융 기관 인증 및 동의
[핵심 시사점] 서버 코드와 내부 호출 규격은 20분 만에 완전히 복제되었으나, 실물 기관과의 유료 계약, 발급 키, 이용자의 법적 동의라는 코드 밖의 방어선은 단 1바이트도 넘지 못했음.

비밀값 저장소는 설치 파일 안에 있었지만 비어 있었다. GoCardless의 비밀 키나 Enable Banking의 RSA 키는 업체가 발급하고, 키를 받으려면 업체 계정을 열거나 유료로 구독해야 한다. GoCardless는 문서상 신규 계정을 받지 않는다. 계좌를 열려면 사용자가 은행에 직접 로그인해 동의해야 한다.

다섯 곳 중 GoCardless와 Enable Banking, Akahu는 주소가 코드에 고정돼 있어 코드를 고치지 않으면 가짜 서버로 바꿔 끼울 수도 없다.

실험 중 사고도 있었다. 본지는 웹 검색과 웹 조회 도구를 껐지만, AI가 만든 재현본이 처음 실행될 때 업체 주소 다섯 곳을 조회하고 GoCardless에 인증 없는 요청 1건을 보냈다. 응답은 401(인증 실패)이었다. AI는 이 사실을 최종 보고 맨 앞에 적고, 해당 단계는 별도 옵션을 줄 때만 돌도록 고쳤다.

도구를 막는 일과 네트워크를 막는 일은 다르다.

‘서버 은닉’의 착각… 배포 파일에 딸려 들어간 서버 코드

흔히 나오는 처방은 핵심 기능을 서버로 옮기라는 주문이다. Actual은 반대로 25.6.0 릴리스부터 동기화 서버를 데스크톱 앱 안에서 돌린다. 공지는 “은행 연동 같은 기능을 훨씬 쉽게 쓰게 하려는 것”(This should make it much simpler to get access to features such as bank sync.)이라고 설명했다.

그 결과 서버 코드가 설치 파일에 실렸고, 1부에서 본 것처럼 원본 소스 파일까지 함께 들어 있었다. 데스크톱 앱 빌드 설정은 웹 화면 패키지에서 필요한 파일만 골라 담지만, 동기화 서버 쪽에는 그런 제외 규칙이 없다. 소스 동봉의 의도를 밝힌 문서는 찾지 못했다.

서버 코드가 다 드러났는데도 은행 거래는 열리지 않았다. 지켜진 것은 그 서버가 남의 서비스에 접근할 권리였다. “서버에 두면 안전하다”는 말은 절반만 맞다. 서버 코드는 새어 나갈 수 있어도, 서버가 쥔 계약은 새지 않는다.

“서버 코드는 새어 나갈 수 있어도, 서버가 쥔 계약은 새지 않는다.”

무너지는 코드 해자… ‘관계와 계약’으로 내려앉은 방어선

벤처캐피털 a16z의 시마 앰블은 5월 글에서 “에이전트는 손에 익은 습관이라는 해자는 없앨 수 있어도, 운영 논리와 맥락이라는 해자는 없애지 못한다”(Agents may kill muscle memory as a moat, but they do not kill operational logic and context as a moat.)고 썼다. 지킬 수 있는 층은 “데이터 모델, 권한, 업무 흐름 논리, 규정 준수”(data models, permissions, workflow logic, and compliance)로 내려간다고 앰블은 봤다. 분석가 베네딕트 에번스는 9월 글에서 도구를 만들기 쉬워져도 “어려운 건 애초에 이 일에 도구가 필요하다는 걸 아는 것, 그리고 그 도구가 무엇을 해야 하는지 아는 것”(The hard part is knowing that you need a tool for this in the first place, and then knowing what the tool should do.)이라고 지적했다.

데이터에 접근할 권리에는 이미 값이 붙고 있다. 슬랙 API 약관은 API로 받은 데이터로 대형 언어 모델을 학습시키는 것을 금지했고, 다른 조직의 데이터를 장기 저장소로 쌓는 것도 막았다. JP모건은 지난해 11월 Plaid 등 데이터 중개업체 4곳과 고객 계좌 데이터 접근료를 받기로 합의했다. Actual이 부르는 다섯 업체도 같은 자리에 있는 중개업체다.

본지 실측은 이 주장들을 작은 규모로 확인했다. 복제를 멈춘 열쇠 세 개는 모두 코드 밖의 관계였다.

로컬 퍼스트의 역설… 숨기는 데도 비용이 든다

숨기는 데도 비용이 든다. 로컬 퍼스트 진영은 거꾸로 로직을 사용자 기기로 옮긴다. 이 흐름을 연 잉크앤스위치의 2019년 에세이는 서버가 “보조 역할이지 진실의 원천이 아니다”(they are in a supporting role, not the source of truth)라고 썼다. 오프라인 작동과 데이터 소유가 제품의 가치라면 로직을 서버로 다 감출 수 없다.

서버에 숨겨도 다 가려지지 않는다. REA는 분석 대상에 웹사이트를 올려 두었고, 서버 안 코드는 못 봐도 화면과 주고받는 데이터는 본다.

코드 저작권 자체가 흔들리는 사례도 있다. 유출된 클로드 코드 소스를 AI로 다시 쓴 claw-code 저장소는 앤트로픽(Anthropic)이 유출본 사본에 저작권 삭제 요청을 낸 뒤에도 남았다. IPKat은 AI 재작성의 적법성이 “법적으로 검증되지 않았다”(this remains legally untested)고 평했다.

본지 실측에도 한계가 있다. MIT 앱 하나와 과제 하나이고, 원본 소스가 설치 파일에 실린 드문 경우였다. 코드가 압축되고 서버 검증이 촘촘한 상용 앱이라면 결과가 달랐을 수 있다.

저작권법 제101조의4와 상용 약관이 긋는 사법적 한계선

노션 복사 영상은 19일 설명란에 “노션과 비슷한 앱을 배포하는 건 문제가 될 수 있다는 지적을 받았습니다. 맞는 말씀이라 파일은 배포하지 않습니다”라는 안내를 붙였다. 하루 전까지 설명란에는 구독 후 댓글을 남기면 파일을 무료로 준다고 적혀 있었다.

저작권법 제101조의4는 역분석을 “호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우”로 묶고 범위도 “호환에 필요한 부분에 한정”한다. 얻은 정보로 “표현이 실질적으로 유사한 프로그램을 개발ㆍ제작ㆍ판매”하는 데 쓰는 것은 금지한다.

약관은 더 넓게 막는다. 노션의 기본 구독 계약(MSA)은 8월 17일 시행된 현행판에서 서비스에 데스크톱·모바일 앱이 포함된다고 정의한다. 그리고 역분석과 함께 “경쟁 제품이나 서비스를 만들거나 기능·사용자 화면을 베낄 목적으로 서비스에 접근하는 것”(access the Services for the purpose of building a competitive product or service or copying its features or user interface)을 금지한다.

법은 역분석을 다른 프로그램과의 호환을 위해서만 열어 두었고, 상용 앱 약관은 기능·화면을 베끼려는 접근 자체를 막는다. 혼자 뜯어보는 실험과 비슷한 앱을 만들어 배포하는 일은 다르다. 본지가 MIT 앱을 고른 이유도 여기에 있다. MIT 라이선스는 저작권 표시와 허가 문구만 남기면 복제와 수정, 배포를 허용한다.

비어 있던 금고

가계부 앱의 금고는 설치 파일 안에 있었지만 비어 있었다. 금고를 여는 키는 Actual도 앱에 넣어 주지 않는다. 사용자가 연동 업체에 직접 가입해 받아 와야 한다.

AI가 앱을 통째로 읽고도 은행 문턱을 넘지 못한 이유다.

자주 묻는 질문 (FAQ)
Q. 핵심 기능을 서버로 옮기면 복제를 막을 수 있나
A.클라이언트에 노출되는 코드 범위는 줄어든다. 하지만 REA는 웹사이트도 분석 대상으로 삼으며, 화면과 서버 사이를 오가는 통신 규격과 데이터만 관찰해도 기능 흐름은 상당 부분 드러난다. 본지 실측에서 복제를 멈춰 세운 것은 단순 서버 코드 은닉이 아니라 외부 기관의 발급 키와 계정, 그리고 은행의 직접 동의였다.
Q. 오픈소스 앱은 복제해도 되나
A.해당 소프트웨어의 라이선스 조건이 결정한다. MIT 라이선스는 저작권 표시와 허가 문구만 보존하면 복제와 수정, 배포를 전면 허용한다. 다만 은행 연동처럼 제3자 외부 서비스에 붙는 기능은 해당 업체의 약관과 서비스 계약을 별도로 준수해야 한다.
Q. 이번 실측 결과를 상용 앱에도 적용할 수 있나
A.그대로 일반화하기는 어렵다. 본지 실측은 단일 오픈소스 MIT 앱을 대상으로 진행됐으며, 원본 소스가 설치 파일 내에 실려 배포된 특수한 환경이었다. 난독화와 코드 압축이 철저히 적용되고 서버 측 검증이 촘촘한 상용 앱이라면 분석 비용과 소요 시간이 훨씬 늘어나며, 상용 약관상 분석 시도 자체가 금지될 수 있다.

RELATED ARTICLES

RECOMMENDED STORIES