luplo

하나의 단어, 세 개의 통제

모든 코드베이스엔 있다. 한 파일에선 “auth”가 authentication을 의미하고, 다른 파일에선 authorization을, “auth 팀”은 말하는 사람과 더 가까운 쪽이다.

코드에선 괜찮다. 모두 문맥을 알고 있으니까. 감사 자리에선 괜찮지 않다.

SOC 2 CC6.1은 논리적 접근 통제 — authentication을 다룬다. CC6.3은 역할 기반 권한 — authorization을 다룬다. 감사관이 “지난 분기의 모든 authorization 정책 결정”을 요청할 때 원하는 건 CC6.3 증거다. 로그인 플로우 개편이 아니다. 비밀번호 재설정 개선이 아니다. OAuth 공급자 교체가 아니다.

벡터 스토어는 그 답을 줄 수 없다. 임베딩이 나빠서가 아니라, “auth”가 그 근방에서 가장 시끄러운 토큰이기 때문이다. Authn과 authz가 같은 클러스터로 뭉개진다. 둘 중 아무 쪽에든 가까운 것은 전부 딸려온다. 감사관은 무더기를 받는다.

학계가 이미 알고 있던 것

요구공학(requirements engineering)은 이 문제를 다른 이름으로 10년간 연구해왔다: glossary term extraction.

Arora 외(2017)는 REGICE를 만들었다. 요구사항 문서에서 용어 후보를 추출하고 클러스터링하는 시스템이다. 실제 산업 사례 연구에서, syntactic similarity(토큰 overlap 기반 SoftTFIDF)가 클러스터링 정확도 면에서 WordNet 기반 semantic 측정을 능가했다.

Hasso 외(2022)는 약어-원형 쌍(abbreviation-expansion pair) — “JWT” ↔ “JSON Web Token”, “authz” ↔ “authorization” — 에서 한 걸음 더 나갔다. FastText 임베딩은 F1 0.06 ~ 0.29를 기록했다. 초성, 길이, 문자 순서 기반의 feature matching은 0.90 ~ 0.94를 기록했다.

왜 이 격차가 나는가? 약어는 본질적으로 중의적이다. 단일 임베딩 벡터는 모델이 본 모든 원형을 평균낸다. 보안 논문의 “authz”와 OAuth 공급자 문서의 “authz”가 하나의 혼란스러운 벡터를 만든다. Feature matching은 단어가 무슨 뜻인지 신경쓰지 않는다 — 그저 글자가 맞는지만 본다.

Bhatia 외(2020)는 coverage 메트릭을 추가했다. 원본 문서 중 최소 하나의 용어집 항목이 커버하는 비율. coverage가 낮은 용어집은 불완전하다. coverage가 감소하는 용어는 죽어가고 있다.

세 논문 중 어느 것도 용어집 자체가 변하는 경우를 다루지 않았다.

append-only 코퍼스에선 무엇이 변하는가

조직은 자기 어휘를 안정화시키지 않는다. drift한다.

어느 회사는 감사관이 SOC 2 CC6.1 증거를 요청한 날 “auth”를 “authn”과 “authz”로 쪼갠다. 이것이 glossary event다. 그날 이전의 모든 결정은 “auth”를 둘 다의 의미로 썼다. 그날 이후의 모든 결정은 둘을 구분한다.

코퍼스를 안정적이라고 가정하는 조회 시스템은 이것을 놓친다. 시간에 따른 용어 사용 빈도로 순위를 매기는 시스템은 분기점을 본다 — “authn”과 “authz”는 2025년 3월부터 나타나기 시작하고, “auth”는 4월부터 authorization 결정을 커버하지 않는다.

luplo는 이 이벤트를 기록한다. #authz라는 용어엔 출처가 따라붙는다: 이 용어를 도입한 결정, 표준 원형, 다른 변형들, 그리고 이 용어의 활성도가 authorization 쿼리에서 #auth를 추월한 날짜. CC6.3 증거를 요청한 감사관은 12행이 아니라 3행을 받는다. 각 행은 자신이 어느 용어집 버전 아래 기록되었는지를 인용한다.

원래 문헌은 두 가지 중 하나를 가정했다: 용어집을 만들기 전에 요구사항이 안정화되거나, 사람 사서(librarian)가 별도로 용어집을 유지하거나. 두 가정 모두 같은 사실에 의존했다 — 용어집 큐레이션은 비싸다는 사실. LLM 보조 큐레이션이 그 사실을 바꿨다. 방법은 같다. 체제(regime)가 새롭다.