게시 전 '개인정보 없나' 눈으로 확인하던 걸, 코드가 막게 했다


커버

📝 한줄 요약


사례글이나 포스팅 게시 전에 "토큰이나 실명 안 들어갔나?"를 눈으로 확인하고 계신가요? 눈은 놓쳐요. 그래서 저는 그 점검을 코드가 막게 바꿨어요. 금지 패턴(토큰·이메일·전화·경로)이 하나라도 걸리면 발행 자체가 멈추게요. 이제 "확인했다"가 느낌이 아니라 통과 로그라는 증거로 남아요.

바쁘시면 이것만 읽어도 돼요:

  • "사람 눈으로 확인했다"는 증거가 아니에요 — 그날 컨디션 따라 놓쳐요

  • 통과/불통은 코드가 판정하게 (걸리면 exit 1로 발행 중단 = Code as Gate)

  • 걸린 비밀값은 화면에 안 찍고 ●●●로 마스킹 — 잡으려다 오히려 노출하면 안 되니까

  • 코드가 못 잡는 건(실명 등) 정직하게 남겨요 — 아는 이름만 목록으로 막고, 나머진 사람 몫으로 표시

  • 만든 뒤 일부러 가짜 토큰을 넣어 진짜 막히는지 확인 (실전 글 3개는 오탐 0으로 통과)

🎯 이런 분들께 도움돼요

  • AI에게 게시·발송·업로드를 맡기는데 개인정보 노출이 불안한 분

  • "발행 전에 조심하자"를 매번 눈으로 하다가 한 번은 놓칠 것 같은 분

  • 자동화에 "안전장치"를 넣고 싶은데 뭐부터 해야 할지 막막한 분

  • 에이전트 하네스 스터디에서 Code as Gate·Proof Artifact가 뭔지 실제 예로 보고 싶은 분

😫 문제 상황 (Before): 눈은 놓친다

저는 AI로 블로그 글을 써서 게시판에 올리는 걸 자동화해 뒀어요. (지피터스 멤버들은 대부분 그렇게 하고 계시죠?😉) 그 마지막에 늘 하던 게 있었죠 — 올리기 직전에 "토큰·실명·연락처 안 들어갔나?"를 눈으로 훑는 거요. 스킬 문서에도 "개인정보 육안 점검"이라고 적어놨었어요.

그런데 눈은 믿을 게 못 되더라고요. 실제로 얼마 전 가족용 AI 비서를 만들 때, 설정 파일을 손으로 고치다 봇의 비밀 열쇠(토큰)가 화면에 그대로 출력된 사고가 있었어요. 결국 그 토큰은 폐기하고 새로 발급받았죠. 조심한다고 했는데도 뚫린 거예요.

문제의 본질은 이거였어요.
"잘 확인했다"는 남이 봐도 똑같이 나오는 기준이 아니에요. 제 컨디션 좋은 날과 피곤한 날이 다르고, 급하면 대충 넘기고요. "AI한테 검열시키면 되지 않냐" 싶지만, 글을 쓴 것도 AI인데 같은 AI한테 "네 글 개인정보 없지?"를 물으면 — 만든 쪽이 자기 결과에 합격 도장을 찍는 셈이라 못 믿어요.

🛠️ 사용한 도구

  • 도구명: Claude Code (터미널 AI), 제 발행 스킬(bettermode-publish)

  • 방법론: 에이전트 하네스 스터디 W2 확장 — Code as Gate, Proof Artifact

  • 특이사항: 화려한 기능이 아니에요. "눈으로 확인" 한 줄을 "코드가 막기"로 바꾼 게 전부예요

🔧 왜 육안 점검은 안전장치가 아닐까?


첫 에피소드는 개념 정리였어요.
안전장치라면 누가 언제 하든 같은 결과가 나와야 하는데, 육안 점검은 그렇지 않아요.

  • 사람마다 다르고, 같은 사람도 그날그날 달라요

  • 통과 기록이 안 남아요 — "확인했다"는 말뿐, 나중에 "정말 봤나?"를 되짚을 근거가 없어요

  • 급할수록 대충 넘어가요 (하필 사고는 급할 때 나죠)

