개인정보 처리방침을 손보다가 한 문장에서 멈췄습니다.
"지원자 개인정보를 국외로 이전하지 않습니다."
법무 검토를 거쳐 들어간 문장이고, 이용약관에도 같은 취지가 있었습니다. 문제는 그 문장을 코드로 확인해본 적이 없다는 것이었습니다.
코드를 열어보니 세 곳이었습니다
이력서에서 정보를 뽑는 경로를 따라가 보니, 지원자 개인정보가 해외 사업자 엔드포인트로 나갈 수 있는 지점이 세 개 있었습니다.
첫째, 이미지 기반 연락처 추출. 텍스트 추출이 실패하거나 글리프가 깨진 이력서는 페이지를 통째로 이미지로 만들어 비전 모델에 보냅니다. 그 이미지에는 이름·연락처·사진이 그대로 실려 있습니다 (지원자 연락처가 깨져 들어온 날).
둘째, 인적성 결과표 추출. 같은 경로로 검사 결과표 이미지를 보내고 있었습니다.
셋째, 채점 provider 의 폴백. 기본 모델이 실패하면 다음 모델로 넘기는 설정이 있었고, 그 다음 모델이 해외 사업자면 이력서 본문 텍스트가 그대로 흘러갈 수 있었습니다.
세 경로 모두 "기능이 잘 동작하도록" 만들어진 것이었습니다. 아무도 방침을 어기려 하지 않았고, 방침을 코드에서 확인하는 단계가 없었을 뿐입니다.
문서를 고칠 수도 있었습니다
선택지는 두 개였습니다.
하나. 처리방침에 국외이전 표를 채운다. 어느 사업자에게, 어느 국가로, 어떤 항목이 이전되는지 적고 동의를 받는 방식입니다. 법적으로 가능한 길이고, 실제로 많은 서비스가 이렇게 합니다.
둘. 코드를 방침에 맞춘다. 지원자 정보가 실리는 호출을 국내 엔드포인트로만 나가게 막는 것입니다.
두 번째를 골랐습니다. 이유는 우리가 다루는 데이터의 성격입니다. 지원자는 우리 고객이 아니라 고객사의 지원자이고, 지원 단계에서 회사와의 관계가 가장 약한 사람입니다. 그 사람의 이력서·사진·연락처가 어디로 가는지를 선택할 권한이 실질적으로 없습니다. 동의 항목을 하나 늘려 처리하는 것이 형식적으로는 가능하지만, 이 관계에서는 선택지를 늘리는 것이 아니라 기본값을 안전하게 두는 쪽이 맞다고 판단했습니다.
어떻게 막았나
호출이 나가기 직전에 목적지 호스트를 봅니다. 해외 사업자 목록에 걸리면 그 호출을 하지 않습니다. 서브도메인까지 함께 막고, OpenAI 호환 경로처럼 겉모습이 다른 우회 경로도 상위 도메인에서 걸립니다.
두 가지를 의도적으로 정했습니다.
기본값이 차단입니다. 켜야 안전해지는 스위치는 언젠가 꺼진 채로 배포됩니다. 그래서 반대로 만들었습니다 — 허용하려면 명시적으로 켜야 하고, 켜는 순간 처리방침이 허위가 되므로 그 스위치는 방침 개정과 묶여 있습니다. env 한 줄로 조용히 뒤집을 수 있는 상태로 두지 않았습니다.
차단 범위를 좁게 그었습니다. 지원자 개인정보가 실리는 경로만 막습니다. 공고 문구 초안을 만드는 기능처럼 개인정보가 들어가지 않는 생성 기능은 대상이 아닙니다. "AI 호출 전부 차단"으로 넓게 그으면 안전해 보이지만, 실제로는 불편이 커져 결국 예외가 생기고 예외가 원칙을 무너뜨립니다.
잃은 것도 적어둡니다
이 결정은 대가가 있었고, 그걸 숨기면 이 글이 홍보문이 됩니다.
폴백이 좁아졌습니다. 기본 모델이 장애일 때 넘길 후보에서 해외 사업자가 빠지므로, 국내 대체 경로가 없는 상황에서는 재시도로 버티는 수밖에 없습니다. 사내 게이트웨이가 흔들리는 날에는 검토가 늦어집니다. 그 전제 위에서 AI 기능을 설계한 이야기는 LLM에게 데이터베이스를 주지 않았습니다에 따로 적었습니다. 가용성 일부를 규정 준수와 바꾼 것입니다.
이미지 기반 추출의 선택지가 줄었습니다. 비전 모델은 해외 사업자 쪽 선택지가 넓습니다. 국내 경로로 한정하면 쓸 수 있는 모델이 제한되고, 어려운 이력서에서 추출 성공률이 떨어집니다. 그 자리를 OCR 재추출과 사람이 손으로 넣는 경로가 메웁니다.
두 대가 모두 "기능이 조금 덜 좋아진다"에 해당합니다. 반대쪽에 있는 것은 지원자에게 한 약속이었으므로, 이 교환은 다시 해도 같게 하겠습니다.
이 일에서 남은 원칙 하나
방침은 문서가 아니라 점검 항목이어야 합니다.
처리방침·약관에 단언한 문장이 있으면, 그 문장에 대응하는 코드 확인이 어딘가에 있어야 합니다. 없으면 그 문장은 시간이 지나면서 조용히 사실이 아니게 됩니다 — 누가 어겨서가 아니라, 기능을 추가하는 사람이 그 문장을 모르기 때문입니다.
법규 쪽에서 회사가 확인해야 할 항목을 정리하다 보면 같은 구조가 반복됩니다. 적어둔 것과 실제 운영이 어긋나면 적어둔 쪽이 근거가 되지 못합니다 (채용 개인정보 수집·이용 동의서).