바이브 코딩과 클라우드 AI 에이전트 작업을 위한 안전한 데이터 준비 실무.
접근법의 핵심: 업무 데이터는 회사 내부에 남는다. 외부 AI 환경으로는 익명화한 사본이나 이미 마스킹된 문서만 전달한다. 개인정보의 복원은 로컬에서 수행한다.
산업안전보건 분야에서 인공지능을 실제로 쓰려고 하면 곧바로 원본 데이터 문제에 부딪힌다. 업무용 표와 사고 자료에는 성명, 사번, 협력업체명, 연락처, 금액 등 위험성 평가 없이 외부 서비스에 올릴 수 없는 정보가 들어 있을 수 있다.
동시에 쓸모 있는 도구를 만들려면 바로 그 실제 데이터 구조가 필요하다. 대시보드는 표의 실제 필드와 관계를 이해해야 하고, 사고 분석 에이전트는 경위서·최초 보고·기타 자료의 구조를 이해해야 한다. 그래서 우리는 데이터와 도구를 분리했다.
그 결과 오프라인 마스킹 도구는 두 방향의 기반이 되었다. 하나는 이후의 바이브 코딩을 위해 익명화한 Excel 템플릿을 준비하는 것, 다른 하나는 클라우드 AI 에이전트로 사고 자료를 분석하기 위해 Word 문서를 준비하는 것이다.

처음 하는 사람에게는 보기보다 간단하다. 글 끝의 「바로 쓰는 프롬프트」에 있는 Prompt 1은 특별한 코드 편집기에 붙여 넣을 필요가 없다. 애플리케이션이나 코드를 만들고 수정할 수 있는 AI 서비스에 일반 텍스트로 입력하면 된다. 방법은 늘 같다. 개발 모드를 열고 Prompt 1을 통째로 붙여 넣어 첫 버전을 받은 뒤, 확인하고 같은 대화에서 Prompt 2, Prompt 3, Prompt 4를 차례로 준다.
실제로는 선택지가 여럿이다. ChatGPT에서는 「업무」 모드나 Codex(계정에서 제공되는 경우), Claude에서는 Artifacts, Gemini에서는 Canvas, Perplexity에서는 Create files and apps 모드(요금제에서 제공되는 경우), Replit에서는 Agent. 예를 들어 ChatGPT라면 「업무」나 Codex를 열고 새 작업을 만든 뒤 Prompt 1의 본문을 메시지 칸에 붙여 넣으면 된다. Gemini에서는 「파일 추가」 → Canvas → 프롬프트 붙여 넣기. Perplexity에서는 Create files and apps를 고르고 프롬프트를 입력줄에 붙여 넣는다. Replit에서는 Agent를 열고 필요하면 먼저 Plan을 켠 다음 프롬프트를 붙여 넣고, 빌드가 끝나면 Preview에서 결과를 확인한다.
모드 이름은 발행 시점 기준이며, 이 서비스들의 화면과 기능 제공 여부는 시간이 지나며 바뀔 수 있다.
처음이라면 ChatGPT, Claude, Gemini 중 하나로 시작하기를 권한다. 일상적인 말로 주고받으며 요구사항을 단계적으로 다듬기가 더 쉽다. 이미 프로그램이 있고 코드를 더 깊이 손봐야 한다면 Replit, Codex 같은 전문 개발 도구가 편하다.
중요:어떤 플랫폼을 고르든 요청 첫머리에 다음 조건을 따로 못 박아야 한다. 「결과물은 자체 완결형 HTML 파일 하나이며, 외부 API·CDN·네트워크 의존성이 없고 인터넷을 끈 상태에서도 동작할 것」. 그리고 또 하나의 원칙: 개인정보가 담긴 실제 업무용 Excel/Word 파일은 바이브 코딩 서비스에 올리지 않는다. 개발에는 검증된 익명화 사본이나 테스트 파일만 쓴다.
대량 데이터 분석에서는 표의 구조를 지키는 것이 중요하다. 시트와 열 이름, 데이터 형식, 날짜, 분류, 「사업장 — 공장 — 구역」 위계, 공정 등의 속성이다. 실제 성명과 식별번호는 프로그램의 껍데기를 만드는 데 필요하지 않다.
그래서 업무용 Excel 표를 로컬 HTML 마스킹 도구에 불러온다. 사용자 컴퓨터의 프로그램이 민감할 수 있는 값을 찾아 치환 전에 보여 주고, 규칙을 손으로 고칠 수 있게 한다. 예: 「이반 이바노비치 이바노프 → Employee_001」, 「협력업체 유한회사 → Organization_001」, 「사번 → ID_001」.
결과물은 원래 표의 논리를 유지한 익명화 사본이다. 이 사본만으로도 AI와 함께 프로그램을 만들 수 있다. 필터, KPI, 상호작용 차트, 검색, 레코드 단위 상세 보기까지. 원본 Excel 파일은 회사 안에 남는다.
개발이 끝난 뒤에는 실제 데이터베이스가 만들어진 HTML 안에 들어 있어서는 안 된다. 완성된 프로그램에는 원본 Excel을 로컬에서 불러오는 버튼을 둔다. 파일은 사용자 컴퓨터의 브라우저가 읽고, 대시보드는 로컬 세션 안에서 지표를 다시 계산한다. 이것이 이 시리즈의 두 번째 단계가 될 것이다.
그 모드를 만들기 위한 기본 과제 정의는 Prompt 1과 Prompt 2에 있다(글 끝의 「바로 쓰는 프롬프트」 참조).