그래서 기준을 이렇게 바꿨어요. "확인했다"가 아니라 "코드가 통과시켰다"로. 코드는 컨디션도 없고, 통과 여부를 로그로 남기고, 급해도 똑같이 깐깐해요.

💡 안전장치의 조건은 "누가 하든 같은 판정"이에요. 사람 눈은 이 조건을 못 채워요.


🔧 코드가 발행을 막게 만들기

두 번째는 실제 장치예요.
금지 패턴 목록을 정하고, 글에서 하나라도 걸리면 발행을 중단시키는 작은 검사기를 발행 직전에 뒀어요. 프로그래밍에서 이런 걸 "게이트"라고 해요 — 통과 못 하면 문이 안 열리는 거죠.

막는 패턴은 코드가 정확하게 잡을 수 있는 것들로 골랐어요.

  • 각종 비밀 열쇠(토큰·API 키·봇 토큰·비밀키 블록)

  • 이메일, 전화번호

  • 로컬 컴퓨터 경로(내 계정 이름이 드러나는 것)


여기서 신경 쓴 디테일 하나 — 걸린 값을 화면에 그대로 찍으면 안 돼요.
토큰을 잡으려다 그 토큰을 로그에 남기면 본말전도잖아요. 그래서 걸린 부분은 ●●●로 가리고, "몇 번째 줄에 어떤 종류가 걸렸다"만 알려주게 했어요.

또 하나 정직하게 정한 것 — 코드가 못 잡는 건 억지로 안 잡아요.
실명은 정규식(패턴 규칙)으로 잡으려 하면 멀쩡한 단어까지 다 걸려서 오히려 게이트가 짐이 돼요. 그래서 실명은 자동 차단에서 빼고, "아는 이름 목록"을 따로 주면 그것만 막게 했어요. 코드가 책임질 수 있는 만큼만 코드가 지고, 나머지는 사람 몫으로 명확히 남긴 거예요.

💡 게이트는 빡세야 하지만, 오탐이 잦으면 사람이 꺼버려요. 그래서 "정확히 잡히는 것만 자동 차단"이 핵심이에요.


🔧 일부러 걸어보기 — 진짜 막히나?

차단 테스트


잘 통과하는 것만 보면 게이트가 진짜 막는지 몰라요. 그래서 가짜 토큰과 가짜 경로를 일부러 넣은 글을 만들어 게이트에 넣어봤어요. 결과는 기대대로 — 발행이 멈추고, 걸린 값은 ●●●로 가려진 채 위치만 보고됐어요.

이 "일부러 걸어보기"에서 게이트 자체의 허점도 두 개 잡았어요.

  1. 가장 흔한 비밀번호 설정을 못 잡았어요.
    CLIENTSECRET=… 형태를 놓치더라고요. 알고 보니 제 패턴 규칙이 "단어 경계"를 요구했는데, CLIENTSECRET은 밑줄로 이어져 있어서 경계로 안 쳐줬던 거예요. 규칙을 고쳐서 잡게 했어요.

  2. 봇 토큰 길이를 한 글자 차이로 놓쳤어요.
    길이를 딱 고정해놔서, 실제 토큰이 그보다 한 글자 길면 빠져나갔어요. "이 길이 이상"으로 바꿨죠.

둘 다 일부러 걸어보지 않았으면 못 찾았을 허점이에요. 그리고 마지막으로, 이미 잘 올라간 진짜 글 3개를 게이트에 통과시켜 봤어요 — 오탐 0건. 멀쩡한 글을 괜히 막지 않는다는 것까지 확인한 거예요.

💡 안전장치를 만들면, 그 장치가 진짜 막는지 + 멀쩡한 걸 안 막는지 둘 다 시험해야 해요.


✅ 결과 (After)

통과와 오탐0 확인

