Mask는 LLM에 문서를 붙여 넣기 전에 민감한 정보를 토큰으로 바꿔 주는 웹 도구입니다. 등록해 둔 용어(이름·연락처·프로젝트명·거래처명 등)를 <PROJECT_1A> 같은 토큰으로 치환하고, LLM이 돌려준 결과에 담긴 토큰은 원문으로 복원합니다. 모든 처리는 브라우저에서만 이루어지며 입력한 문서는 서버로 전송되지 않습니다.
#저장소 정보
- 웹 서비스: https://xcv.kr/mask
- GitHub: https://github.com/yoonbae81/mask
#개발 배경
- “이 문서를 그대로 AI에 붙여 넣어도 괜찮을까? 이름이나 프로젝트명 같은 민감한 정보가 외부 서버로 나가는 건 아닐까?”
- “민감한 부분만 가려서 물어보고, 답변은 다시 원래 표현으로 되돌릴 수는 없을까?”
AI에 문서를 붙여 넣는 순간 그 안의 민감한 정보는 평문으로 외부에 전달됩니다. AI를 편하게 쓰더라도 민감한 정보가 외부로 나간다는 사실 자체가 문제가 될 수 있습니다. 그렇다고 매번 손으로 지우고 바꿔 적는 일은 번거롭고, 하나라도 빠뜨리기 쉽습니다.
Mask는 이 과정을 자동화합니다. 가릴 용어를 한 번 등록해 두면, 문서를 붙여 넣는 것만으로 민감한 부분이 토큰으로 바뀝니다.
#동작 화면

왼쪽에 원문을 넣고 Mask 버튼을 누르면 오른쪽에 마스킹 결과가 나타납니다. 결과는 Copy로 복사하거나 Download로 내려받아 사용하는 LLM에 그대로 붙여 넣으시면 됩니다. 가릴 용어는 상단의 Terms 페이지에서 관리하며, Terms는 서버가 아닌 브라우저에만 저장됩니다.
- 용어가 분류별 토큰으로 바뀝니다: 예시에서
Project 오로라는<PROJECT_1A>,알파테크는<INTERNAL_1A>,OMEGA와CORP는 각각<CUSTOMER_1A>,<CUSTOMER_2A>로 치환되었습니다. 같은 용어는 문서 어디에서나 같은 토큰을 받으므로, LLM은 “누구인지”는 몰라도 “같은 대상”이라는 관계는 그대로 파악할 수 있습니다. - 한국어 조사가 그대로 유지됩니다:
Project 오로라의,알파테크와처럼 조사가 붙은 표현도 용어 부분만 치환되고 조사는 남습니다. 문장 구조가 유지되어 LLM이 문맥을 이해하는 데 지장이 없습니다. - 문서 형식은 건드리지 않습니다: 제목, 목록 같은 마크다운 구조는 그대로이고 등록한 용어만 바뀝니다.
LLM의 답변을 받은 뒤에는 Restore 페이지에서 토큰을 다시 원문으로 되돌릴 수 있습니다. 캡처는 Mask 단계만 담았으며, Restore 단계의 캡처는 생략했습니다.
#설계 원칙
- 용어 사전 기반의 결정론적 매칭: 확률적으로 개인정보를 추정하는 방식이 아니라, 직접 등록한 용어와 패턴만 가립니다. 등록된 용어는 반드시 가려지고, 등록하지 않은 용어는 가려지지 않습니다.
- 놓치는 것보다 과하게 가리는 편을 택합니다: 잘못 가린 용어는 복원하면 원래대로 돌아오지만, 놓친 용어는 이미 외부로 나간 뒤입니다. 그래서 애매한 경우에는 가리는 쪽으로 기울도록 설계했습니다.
#보안 및 신뢰성
- 클라이언트에서만 실행됩니다: 마스킹과 복원은 모두 사용자의 브라우저 안에서 처리됩니다. 입력한 문서는 서버로 전송되지 않고, LLM 호출이나 API 키 입력 기능도 없습니다. 민감한 정보를 가리려고 붙여 넣는 순간 그 정보가 또 어딘가로 나가면 본말이 전도되기 때문입니다.
- Terms도 브라우저에만 저장됩니다: 가릴 용어를 등록한 Terms는 서버에 올라가지 않고 사용자의 브라우저에만 남습니다. 입력한 내용도 서버에 저장되지 않습니다.
#LLM 리버스 프록시
이 글의 중심은 위의 웹 도구이지만, 저장소에는 LLM 리버스 프록시도 함께 들어 있습니다. Claude Code 같은 AI 도구가 외부 LLM API로 보내는 요청을 중간에서 같은 방식으로 가려 주는 로컬 프로그램입니다. 설정 방법은 GitHub 저장소의 README에 정리되어 있습니다.
- 사용자 컴퓨터(
127.0.0.1)에서만 동작하는 단일 사용자용이며, DB나 세션 저장소가 없습니다. - 외부로 보내기 직전에 한 번 더 검사해, 등록된 용어가 남아 있으면 전송 자체를 하지 않습니다.
- API 주소를 바꿀 수 없는 AI 도구에는 연결할 수 없습니다.
#기술 스택 및 실행
TypeScript로 작성되었고, 웹 화면은 Svelte 기반입니다. 설치 방법, Terms 설정, 프록시 연결 방법, 내부 동작 원리는 GitHub 저장소의 README를 참고해 주세요.
#주의 사항
- 등록되지 않은 용어는 가려지지 않습니다. 등록되지 않은 외부 인명이나 지명은 탐지하지 않으므로, 사용 전에 Terms를 충분히 점검해 주세요.
- 가려지는 것은 용어일 뿐, 문장의 맥락과 내용은 LLM에 그대로 전달됩니다. 용어를 가렸더라도 문서 내용 자체가 민감하다면 별도로 판단해야 합니다.
- 소속 조직의 보안 정책을 반드시 준수해 주세요. 본 프로젝트는 개인적 사용을 전제로 하며, Mask로 용어를 가렸더라도 외부 AI 서비스 사용 자체가 조직의 정책상 허용되는지는 별도로 확인해야 합니다. 이 도구는 정책 준수를 보장하거나 조직의 보안 통제를 대신하지 않습니다.