프로필 소개 문서를 재치형으로 갈아 끼우고 그 문서를 얹어 두는 저장소를 지웠다 다시 만들어 커밋 열 개를 없앴다.
그다음 계정 전체를 전수로 훑었다.
치명으로 판정한 다섯 건은 전부 프로필 바깥에 있었다.
프로필 정리로 막힌 것은 한 건도 없었다.
문제
삭제는 목록 없이 시작된다.
출발점은 이력을 들키기 싫다는 한 문장이었고, 그 문장에는 무엇을 지울지 가르는 기준이 없다.
기준이 없으면 눈에 띄는 순서가 기준을 대신한다.
계정에서 가장 먼저 눈에 띄는 표면이 프로필이고, 그래서 프로필부터 지웠다.
지운 뒤에도 목록은 줄지 않는다.
지울 후보가 여전히 계정 전체이기 때문이다.
같은 계열의 착시가 그 전에 한 번 있었다.
7월 말에 포트폴리오를 GitHub Pages에서 Cloudflare Pages로 옮기면서 저장소를 비공개로 돌렸다.
그 조치는 커밋 히스토리와 빌드 스크립트와 초안을 가렸다.
사이트가 실제로 서빙하는 정적 문서 본문은 그대로 공개였다.
가린 것의 목록과 공개된 것의 목록이 서로 겹치지 않았고, 그 어긋남은 한 달 뒤 전수감사에서야 확인됐다.
비공개 전환은 오판도 하나 만들었다.
감사 도중에 익명으로 열리지 않는 저장소를 삭제된 것으로 읽었다.
소유자 자격으로 저장소 목록을 다시 조회하고 나서야 그것이 살아 있다는 사실이 확인됐다.
익명으로 받은 404는 그 저장소가 비공개라는 응답이었다.
탐지기를 먼저 검증했다
전수조사는 이력 마커 탐지기를 만드는 것으로 시작했다.
만들자마자 실스캔을 돌리지는 않았다.
이미 지운 옛 소개 문서의 원문을 꺼내 그 탐지기를 먼저 걸었고, 히트 21건과 음성 0건을 선캡처했다.
알려진 양성에서 21건이 나온다는 것을 확인한 뒤에야 계정을 훑었다.
검증하지 않은 탐지기가 돌려주는 깨끗함은 아무것도 말해주지 않는다.
스캔 대상은 공개 저장소 23개의 전 히스토리다.
저장소를 통째로 받아 전 커밋의 패치를 ripgrep 단일 패스로 훑었다.
처음에는 블롭을 한 건씩 꺼내 배치로 도는 방식을 썼는데 너무 느려서 중단하고 갈아탔다.
결과는 치명 5건, 증거로 격파한 가설 3건, 미조치 1건이다.
치명 다섯 건의 위치가 이 감사의 결론을 만들었다.
지웠던 것과 같은 경력 줄이 경진대회 저장소의 팀 소개 표 형식으로 살아 있었고, 다른 경진대회 저장소의 소개 문서에는 실명이 15건 남아 있었다.
공개 조직 계정의 이슈와 병합 요청 제목 8건에도 실명이 있었다.
나머지 둘은 개인 프로젝트 ASHD와 OurFolio의 법적고지에 연락처가 남은 지점이었다.
다섯 건 중 프로필 안에 있던 것은 하나도 없다.
위협모델을 한 줄로 확정했다
감사가 종결된 날 위협모델이 한 줄로 확정됐다.
실명, 성격유형, 정보보안 출신 이력, 부트캠프 이력, 이력서 공개, 연락처 게재는 전부 의도된 노출로 규정했다.
구직 표면에서 이 여섯 항목을 보여주는 것이 목적이므로 지울 대상이 아니다.
차단 대상은 하나의 경로로 좁혔다.
LinkedIn 계정으로 이어지는 링크다.
그 전까지 지울 후보는 계정 전체였고, 위협모델이 확정된 뒤에는 그 링크 하나만 후보로 남았다.
정체성 정리는 어느 연결고리를 끊을 것인가를 정하는 일이다.
노출 항목을 종류별로 세는 대신 그 항목들이 어느 계정으로 수렴하는지를 보면 지울 경로가 정해진다.
한 줄로 좁혀도 실행은 컸다
좁힌 경로의 실측 규모는 파일 84개에 258곳이었다.
그중 83곳이 블로그 전 페이지에 실리는 푸터 템플릿 한 벌이었다.
템플릿 하나를 고치면 83곳이 한 번에 정리되지만, 그 한 벌이 어디까지 실려 있는지는 세어보기 전에 84라는 숫자로 잡히지 않는다.
제거 커밋이 실제로 덮은 것은 258곳 중 256곳이다.
연결 강도가 가장 높은 곳은 홈 문서의 구조화 데이터였다.
검색엔진에게 이 사람과 이 계정이 같다고 기계가독 형식으로 선언하는 부분이고, JSON-LD의 sameAs 항목이 그 선언을 맡는다.
사람이 읽는 링크 텍스트는 눌러야 연결되지만 이 선언은 크롤러가 읽는 순간 바로 연결된다.
258곳을 세는 일과 이 한 항목을 걷어내는 일은 값이 다르다.
같은 기록에 한계 두 가지도 함께 기록됐다.
프로필 이름에 실명이 있는 한 링크를 지우는 것만으로는 실효가 없다.
그리고 이력서 페이지에는 색인에서 빼라는 noindex 지시를 걸 수 있었지만 내려받는 PDF 문서에는 그 지시를 걸 수단이 없었다.
경로 하나를 끊기로 정해도 그 경로의 모든 마디에 손이 닿지는 않는다.
못 지우는 것도 목록이 된다
범위를 정하면 남기기로 한 것과 지울 수 없는 것이 갈린다.
앞의 여섯 항목은 남기기로 한 쪽이고, 아래 네 건은 지우려 했으나 지우지 못한 쪽이다.
상태는 2026-08-30 기준이다.
| 항목 | 상태 | 불변 사유 |
|---|---|---|
| 히스토리 재작성 뒤에도 직접 주소로 서빙되는 옛 객체 | 불변 | 플랫폼 지원 요청이나 저장소 재생성뿐이고 둘 다 파괴적이라 판단 대기 |
| 공개 조직 계정에 남은 이슈·병합 요청 제목의 실명 8건 | 삭제 불가 | 소유권이 없어 그 조직 관리자 4명만 지울 수 있다 |
| 별표 두 개 때문에 붙는 포크 출처 라벨 | 미조치 | 별표를 해제하면 끝나는 건이라 지시 대기 |
| LinkedIn 계정 설정의 공개 프로필 끄기 | 완료 기록 없음 | 감사 종결일 시점 90% 진행, 이후 완료 기록 없음 |
네 건의 성격이 서로 다르다.
첫 줄은 플랫폼이 쥔 결정이고 둘째 줄은 소유권이 없는 건이다.
셋째 줄과 넷째 줄은 손이 닿는데 각각 지시와 완료 기록이 비어 있다.
목록이 없었으면 이 네 건은 지운 것도 남긴 것도 아닌 상태로 흩어졌다.
결론
삭제 목록을 먼저 만들면 목록은 계속 늘어난다.
지울 후보를 세는 동안 기준은 생기지 않고, 눈에 띄는 순서가 기준 노릇을 계속한다.
프로필을 갈아 끼우고 커밋 열 개를 지운 작업이 정확히 그 순서였다.
그 작업으로 막힌 것은 한 건도 없었다.
순서를 뒤집으면 목록이 줄어든다.
무엇을 노출로 둘지 먼저 정하면 지울 것은 링크 하나로 좁혀지고, 그것을 실측하는 일이 다음 작업이 된다.
못 지우는 것들은 그때 목록의 한 칸을 받아 지우지 못한 채 잊히는 대신 상태와 사유를 달고 남는다.
그래서 지울 것을 세기 전에 남길 것을 한 줄로 먼저 적었다.
한계·재검토 트리거
2026-09 기준 / 재검토 트리거: 의도된 노출로 규정한 여섯 항목 중 하나라도 구직 표면에서 뺄 이유가 생기거나, 잔여 네 건 중 어느 하나가 조치 가능 상태로 바뀌면 이 글의 판정을 다시 연다.