마스킹 도구의 두 번째 용도는 사고 관련 문서를 클라우드 AI에서 분석할 수 있도록 준비하는 것이다. 초기 단계에서는 최초 보고, 경위서, 근로자 진술, 그 밖의 Word 자료가 대상이 될 수 있다.
도구는 익명화된 Word 사본을 만든다. 성명과 선택한 다른 값들은 일관된 기호로 치환된다. 같은 사람이 문서 묶음 전체에서 같은 기호를 유지하는 것이 중요하다. 그렇지 않으면 에이전트가 진술과 사건 사이의 연결을 잃는다.
동시에 로컬에서 암호화된 복원 키가 별도 파일로 만들어진다. 키에는 기호와 원래 값의 대응이 담긴다. 키에는 비밀번호를 설정하며, 이 비밀번호는 문서와 함께 전달되지 않고 클라우드 에이전트에도 저장되지 않는다.
그다음 AI에는 마스킹된 Word만 전달된다. 에이전트는 시간 순서를 분석하고, 진술을 대조하고, 모순을 찾아내고, 확인 질문을 만들고, 인과관계를 살피고, 조사 분석 자료의 초안을 준비할 수 있다. 물론 공식 조사와 최종 판단은 위원회와 책임 있는 전문가의 몫으로 남는다.
보완된 마스킹 문서가 클라우드에서 돌아오면 복원은 다시 로컬에서 이루어진다. 오프라인 도구에 세 가지를 넣는다. 받은 Word, 그에 맞는 키 파일, 그리고 비밀번호. 프로그램은 본문에 기호가 남아 있는 자리를 원래 값으로 되돌린다.
이렇게 하면 클라우드 에이전트는 사건의 논리를 다루면서도 원래의 성명이나 마스킹된 다른 값은 받지 않는다. 복원 키와 비밀번호는 클라우드 환경으로 전달되지 않는다.
Word 양방향 작업의 구조는 Prompt 3에 설명되어 있다(글 끝의 「바로 쓰는 프롬프트」 참조).



마스킹 도구 자체도 바이브 코딩으로 만들었다. 여기서 중요한 것은 이 방식을 「프로그램 하나 만들어 줘」라는 지시로 이해하고 완벽한 결과를 기대하지 않는 것이다. 실제 진행 방식은 달랐다. 기능 하나를 말로 정하고, 확인하고, 결함이나 새 요구사항을 기록한 뒤에야 다음 버전으로 넘어갔다.
첫 번째 요구사항은 설치가 필요 없는 자체 완결형 HTML 파일 하나였다. 이후 치환 결과의 수동 확인, 「추가로 치환」 목록, 「바꾸지 않음」 목록, 현재 세션 비우기, Word 지원, 별도 암호화 키 생성, 문서의 로컬 복원이 더해졌다.
별도의 단계는 기술적 자체 점검이었다. 이번에 AI가 맡은 역할은 개발자가 아니라 자기 코드의 감사자였다. fetch, XMLHttpRequest, WebSocket, 외부 라이브러리, CDN, API, iframe, 로컬 저장소 등 데이터가 컴퓨터 밖으로 나가거나 작업 종료 후에도 남을 수 있는 모든 장치를 점검하게 했다. 이런 점검이 IT·정보보안 부서의 검토를 대신하지는 못하지만, 시제품 단계에서 뻔한 위험은 없앨 수 있다.
점검용 요청문은 Prompt 4에 있다(글 끝의 「바로 쓰는 프롬프트」 참조).

