사람 방식대로, 그러나 떠넘기지 말고
품앗이가 AI와 함께 업무 자동화를 하며 남긴 실패 기록을 다른 조직이 다시 쓸 수 있게 옮긴 글입니다. 묶음 전체는 API 없는 업무 프로그램 자동화에서 볼 수 있습니다.
요지
자동화의 첫 질문은 「사람은 지금 이걸 어떻게 하나」입니다. 그 절차가 AI에게도 단순하면 그대로 옮깁니다. 그런데 이 원칙을 「어려운 부분은 사람이 하면 된다」로 읽으면 안 됩니다. 사람이 브라우저에서 눌러서 되는 일은 자동화도 됩니다. 다만 금융 보안처럼 일부러 세운 벽은 벽으로 인정하고, 그때는 입력이 아니라 결과물 쪽을 자동화합니다.
1. 사람이 이미 하는 방식이 가장 단순하고, 대개 유일한 길이다
한 의료사협에서 검사기관 포털의 검사 결과를 받아 오는 자동화를 만들 때였습니다. AI는 「날짜로 묶어 한꺼번에 내려받기」라는 경로를 혼자 파다가 서버 오류, 빈 자료, 형식 미설정에 차례로 막혔습니다. 정작 의사는 「환자 이름 입력, 확인, 개인별 출력」 순서로 일하고 있었고, 자료가 실제로 나오는 길은 그 개인별 조회 하나뿐이었습니다. 사람이 쓰는 길을 두고 사람이 안 쓰는 일괄 경로를 붙잡고 있었던 셈입니다.
그 뒤로는 착수 전에 사람이 지금 하는 절차를 먼저 적습니다. 그 절차가 AI에게도 단순하면 그대로 복제합니다. 더 영리해 보이는 일괄 처리나 우회 경로는 사람 방식이 정말 안 될 때만 꺼냅니다.
막혔을 때도 우회로를 쌓기 전에 사람 방식으로 한 번 끝까지 눌러 봅니다. 우회한 결과가 원래 길과 똑같이 나오면, 그건 길이 문제가 아니라 원인을 잘못 짚었다는 신호입니다. 실제로 같은 현장에서 사람이 한 번 눌러 보면 끝났을 일을 자동화 전제 위에서 몇 시간 판 일이 있었습니다.
2. 「사람은 되는데 AI는 안 된다」는 말은 아직 못 푼 기술이다
같은 포털에서 화면 없이 도는 브라우저로 파일을 내려받는 시도가 세 번 깨졌습니다. AI는 「포털 자동 다운로드는 불안정하니 의사가 직접 받는 편이 안정적」이라고 넘겼습니다. 품앗이는 이 판단이 틀렸다고 봅니다. 사람이 브라우저로 눌러서 받는 파일이면 자동화도 받을 수 있습니다. 진짜 원인은 화면 없는 브라우저의 다운로드 처리가 깨지는 데 있었고, 한 층 아래로 내려가 로그인 세션을 그대로 쓴 직접 요청으로 바꾸자 바로 서버 응답을 받았습니다. 자세한 방법은 남의 서버를 두드릴 때 3절에 있습니다.
화면 조작이 막히면 그 아래 층을 봅니다. 로그인 세션을 이어받은 직접 요청, 공개 API, 브라우저가 실제로 주고받는 요청 기록이 그 층입니다. 그리고 지금 이 어려운 한 걸음을 가장 바쁜 사람에게 미루고 있지는 않은지 스스로 물어봅니다.
다만 끈질긴 것과 두드리는 것은 다릅니다. 아래 층으로 내려가더라도 남의 서버에 거는 부하의 상한은 그대로 지킵니다.
3. 금융 보안 PC는 합성 클릭을 막는다, 그건 벽이다
한 협동조합의 회계 PC에서 회계 프로그램의 「엑셀 다운로드」 버튼을 자동으로 누르려 했습니다. 커서를 버튼 위에 올리면 설명 풍선까지 떴는데, 클릭만 아무 반응이 없었습니다. 설명 풍선이 떴다는 것은 좌표가 맞다는 증거입니다. 범인은 그 PC에 깔린 금융·공인인증 보안 모듈이었습니다. 이 모듈은 마우스 이동은 그냥 두고, 프로그램이 주입한 클릭과 키 입력만 골라 무효로 만듭니다.
이건 고장이 아니라 일부러 만든 금융 보안입니다. 피해 갈 길은 보안 모듈을 끄는 것뿐인데, 조합의 금융 거래와 세금 신고가 오가는 PC에서 그걸 끄는 일은 해서는 안 됩니다. 이 경우에는 「못 한다」고 말하는 것이 맞습니다. 빈손 보고가 아니라 벽을 확인한 보고입니다.
그래서 화면 자동화를 설계하기 전에 대상 PC에 어떤 보안 프로그램이 도는지 먼저 봅니다. 금융 보안 모듈이 있으면 방향을 바꿔 입력이 아니라 출력을 자동화합니다. 버튼은 사람이 누르고, 그 결과로 떨어지는 파일을 AI가 지켜보다 거두어 갑니다. 반자동이지만 사람 몫은 버튼 한 번으로 줄어듭니다.
4. 사람이 쓰는 앱과 AI가 쓰는 앱은 설계가 다르다
품앗이 매장의 발주 시스템은 처음부터 「사람이 화면에 들어와 입력하는 앱」이 아니라 「담당자의 AI가 초안과 연락처와 재고를 다루고, 사람은 마지막 버튼만 누르는 앱」으로 설계했습니다.
- 최종 발송은 사람의 로그인 토큰이 있어야만 되게 했습니다. AI에게는 비밀번호가 없으니 혼자서는 보낼 수 없습니다. 규칙으로 막은 것이 아니라 인증으로 막았습니다.
- 재고 표가 없던 매장이라 발주부터 시작해 재고를 차근차근 쌓아 가기로 했습니다.
- 예전에 다른 AI가 만든 시스템은 참고만 하고 베끼지 않았습니다.
판매 자료를 회계 프로그램의 입력 양식으로 바꾸는 반자동 작업에서도 같은 생각이 통했습니다. 한 협동조합의 기록에서 옮깁니다.
- 핵심 자산은 판매 프로그램의 품목과 회계 프로그램의 품목 코드를 잇는 대응표였습니다. 두 프로그램의 코드 체계가 완전히 달라서 이름으로 맞출 수밖에 없었고, 그래서 사람의 승인이 필요했습니다.
- 매칭 결과를 등급으로 나눠 사람 부담을 갈랐습니다. 자동 확정, 추천만 승인, 규격 선택, 판단 필요, 회계 프로그램에 미등록의 다섯 칸입니다.
- 상품명은 농가끼리 겹쳐서, 같은 이름의 상품을 31~34곳 농가가 냈고, 이름으로 이어 붙이면 한 농가의 매출이 두 배로 나왔습니다. 농가별로 따로 뽑은 원본 파일이 유일하게 정확한 출처였습니다.
- 사람 이름도 마찬가지여서 조합원 명부에 같은 이름이 11명 있었고, 생산자와 소비자 조합원을 가르는 유형 칸으로 구분해야 했습니다.
- 비밀번호와 데이터베이스 키는 서버 함수 안에만 두었습니다. 화면 쪽 코드에 두면 누구나 열어 볼 수 있습니다.
도구 메모
- 윈도 PC의 금융 보안 모듈 확인: PowerShell에서
Get-Process결과를 보안 모듈 이름(nProtect, TouchEn, AnySign, veraport 등)으로 거른다. 하나라도 있으면 클릭 자동화는 통하지 않는다고 본다. - 설명 풍선은 뜨는데 클릭만 안 먹으면 좌표를 다듬지 말고 보안 모듈부터 의심한다.