Before vs After

  • 판정 주체: 사람 눈 → 코드 (걸리면 발행 중단)

  • 놓칠 위험: 컨디션 따라 있음 → 정한 패턴은 항상 잡힘

  • 통과 증거: 없음("확인함") → 통과 로그로 남음

  • 비밀값 노출: 확인하다 노출 위험 → ●●● 마스킹

  • 검증: 안 함 → 차단 7종 + 통과 + 오탐0, 자동 테스트 9개

결과물

  • 발행 직전 개인정보 게이트 1개 (걸리면 발행 중단, 통과하면 근거 로그)

  • 차단/통과 자동 테스트 9개 (전부 통과)

  • 실전 글 3개 오탐 0건 확인

💬 이 과정에서 배운 팁

효과적이었던 것

  1. "확인했다"를 "코드가 통과시켰다"로 — 안전장치는 누가 하든 같은 판정이 나와야 해요.

  2. 잡으려다 노출 금지 — 비밀값은 로그에도 남기지 말고 가려서 위치만.

  3. 일부러 걸어보기 — 진짜 막히는지, 멀쩡한 건 안 막는지 둘 다 시험.


이렇게 하면 안 돼요

  1. 만든 쪽이 합격 도장 찍기 — 글 쓴 AI한테 "개인정보 없지?" 물으면 안 돼요. 판정은 분리된 코드가.

  2. 다 잡으려고 욕심내기 — 오탐 잦은 게이트는 사람이 꺼버려요. 정확히 잡히는 것만 자동으로, 나머진 사람 몫으로 정직하게.

🌍 다른 업무에 적용한다면?


메일 발송, 파일 업로드, 외부 API 호출 — "나가기 직전"이 있는 모든 자동화에 통해요. 나가기 전에 "이건 있으면 안 된다"를 코드가 한 번 훑고, 걸리면 멈추게 하는 거예요. 핵심은 "무엇을 자동화할까"가 아니라 "무엇은 절대 나가면 안 되나"를 코드로 정하는 것이에요.


❓ 자주 묻는 질문

Q. AI한테 "개인정보 있나 검사해줘"라고 시키면 안 되나요?

글을 쓴 것도 AI인데 검사도 같은 AI가 하면, 만든 쪽이 자기 결과를 채점하는 거라 신뢰가 약해요. 통과 여부는 규칙이 분명한 코드가 기계적으로 판정하는 게 더 안전해요.

Q. 실명은 왜 자동으로 안 막나요?

이름을 패턴으로 잡으려 하면 멀쩡한 단어까지 다 걸려서 게이트가 쓸모없어져요. 그래서 아는 이름만 목록으로 막고, 나머지는 사람이 보는 걸로 남겼어요. 코드가 책임질 수 있는 만큼만 지는 게 오래 가는 안전장치예요.

Q. 게이트가 멀쩡한 글을 막으면요?

그래서 만든 뒤 실제 글 3개로 오탐을 확인했어요(0건). 새 패턴을 추가할 때마다 이 확인을 반복하면 돼요.

🚀 앞으로의 계획

지금은 "나가면 안 되는 것"을 막는 데까지 왔어요. 다음은 이 통과 로그를 발행 기록에 함께 남겨서, 나중에 "이 글은 언제 어떤 검사를 통과하고 나갔나"를 되짚을 수 있게 하는 거예요.

📋 재사용 가능한 판단 템플릿

"눈으로 확인" 한 줄을 코드 게이트로 바꾸고 싶을 때 이 순서로요.

1. 금지 목록 정하기 — 절대 나가면 안 되는 것(토큰·이메일·전화·경로 등)을 적는다.

2. 코드가 막게 — 그 패턴이 걸리면 진행을 멈추게(중단) 한다. 통과하면 로그를 남긴다.

3. 잡되 노출 금지 — 걸린 비밀값은 가리고 위치만 보고한다.

4. 코드 밖은 정직하게 — 코드가 못 잡는 건(실명 등) 자동 차단하지 말고 사람 몫으로 표시한다.

5. 일부러 걸어보기 — 가짜로 진짜 막히는지 + 멀쩡한 건 안 막는지 둘 다 시험한다.


2
4개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.