하나의 로컬 도구가 서로 다른 두 과제를 해결한다. Excel에서는 안전한 템플릿을 준비하고, 그것을 바탕으로 AI와 함께 대량 데이터의 오프라인 분석을 만들 수 있다. Word에서는 마스킹된 개인정보를 드러내지 않고 사고 자료를 클라우드 AI에 넘긴 뒤, 분석이 끝나면 로컬에서 문서를 복원할 수 있다.
핵심 원칙은 그대로다. 먼저 과제 해결에 AI가 알 필요 없는 것을 외부 범위에서 빼고, 그다음에 그 능력을 쓰는 것이다.
다음 글들에서는 이 구조의 두 갈래를 따로 보여 주려 한다. 익명화한 Excel 템플릿에서 실제 데이터베이스를 로컬로 불러오는 자체 완결형 HSE 대시보드를 어떻게 만드는지, 그리고 사고 조사 자료 분석에 AI 에이전트를 어떻게 쓰는지이다.
이 문구들은 단계적 개발과 개별 기업 상황에 맞춘 조정을 염두에 둔 것이다.
Excel (.xlsx)과 Word (.docx)의 데이터를 마스킹하는 자체 완결형 로컬 애플리케이션을 만들어라.
애플리케이션 형식: 일반 브라우저에서 열리고 추가 소프트웨어 설치 없이 동작하는 단일 HTML 파일.
필수 요건:
1. 실행 후 애플리케이션은 인터넷에 접속해서는 안 된다.
2. 외부 API, telemetry, 클라우드 처리, 사용자 파일의 자동 전송을 쓰지 않는다.
3. 필요한 라이브러리는 모두 HTML 안에 로컬로 포함한다.
4. 사용자가 컴퓨터에서 Excel/Word 파일을 하나 또는 여러 개 불러올 수 있어야 한다.
5. 원본 파일은 수정하지 않는다. 결과는 별도 사본으로 저장한다.
6. 모든 처리는 현재 브라우저 탭의 메모리 안에서 수행한다.
7. 현재 세션을 완전히 비우는 버튼을 추가한다.
마스킹 기능:
- 성명, 이니셜이 붙은 성, 그 밖에 선택한 개인정보를 찾는다;
- 기관명과 사용자가 직접 지정한 다른 값을 찾는다;
- 필요하면 번호, 연락처, 금액을 마스킹한다;
- 같은 원래 값은 한 세션 안에서 같은 기호를 받아야 한다;
- 저장 전에 「위치 / 이전 / 이후」 형식으로 치환 목록을 사용자에게 보여 준다;
- 어떤 치환이든 손으로 끄거나 바꿀 수 있게 한다;
- 「추가로 치환」 입력란을 둔다;
- 치환보다 우선하는 「그대로 유지」 입력란을 둔다.
Excel에서는 표의 구조와 이후 분석에 필요한 필드를 유지한다. Word에서는 문서 구조를 기술적으로 가능한 만큼 유지한다.
첫 버전을 만든 뒤에는 자동 인식의 한계와 사용자가 반드시 직접 확인해야 할 부분을 따로 정리해 알려라.로컬 HTML 마스킹 도구를 보완해, 이후 AI로 분석 프로그램을 개발할 때 쓸 수 있는 Excel 템플릿을 안전하게 준비하도록 하라.
목표: AI가 업무용 표의 구조는 보되, 실제 개인정보와 선택된 다른 민감한 값은 보지 못하게 한다.
요건:
1. 사용자가 치환 대상으로 지정하지 않았다면 시트 이름, 열 제목, 데이터 형식, 날짜, 분류, 위계 속성을 유지하라.
2. 성명은 Employee_001, Employee_002 같은 일관된 기호로 치환하라.
3. 기관명은 Organization_001, Organization_002 같은 기호로 치환하라.
4. 식별번호와 사번이 마스킹 대상으로 선택되었다면 ID_001, ID_002 같은 기호로 치환하라.
5. 같은 원래 값은 현재 세션에서 처리하는 모든 Excel 파일에서 같은 치환을 받아야 한다.
6. 모든 치환의 예비 목록을 보여 주고 사용자가 손으로 고칠 수 있게 하라.
7. 프로그램이 쓰지 않는다는 이유만으로 행과 열을 지우지 마라.
8. 원본 파일을 수정하지 마라.
9. 처리 후 익명화한 사본을 따로 내려받을 수 있게 하라.
10. 눈에 띄는 경고를 넣어라: 결과를 외부 AI에 넘기기 전에 사용자는 익명화된 파일을 직접 확인해야 한다.
중요: Excel은 역방향 복원이 필요 없다. 실제 업무 데이터베이스는 회사 내부에 남고, 익명화 사본은 앞으로 만들 HTML 대시보드의 논리와 화면을 설계하는 데만 쓴다.자체 완결형 HTML 마스킹 도구를 보완해 Word (.docx)와 양방향으로 작업할 수 있게 하라.
시나리오:
1. 사용자가 사고와 관련된 원본 Word 문서를 불러온다.
2. 프로그램이 로컬에서 성명, 기관명, 그 밖에 선택된 값을 일관된 기호로 치환한다.
3. 사용자가 치환 목록을 확인하고 승인한다.
4. 프로그램이 다음을 만든다:
a) 마스킹된 Word 문서;
b) 「기호 ↔ 원래 값」의 정확한 대응을 담은 별도의 암호화된 키 파일.
5. 키 파일에는 사용자가 10자 이상의 비밀번호를 설정한다. 비밀번호를 애플리케이션에 저장하지 말고, 키 안에 평문으로 기록하지도 마라.
6. 마스킹된 Word는 그 후 내용 분석을 위해 외부 AI 에이전트에 넘길 수 있다.
7. 보완된 Word를 받으면 사용자는 로컬 애플리케이션으로 돌아온다.
8. 복원을 위해 다음을 불러온다:
- 보완된 마스킹 Word;
- 그에 맞는 키 파일;
- 그리고 비밀번호를 입력한다.
9. 프로그램은 로컬에서 남아 있는 기호를 원래 값으로 되돌리고, 복원된 Word를 별도로 만든다.
보안 요건:
- 복원 키와 비밀번호는 절대 자동으로 네트워크로 전송되어서는 안 된다;
- 키는 마스킹된 문서와 따로 보관한다;
- 키에는 현대적인 암호화를 쓴다(예: Web Crypto API를 통한 AES-256-GCM);
- 비밀번호가 틀리면 키의 내용을 드러내지 않는다;
- 작업이 끝나면 현재 세션을 완전히 비울 수 있게 한다;
- 외부 AI가 지우거나 크게 바꾼 기호는 자동으로 복원할 수 없다는 경고를 표시한다;
- 이미지 안의 글자는 자동으로 인식하지 말고, 이미지와 로고는 눈으로 확인해야 한다고 사용자에게 분명히 알린다.
Word의 구조(문단, 표, 스타일, 머리글·바닥글, 이미지)는 기술적으로 가능한 만큼 유지하라. 원본 파일은 수정하지 마라.만들어진 HTML 애플리케이션을, 민감한 데이터를 다루는 로컬 오프라인 도구로서 기술 감사하라.
코드 전체를 점검하고, 네트워크 교신이나 사용자 파일 내용의 장기 보관을 만들 수 있는 모든 장치를 찾아 나열하라.
다음을 따로 점검하라:
- fetch;
- XMLHttpRequest;
- WebSocket;
- EventSource;
- navigator.sendBeacon;
- 외부 script src;
- 외부 CSS와 글꼴;
- CDN;
- 외부 API;
- iframe;
- HTML 폼의 자동 전송;
- Service Worker;
- localStorage;
- sessionStorage;
- IndexedDB;
- cookies;
- 라이브러리와 코드 안의 외부 URL;
- telemetry, 분석 도구, crash-reporting.
요구되는 결과:
1. 프로그램은 인터넷을 끈 상태에서도 온전히 동작해야 한다.
2. 사용자의 Excel/Word 파일이 네트워크로 전송되어서는 안 된다.
3. 복원 키와 비밀번호가 애플리케이션에 의해 자동으로 전송되거나 저장되어서는 안 된다.
4. 브라우저의 로컬 저장소를 쓴다면 그 이유를 설명하라. 원본 데이터, 키, 비밀번호에 대해서는 사용을 배제하라.
5. 애플리케이션 동작과 양립하는 범위에서 네트워크 연결과 외부 콘텐츠 삽입을 금지하는 엄격한 Content-Security-Policy를 추가하라.
6. 「모두 지우기」 명령 후에는 현재 세션의 데이터를 애플리케이션 상태에서 삭제하라.
7. 수정한 뒤 코드를 다시 점검하고 짧은 보고를 내라: 어떤 잠재적 경로를 찾았고, 무엇을 없앴고, 무엇이 남았으며 그 이유는 무엇인지.
중요: 이런 코드 자체 점검이 회사의 IT/정보보안 검토나 구체적 사용 시나리오의 적법성에 대한 법률 검토를 대신하지 않는다는 점을 명시하라.실무 원칙: 외부 AI 환경에는 검증된 익명화 사본만 넘긴다. 복원 키 파일과 비밀번호는 로컬 범위에 남아야 하며, 에이전트에게 보내는 요청에 첨부해서는 안 된다.