사회복지사 업무 자동화 도구 만들기 3편
결론부터 말하면, 잘 돌던 것을 버렸습니다. 작은 모델을 받치려고 만든 장치 열한 개가 두뇌를 바꾸자 필요 없어졌고, 문서 초안은 2분 22초에서 31.5초로 줄었습니다. 대신 자료가 외부 서비스로 나가게 되어 개인정보 문지기를 먼저 세웠고, 2편에서 안 하겠다고 적었던 자동 로그인도 결국 켰습니다.
시리즈 「업무 자동화 툴 만들기」 · 8편 중 3번째

AI로 생성한 그림입니다
2편을 올린 다음 날, 그 글의 주인공을 걷어냈습니다.
2편에서 저는 사무실 유휴 PC에 올린 무료 소형 모델을 재고, 쓸 만하다고 적었습니다. 그 판단 자체는 틀리지 않았습니다. 다만 그 모델을 쓰려고 제가 붙여 둔 받침대가 너무 많다는 것을 그때는 숫자로 보지 못했습니다.
이 글에 세 가지를 적습니다. 왜 잘 돌던 것을 버렸는지, 바꾸면서 무엇을 새로 막아야 했는지, 그리고 직원 네 명이 들어온 첫날 무엇이 남았는지입니다.
받침대가 열한 개였습니다
작은 모델은 문장은 쓰지만 판단은 못 합니다. 2편에도 적었듯이, 장부 처리의 큰 갈래 여섯 개를 고르게 했더니 그것조차 틀렸습니다.
그래서 저는 판단을 코드로 대신했습니다. 무슨 일인지 고르는 코드, 문서 종류를 짐작하는 코드, 빠진 항목을 묻는 코드, 참고할 문서를 찾는 코드를 하나씩 만들었습니다. 이렇게 늘어난 스크립트가 스물여덟 개였고, 그중 열한 개가 「모델이 약해서」 생긴 것이었습니다.
두뇌를 바꾸면 이 열한 개가 통째로 필요 없어집니다. 제가 고른 것은 구독에 포함된 AI 에이전트입니다. 제가 지금 이 시스템을 만들 때 쓰는 도구와 같은 종류로, 문장만 만드는 것이 아니라 스스로 파일을 읽고 쓰고 장부에 넣는 물건입니다.
| 2편 (소형 모델) | 3편 (AI 에이전트) | |
|---|---|---|
| 판단 | 코드가 대신 — 스크립트 11개 | 모델이 직접 |
| 문서 초안 | 142.7초 | 31.5초 |
| 자료가 나가는 곳 | 사무실 안에서 끝 | 외부 서비스로 나감 |
| 값 | 0원 | 구독료 (이미 쓰던 개인 구독) |
바꾸는 데 든 시간은 이틀입니다. 새로 만든 것보다 지운 것이 많은 이틀이었습니다.
속도는 네 배 넘게 빨라졌습니다
유휴 PC에서 결과보고서 A4 한 장을 시켜 재 봤습니다. 31.5초입니다. 2편의 같은 작업이 142.7초였으니 4분의 1 아래로 내려왔습니다.
제가 정해 둔 제한 시간은 180초입니다. 그 6분의 1이라 여유가 넉넉합니다. 계획서 일곱 건을 잇달아 시켜 봤을 때도 구독 한도 경고 없이 일곱 건이 다 나왔습니다. 다만 이건 저 혼자 썼을 때의 숫자입니다. 사람이 늘면 다시 재야 합니다.
한 가지 짚어 둘 것이 있습니다. 이 속도는 유휴 PC의 성능과 거의 상관이 없습니다. 계산이 그 PC에서 일어나지 않고 밖에서 일어나기 때문입니다. 2편에서는 PC 사양이 곧 속도였는데, 이제는 아닙니다. 얻은 것과 잃은 것이 정확히 여기서 갈립니다.
잃은 것 — 자료가 사무실 밖으로 나갑니다
2편 방식의 가장 큰 장점은 아무것도 밖으로 나가지 않는다는 것이었습니다. 그 장점을 이번에 포기했습니다.
그래서 순서를 하나 못 박았습니다. AI를 부르기 전에 개인정보를 먼저 검사합니다.
- 주민등록번호·전화·계좌·카드처럼 번호로 된 것은 발견되면 거기서 끝입니다. AI를 아예 부르지 않습니다
- 숫자 사이에 공백을 넣거나 하이픈을 빼거나 여러 줄에 나눠 적어도 잡히도록, 모양을 고른 뒤에 검사합니다
- 검사 자체가 실패하거나 결과가 애매하면 통과가 아니라 차단입니다
- 차단 기록에는 원문을 남기지 않습니다. 무엇이 걸렸는지 종류만 적습니다
중요한 것은 이 검사를 건너뛸 길 자체를 없앤 것입니다. AI를 부르는 통로를 함수 하나로 좁히고, 그 함수의 첫 줄에 검사를 넣었습니다. 봇 코드가 AI를 직접 부를 수 없으니, 검사를 건너뛰는 경로가 아예 없습니다. 자동 점검 예순여섯 개가 여기에 붙어 있습니다.
이름을 가리려다 멀쩡한 낱말을 깨뜨렸습니다
처음에는 이름도 자동으로 가리게 했습니다. 사람 이름 같으면 가운데 글자를 별표로 바꾸는 방식입니다.
결과보고서 한 건을 뽑아 봤더니 여섯 군데가 깨져 있었습니다.
- 사포질 → 사*질
- 공예품 → 공*품
- 성취감 → 성*감
- 사용됨 → 사*됨
이름을 규칙으로 짐작하게 한 것이 잘못이었습니다. 한국어에서 두세 글자 낱말은 이름과 생김새가 같습니다. 그래서 짐작을 그만두고, 명단에 적힌 이름만 가리도록 바꿨습니다. 지금 그 명단은 비어 있습니다.
번호로 된 것은 계속 막히므로 개인을 특정할 위험은 그대로 낮습니다. 그리고 결재에 올리는 서류는 애초에 실명이 들어가야 쓸 수 있는 물건이라, 문서에 쓰는 이름은 실명 그대로 두기로 했습니다.
승인을 부탁이 아니라 잠금장치로 만들었습니다
AI가 파일을 직접 쓴다는 것은, 승인 없이도 쓸 수 있다는 뜻입니다. 지시서에 「저장하기 전에 물어보라」고 적어 두는 것만으로는 부족합니다.
그래서 두 번 나눠 부릅니다.
- 1차 — 읽기만 가능한 상태로 부릅니다. 자료를 읽고 「이렇게 하겠습니다」를 냅니다. 이 단계에서는 파일을 물리적으로 못 고칩니다
- 그 내용을 채팅 채널에 미리보기로 보냅니다
- 사람이 「진행」이라고 답합니다
- 2차 — 그때 비로소 쓰기가 열린 상태로 이어서 부릅니다
지시를 어기려 해도 1차에서는 쓸 수 있는 권한 자체가 없습니다. 규칙을 지키라고 부탁하는 대신, 어길 수 없게 만든 것입니다. 이 구조가 이번 개편에서 제일 마음에 드는 부분입니다.
자동 점검이 통과했는데 또 틀렸습니다
2편에서 「점검 통과는 고쳤다는 뜻이 아니다」라고 적었는데, 이번에도 같은 자리에서 걸렸습니다. 세 가지를 실제로 시켜 보고서야 알았습니다.
첫째, 장부를 여는 방식 때문에 조회가 통째로 실패했습니다. 1차는 읽기 전용이라 곁딸린 파일을 만들 권한이 없는데, 장부가 그 파일을 요구하는 방식으로 되어 있었습니다. 자동 점검은 쓰기가 열린 상태에서 돌기 때문에 이걸 못 잡습니다.
둘째, 사업명 칸과 세부활동 칸을 헷갈려 거짓말이 문서에 들어갔습니다. 「감성목공예」는 세부활동이고 사업명은 따로 있는데, 사업명 칸에서 찾아 아무것도 안 나오자 **「목표가 설정되어 있지 않다」**고 결과보고서에 적었습니다. 자료가 없는 게 아니라 엉뚱한 칸을 본 것입니다. 지시서에 「한쪽에서 0건이 나오면 반대 칸으로 다시 찾아라」를 못 박았습니다.
셋째, 팀 채널 알림에 붙인 머리 기호가 화면에 안 나왔습니다. 나가는 글을 검사하는 문지기가 그림문자를 모두 지우고 있었습니다. 점검은 통과하는데 실제로 보내면 없습니다.
세 가지 다 실제로 시켜 봐야만 드러납니다. 이 시리즈에서 두 번째로 같은 교훈을 적습니다.
PC를 사람 없이 돌리려다 하루를 썼습니다
2편에서 저는 이렇게 적었습니다.
자동 로그인을 걸면 사람이 안 가도 되지만, 그건 하지 않기로 했습니다.
이번에 뒤집었습니다. 왜 그랬는지 그대로 적겠습니다.
봇을 창 없이 저절로 돌게 하려고, 윈도우 작업 스케줄러의 「로그온 여부에 상관없이 실행」을 켰습니다. 창은 사라졌습니다. 그런데 미리보기까지는 되는데 「진행」을 하면 오류가 났습니다.
헛짚은 것부터 적습니다. 재부팅해도 그대로였고, 로그아웃 후 다시 로그인해도 그대로였고, 설정 파일도 부르는 방식도 멀쩡했습니다. 손으로 돌리면 넷 다 성공했습니다. 차이는 딱 하나, 봇이 어느 자리에서 도느냐였습니다.
그 방식으로 돌면 봇이 사람 화면과 분리된 자리에서 도는데, AI 에이전트는 거기서 다른 프로그램을 하나도 띄우지 못합니다. 에이전트는 스스로 이것저것 실행해야 일이 되는 물건이라, 이건 곧 전부 멈춘다는 뜻입니다.
고친 방법은 이렇습니다. 봇을 사람 화면과 같은 자리에서 돌리되, 창만 감추는 작은 실행 파일을 하나 만들어 그것으로 띄웠습니다. 그런데 이 방식은 윈도우에 로그인이 되어 있어야 봇이 삽니다. 그래서 자동 로그인을 켰습니다.
여기에 절전을 껐습니다. PC가 잠들면 봇도 멈추기 때문입니다. 화면만 꺼지는 것은 괜찮습니다. 이제 그 PC는 전원만 들어와 있으면 손댈 것이 없습니다.
옮기는 데 USB를 썼습니다
만드는 곳은 제 PC였고, 실제로 도는 곳은 사무실 유휴 PC입니다. 옮겨야 했습니다.
개발자들이 쓰는 방식(저장소에서 내려받기)을 쓰려면 그 PC에 제 개인 계정을 로그인해야 합니다. 그러지 않기로 했습니다. 대신 짐을 폴더 하나로 싸서 옮겼습니다. 21MB입니다. 여기에 위키 문서 381개와 장부, 프로그램이 쓰는 부품까지 다 들어 있어서, 받는 쪽에서는 풀어 놓기만 하면 됩니다.
실제로는 USB 대신 기관 공유폴더를 썼습니다. 다음에 파일을 고쳐 보낼 때도 같은 길을 씁니다.
한 가지 더. 그동안 클라우드 장부에 쌓아 둔 407건을 그대로 옮겼고, 옮긴 뒤 행 수와 합계가 맞는지 대조했습니다. 옮기는 일에서 제일 중요한 건 옮기는 게 아니라 옮긴 뒤에 세어 보는 것입니다.
직원 네 명이 들어왔습니다
채팅 서버에 칸을 열한 개 만들었습니다.
- 개인 칸 — 사람마다 하나. 자기 칸에서만 말합니다
- 팀 칸 — 팀별로 하나
- 대장 칸 세 개 — 시간외근무·외근·차량. 전 직원이 보되 쓰지는 못합니다. 봇만 적습니다
여기서 정한 것 두 가지가 나중에 계속 영향을 줍니다.
첫째, 누구인지는 칸이 아니라 계정으로 가릅니다. 어느 칸에서 말하든 저장은 말한 사람의 폴더로 갑니다. 칸에 주인을 적어 두는 방식은 쓰지 않았습니다. 그렇게 하면 남의 칸에 잘못 쓸 때 남의 폴더에 저장되는 사고가 생깁니다.
둘째, 부장님도 다른 직원과 똑같이 자기 칸만 봅니다. 관리 목적으로 전 직원 칸을 열어 두지 않았습니다.
참고 자료는 나누지 않았습니다. 사업 폴더 381개는 모두가 함께 봅니다. 남이 잘 쓴 문서를 보고 배울 수 있어야 하고, 담당자가 바뀌어도 자료가 끊기지 않아야 하기 때문입니다. 사람마다 갈라 두는 것은 새로 쓴 것과 문체뿐입니다.
일정을 넣으면 팀 칸에 한 줄이 뜹니다
첫 협업 기능으로 이걸 만들었습니다. 자기 칸에서 일정을 넣으면 팀 칸에 알림이 갑니다.
▪ [이름] 님이 일정을 넣었습니다
9월 3일 · [사업명] · 자조모임
만들면서 걸린 자리가 하나 있습니다. AI가 돌려준 답변 글을 읽어서 「일정이 저장됐구나」를 판단하면 안 된다는 것입니다. 답 문장이 매번 다르게 나와서 못 믿습니다.
그래서 저장 전에 장부의 일정 줄마다 지문을 떠 두고, 저장 뒤에 견줍니다. 새로 생겼거나 바뀐 줄만 골라 알립니다. 글을 읽는 대신 장부를 직접 세는 방식입니다.
이 기능은 코드 검토에서 여섯 군데를 고쳤습니다. 그중 하나만 적으면, 알림은 반드시 마지막에 돌려야 합니다. AI는 장부에 먼저 넣고 답을 나중에 냅니다. 답이 막히거나 시간을 넘겼을 때 위에서 멈춰 버리면, 장부에는 들어갔는데 아무에게도 안 알려지는 일정이 생깁니다.
이럴 땐 안 만드는 게 낫습니다
자료가 밖으로 나가면 안 되는 업무라면 이 방식은 맞지 않습니다. 2편 방식은 사무실 안에서 끝났지만 이건 아닙니다. 상담 기록처럼 민감한 것은 애초에 이 통로에 올리지 않는 것이 맞습니다.
구독 계정으로 여럿이 쓰는 것이 약관에 맞는지 저는 확인하지 못했습니다. 지금은 제 개인 구독으로 저 혼자 썼고, 직원에게 정식으로 열기 전에 기관 계정으로 갈아탈 계획입니다. 개인 계정으로 직원 업무를 돌리면 그 내용이 개인 이력에 쌓입니다.
항상 켜 둔 PC와 자동 로그인을 감당할 수 있어야 합니다. 위에 적은 대로 이건 보안을 하나 내려놓는 선택입니다.
시간은 여전히 듭니다. 장비값이 0원이라는 말과 품이 안 든다는 말은 다릅니다. 이번에도 제일 오래 걸린 것은 코드가 아니라 틀린 것을 찾아 지시서를 고치는 일이었습니다.
든 시간과 돈
이틀입니다. 하루는 두뇌를 바꾸고 우회 장치를 걷어내는 데, 하루는 옮기고 채널을 만들고 직원을 받는 데 썼습니다.
돈은 0원이 아니게 됐습니다. 장비는 그대로 있던 것이지만, 이제 AI 구독료가 듭니다. 지금은 원래 쓰던 개인 구독을 그대로 씁니다.
다음 단계
지금 막힌 곳은 기술이 아닙니다. 자료입니다.
봇이 그 사람 문체로 문서를 쓰려면 그 사람이 쓴 문서가 있어야 하는데, 지금 있는 건 제 것뿐입니다. 그래서 직원들에게 사업별로 계획서 다섯 개와 결과보고서 다섯 개를 부탁했습니다.
처음에는 2년치를 달라고 했다가 줄였습니다. 직원들이 1년치도 너무 많다고 했기 때문입니다. 이런 요청은 줄이는 게 맞습니다. 안 모이면 기능이 시작을 못 합니다.
2편에서 「다음 편에 시범 운영 결과를 적겠다」고 했는데, 아직 못 적습니다. 두뇌를 갈아 끼우는 데 이틀이 더 들어서 그만큼 밀렸습니다. 다음 편에서 적겠습니다. 안 쓰이면 안 쓰였다고 그대로 쓰겠습니다.
자주 묻는 질문
2편 방식과 3편 방식 중 어느 쪽을 따라 하면 되나요?
자료를 밖으로 못 내보내는 기관이면 2편입니다. 느리고 손이 많이 가지만 사무실 안에서 끝납니다. 그 제약이 없다면 3편이 훨씬 적게 만들고 적게 고칩니다. 저는 개인정보를 먼저 걸러 내는 문지기를 세우는 조건으로 3편을 골랐습니다.
무료 모델을 버린 게 아깝지 않나요?
만든 것 중 열한 개를 버렸으니 아깝긴 합니다. 다만 그 열한 개는 작은 모델을 받치려고 만든 것이라, 두뇌가 바뀌면 남겨 둘 이유가 없습니다. 반대로 개인정보 문지기·장부 관문·미리보기 승인처럼 두뇌와 상관없는 것은 그대로 살렸습니다. 무엇이 두뇌에 딸린 것이고 무엇이 아닌지를 구분해 두면 이런 교체가 쌉니다.
직원이 늘면 속도가 견디나요?
모릅니다. 계정이 하나라 요청을 한 건씩 줄 세워 처리합니다. 저 혼자 일곱 건을 잇달아 시켰을 때는 한도에 안 걸렸지만, 여러 명이 동시에 쓰면 뒷사람이 기다립니다. 시범 운영에서 집중해서 볼 항목으로 적어 뒀습니다.
이 글은 AI로 초안을 쓰고 사람이 확인해 다듬었습니다.
시리즈 「업무 자동화 툴 만들기」 전체 보기
직접 써 보기
양식 없이, 네 칸만 채우면 사업계획서 초안이 나옵니다
이 블로그와 별도로 운영하는 공개 웹앱입니다. 가입하면 매달 다섯 번까지 무료.
새 글과 새 무료 프로그램이 나오면 메일로 알려드려요.
메일로 소식 받기 (새 창에서 열림)