한 장 요약 — 무엇을 얻고 무엇을 잃는가
GC 게이트는 「유저에게 못생긴 유효 컴포넌트가 제공되고 있다」는 문제의식에서 나왔다. 유효성 판정이 구조 요건을 보는 것이라면, 게이트는 그 위에서 구조 품질 미달을 추가로 떨어뜨린다. 그래서 이 물건에는 긴장이 있다 — 풀이 줄어드는 대신 남는 것의 질이 오른다. 어느 한쪽만 재면 결론이 반대로 나온다.
지불 — 풀이 줄어든다
17.04%dv2.5 유효 컴포넌트 138,225개 중 23,557개가 걸린다. 레이아웃 단위로는 5,539쪽(9.53%)에서 줄 것이 전부 사라진다.
획득 — 지워지는 쪽이 안 쓰이던 것이다
3.79% 대 5.72%8월 서빙분에서 채택된 적 있는 컴포넌트의 제거율이 3.79%, 한 번도 채택되지 않은 것이 5.72% 다. 순위 효과를 나눈 뒤에도 방향이 같다.
- ✓커버리지 손실은 사실상 없다. 8월 검색 21,476건 중 게이트 적용 후 결과가 0 이 되는 검색은 3건(0.01%)이다.
- ✓교환비가 유리하다. 채택 1건을 잃을 때 비채택 노출 32.8건이 함께 걸러진다. 전체 평균 비율(22.8)보다 높다.
- ✓BE 변경이 새로 들여보낸 유형을 게이트가 걷어낸다. dv2.5 에서 새로 생긴 Background role 유효 컴포넌트 1,082개 중 88.82% 가 탈락한다. dv2.2 에는 이 유형의 유효 컴포넌트가 없었다.
- !지우는 것의 정체가 세대에 따라 다르다. 서빙 세대에서는 ORPHAN_ORDINAL 과 NO_EFFECTIVE_VISUAL 이 대부분인데, dv2.5 에서는 PAGE_BACKPLATE 계열이 급증한다 — Background Extractor 변경의 흔적이다.
- —판정은 세트 4.0 기준이다. 운영 원장에 남은 판정은 아직 세트 3.4 이고 라벨 체계가 달라 1:1 대응이 아니다. 이 문서는 머지 대기 판을 기준으로 읽어야 한다.
이 게이트가 무엇을 하는 물건인가
파이프라인에서의 자리부터 본다. 게이트는 유효성 판정 다음에 온다 — 요건을 갖춘 컴포넌트만 이 게이트를 만난다.
| 단계 | 무엇을 보는가 |
|---|---|
| RLSC | LLM 이 만든 구조 표현. 여기서부터 하류가 시작된다 |
| 린터 게이트 | 구조 표현이 규칙에 맞는지 본다. 통과해야 DO 가 만들어진다 |
| Design Object | 레이아웃에서 잘라낸 후보 덩어리 |
| 유효성 판정 (v3.6) | 구조 요건을 본다 — 컨테이너인가 · Title 과 Description 이 있는가 · 면적이 충분한가 |
| GC 게이트 (세트 4.0) | 그 위에서 구조 품질 미달을 추가로 떨어뜨린다 — 이 문서의 대상 |
판정 방식 — 2층 구조
| 층 | 규칙 |
|---|---|
| 1층 · 즉시 탈락 | 6개 코드. 하나라도 발화하면 점수와 무관하게 탈락한다 |
| 2층 · 조건부 | 5개 코드. 품질 점수가 60 이상일 때만 탈락으로 센다 |
| 접두사 매칭 | PAGE_BACKPLATE 로 선언하면 .COVER · .EDGE · .BOTH 가 전부 걸린다. 접두사 자체로는 발화하지 않는다 |
| 판정 불가 (NULL) | 기준 규칙을 돌릴 문맥이 없으면 판정이 나오지 않는다. 통과로 세지 않는다 |
규칙 9종이 무엇을 잡으려는 것인가
| 코드 | 무엇을 잡는가 |
|---|---|
| NO_EFFECTIVE_VISUAL | 값어치를 만드는 시각 요소가 하나도 없다 — 장식·실오라기뿐이고 텍스트가 절반 이상 |
| ORPHAN_ORDINAL | 순번이 하나뿐인데 같은 페이지에 형제 순번이 남아 있다 — 집합에서 떨어진 조각 |
| PAGE_BACKPLATE.COVER | 컴포넌트가 아니라 페이지 뒤판을 물고 왔다 — 배경 잎이 페이지의 90% 이상을 덮는다 |
| PAGE_BACKPLATE.EDGE | 가장자리에 붙은 배경·장식이 DO 박스를 캔버스 크기로 부풀렸다 |
| PAGE_BACKPLATE.BOTH | 배경 덮음과 가장자리 부풀림이 둘 다 있다 |
| MISSING_NODE.TWIN | DO 가 이미 가진 잎과 같은 역할·같은 크기의 칸이 밖에 남았다 — 반복 칸 빠짐 |
| MISSING_NODE.SLOT | DO 가 데려온 빈 칸이 남았다 — 서빙되면 그 자리가 빈다 |
| MISSING_NODE.BOTH | 반복 칸 빠짐과 빈 칸이 함께 있다 |
| MISSING_NODE.BULK | 빠진 개수가 DO 잎의 20% 이상 — 대량 누락 |
| DETACHED_FRAGMENT.STRONG | 덩어리 하나가 DO 안에서 멀리 떨어져 나와 있다 — 정렬선 공유가 없다 |
| SPARSE_BOX.CERTAIN | 잡힌 박스에 비해 안의 노드가 너무 작다 — 여백만 넓고 내용이 안 찬다 |
| SPARSE_BOX.STRONG | 박스에 비해 안의 노드가 작다 — 여백만 넓다 (강도 한 단계 아래) |
| BG_DEPENDENT | 글자가 밝은데 뒤에 자기 배경이 없다 — 흰 썸네일에서 안 보인다 |
| DECOR_SCATTERED | 꾸밈 요소가 뭉치지 않고 넓게 흩어져 있다 — 테마를 갈아끼울 때 따라오지 못한다 |
영향도 — dv2.5 풀에서 얼마가 빠지는가
대상은 dv2.5 유효 컴포넌트 전량이다. 유효 여부는 저장값이 아니라 현재 기준 v3.6 을 다시 적용해 정한 것이다.
- 유효 컴포넌트
- 138,225
- 게이트 통과
- 114,668
- 게이트 탈락
- 23,557
- 판정 불가
- 0
- 평균 품질 점수
- 12.70
- 영향받은 레이아웃
- 16,020
무엇이 지우는가
탈락을 실제로 일으킨 코드
1층은 즉시 · 2층은 점수 컷을 넘겼을 때만 · 한 컴포넌트가 여러 코드에 걸릴 수 있다
표로 보기
| 코드 | 건수 | 탈락분 대비 |
|---|---|---|
| NO_EFFECTIVE_VISUAL | 9,408 | 39.94% |
| ORPHAN_ORDINAL | 7,777 | 33.01% |
| PAGE_BACKPLATE.BOTH | 3,683 | 15.63% |
| PAGE_BACKPLATE.COVER | 2,434 | 10.33% |
| MISSING_NODE.BOTH (2층) | 347 | 1.47% |
| DETACHED_FRAGMENT.STRONG | 228 | 0.97% |
| PAGE_BACKPLATE.EDGE (2층) | 179 | 0.76% |
| MISSING_NODE.TWIN (2층) | 114 | 0.48% |
| SPARSE_BOX.STRONG (2층) | 104 | 0.44% |
| SPARSE_BOX.CERTAIN | 63 | 0.27% |
| MISSING_NODE.SLOT (2층) | 18 | 0.08% |
합이 탈락 수를 넘는 것은 한 컴포넌트가 여러 코드에 걸리기 때문이다. 어느 하나만 고쳐도 탈락이 그만큼 줄지는 않는다.
레이아웃 단위 — 커버리지 손실의 실체
컴포넌트가 몇 개 빠졌는지는 대리 지표다. 유저가 실제로 겪는 것은 「이 레이아웃에서 줄 게 없다」이다.
게이트 통과 후 레이아웃에 남은 유효 컴포넌트 수
유효 컴포넌트를 하나라도 가진 레이아웃 58,122쪽
표로 보기
| 남은 개수 | 레이아웃 | 비율 |
|---|---|---|
| 0개 | 5,539 | 9.53% |
| 1개 | 25,095 | 43.18% |
| 2개 | 9,578 | 16.48% |
| 3-5개 | 16,977 | 29.21% |
| 6-10개 | 933 | 1.61% |
0개가 되는 쪽이 5,539쪽(9.53%)이다. 이 쪽들은 게이트 이후 공급에서 완전히 빠진다.
유형 구성 — 특정 유형만 쓸리는가
role 별 탈락률
dv2.5 유효 컴포넌트 138,225개 · 낮을수록 게이트가 덜 건드린다
표로 보기
| role | 유효 | 탈락 | 탈락률 |
|---|---|---|---|
| Description | 134,090 | 21,702 | 16.18% |
| Title | 2,673 | 865 | 32.36% |
| Background | 1,082 | 961 | 88.82% |
| Highlight | 308 | 21 | 6.82% |
| Separator | 39 | 3 | 7.69% |
| Decoration | 29 | 2 | 6.90% |
| Marker | 3 | 3 | 100.00% |
| Subtitle | 1 | 0 | 0.00% |
★Background role 이 1,082개 중 961개(88.82%)로 거의 전부 걸린다. dv2.2 에는 이 role 의 유효 컴포넌트가 아예 없었다 — Background Extractor 변경으로 배경·장식이 전경에 들어오면서 새로 생긴 유형이고, 게이트가 그것을 그대로 걷어낸다. 풀의 대부분인 Description 은 16.18% 로 전체 탈락률에 가깝다.
수요 커버리지 — 8월 서빙분에 적용하면
풀 크기는 대리 지표다. 진짜 질문은 「게이트를 켰다면 8월 유저가 무엇을 못 봤을까」이다. 2026년 8월 한 달간 실제로 노출된 일반 컴포넌트에 같은 게이트를 적용했다.
- 노출 컴포넌트
- 15,664
- 노출 이벤트
- 486,799
- 채택 이벤트
- 20,428
- 제거되는 컴포넌트
- 904
- 판정 불가
- 170
- 검색
- 21,476
제거율 — 분모를 바꿔 가며
무엇을 분모로 잡느냐에 따라 제거율이 달라진다
아래로 갈수록 「유저가 실제로 고른 것」에 가까운 분모다
표로 보기
| 분모 | 제거 | 전체 | 제거율 |
|---|---|---|---|
| 컴포넌트 (고유) | 904 | 15,664 | 5.77% |
| 노출 이벤트 | 18,666 | 486,799 | 3.83% |
| 상위 10위 노출 | 8,291 | 218,759 | 3.79% |
| 채택 이벤트 | 553 | 20,428 | 2.71% |
| 다운로드 이벤트 | 76 | 2,993 | 2.54% |
유저가 고른 것일수록 덜 지워진다. 노출 기준 3.83% → 채택 기준 2.71% → 다운로드 기준 2.54% 로 단조 감소한다.
가설 검증 — 채택된 것에서 더 많이 지워지는가
가설은 「채택·다운로드된 것에서 많이 지워지면 나쁜 방향, 반대면 좋은 방향」이다. 상위 10위에 노출된 이력이 있는 컴포넌트로 한정한다 — 한 번도 눈에 띄지 않은 것은 선호를 말할 수 없다.
이력 유무별 제거율
상위 10위 노출 이력 보유분 · 낮을수록 게이트가 그 집단을 덜 건드린다
표로 보기
| 집단 | n | 제거 | 제거율 |
|---|---|---|---|
| 채택 있음 (adopts ≥ 1) | 2,664 | 101 | 3.79% |
| 채택 없음 (adopts = 0) | 4,229 | 242 | 5.72% |
| 다운로드 있음 | 2,324 | 82 | 3.53% |
| 다운로드 없음 | 4,569 | 261 | 5.71% |
채택 이력이 있는 쪽의 제거율이 1.51배 낮다. 다운로드 쪽도 같은 방향이다.
순위 효과를 걷어내면
상위에 노출되면 그만큼 더 채택된다. 단순 채택률 비교는 게이트 효과가 아니라 노출 효과를 잰다. pref_lift(순위 기대값으로 나눈 채택비)로 5분위를 갈랐다 — 값이 낮을수록 노출된 만큼 선택받지 못한 컴포넌트다.
pref_lift 5분위별 제거율
n = 6,893 · Q1 이 가장 덜 선택된 쪽
표로 보기
| 분위 | lift 범위 | n | 제거 | 제거율 |
|---|---|---|---|---|
| Q1 | 0.08–0.68 | 1,379 | 81 | 5.87% |
| Q2 | 0.68–0.86 | 1,379 | 77 | 5.58% |
| Q3 | 0.86–0.94 | 1,379 | 70 | 5.08% |
| Q4 | 0.94–1.18 | 1,379 | 79 | 5.73% |
| Q5 | 1.18–5.06 | 1,377 | 36 | 2.61% |
가장 선호된 Q5 의 제거율이 2.61% 로 가장 낮다. 순위 효과를 나눈 뒤에도 방향이 유지되므로, 제거율 차이는 노출 편차의 부산물이 아니다.
검색 단위 커버리지 — 결과가 0 이 되는 검색
유저가 실제로 겪는 손실은 「검색했는데 줄 게 없다」이다. search_id 로 묶어 게이트 적용 후 남는 결과를 셌다.
| 기준 | 검색 | 전량 소멸 | 일부 감소 | 그대로 |
|---|---|---|---|---|
| 전체 노출 | 21,476 | 3 (0.01%) | 5,663 (26.37%) | 15,810 (73.62%) |
| 상위 10위 | 21,472 | 3 (0.01%) | 4,254 (19.81%) | 17,215 (80.17%) |
교환비 — 잃는 것 대 걸러지는 것
채택률로 본 제거 집합의 성격
제거되는 쪽이 남는 쪽보다 덜 채택되던 것이면 게이트가 옳은 것을 지우고 있다
표로 보기
| 집단 | 채택률 |
|---|---|
| 전체 노출 | 4.20% |
| 제거되는 노출 | 2.96% |
| 남는 노출 | 4.25% |
제거 집합의 채택률이 전체보다 낮고 잔존 집합이 더 높다. 게이트를 켜면 남는 풀의 채택률이 4.20% → 4.25% 로 오른다(같은 노출이 유지된다는 가정).
이 절을 읽을 때의 한계 셋
- 1채택 지표에 허수가 섞인다. 선행 분석에서 확인된 문제이고 현재 도구로는 판별할 수 없다. 채택률의 절대값이 아니라 집단 간 차이로만 읽어야 한다.
- 2다운로드는 채택의 사본일 수 있다. 선행 분석에서 다운로드는 채택 조건부 80% 로 요인과 무관했다. 여기서도 다운로드 신호는 채택 신호와 거의 같은 방향·크기이므로 독립적인 증거로 세지 않는다. 원장 결손이 있어 관측 하한이다.
- 3같은 노출이 유지된다는 가정이다. 실제로는 제거된 자리를 다른 컴포넌트가 채운다. 그 대체 효과는 여기서 재지 않았고, 재려면 재검색 시뮬이 필요하다.
세대 비교 — Background Extractor 변경이 게이트 통계를 어떻게 바꿨나
이 절은 요약이다. 상세는 BE 변경 리포트에 있다. 코호트는 template_page_idx 로만 통일한 62,876 페어이고, 두 세대 모두 현재 기준 v3.6 으로 유효성을 다시 판정한 뒤 같은 게이트를 걸었다.
총량은 거의 같다
dv2.2 유효 64,251 · dv2.5 유효 107,276 (×1.67)
표로 보기
| 지표 | dv2.2 | dv2.5 |
|---|---|---|
| 유효 컴포넌트 | 64,251 | 107,276 |
| 게이트 통과 | 53,212 | 89,053 |
| 게이트 탈락 | 11,039 | 18,223 |
| 탈락률 | 17.181% | 16.987% |
| 평균 점수 | 12.901 | 12.707 |
| 유효 전량 탈락 레이아웃 | 3,854 / 29,453 | 4,087 / 44,816 |
탈락률을 소수 셋째 자리까지 적은 이유는 한 자리로 반올림하면 둘 다 17.0% 가 되어 차이가 없다고 오독하기 쉽기 때문이다. 총량은 붙어 있지만 구성은 아래처럼 완전히 다르다.
무엇에 걸리는지는 완전히 달라졌다
| 코드 | 무엇을 잡는가 | dv2.2 | dv2.5 | 배수 |
|---|---|---|---|---|
| PAGE_BACKPLATE.COVER | 컴포넌트가 아니라 페이지 뒤판을 물고 왔다 — 배경 잎이 페이지의 90% 이상을 덮는다 | 105 | 1,866 | ×17.8 |
| PAGE_BACKPLATE.BOTH | 배경 덮음과 가장자리 부풀림이 둘 다 있다 | 214 | 2,532 | ×11.8 |
| MISSING_NODE.SLOT (2층) | DO 가 데려온 빈 칸이 남았다 — 서빙되면 그 자리가 빈다 | 1 | 8 | ×8.0 |
| PAGE_BACKPLATE.EDGE (2층) | 가장자리에 붙은 배경·장식이 DO 박스를 캔버스 크기로 부풀렸다 | 18 | 119 | ×6.6 |
| MISSING_NODE.TWIN (2층) | DO 가 이미 가진 잎과 같은 역할·같은 크기의 칸이 밖에 남았다 — 반복 칸 빠짐 | 13 | 79 | ×6.1 |
| MISSING_NODE.BOTH (2층) | 반복 칸 빠짐과 빈 칸이 함께 있다 | 88 | 222 | ×2.5 |
| SPARSE_BOX.CERTAIN | 잡힌 박스에 비해 안의 노드가 너무 작다 — 여백만 넓고 내용이 안 찬다 | 18 | 41 | ×2.3 |
| DETACHED_FRAGMENT.STRONG | 덩어리 하나가 DO 안에서 멀리 떨어져 나와 있다 — 정렬선 공유가 없다 | 76 | 159 | ×2.1 |
| SPARSE_BOX.STRONG (2층) | 박스에 비해 안의 노드가 작다 — 여백만 넓다 (강도 한 단계 아래) | 40 | 63 | ×1.6 |
| NO_EFFECTIVE_VISUAL | 값어치를 만드는 시각 요소가 하나도 없다 — 장식·실오라기뿐이고 텍스트가 절반 이상 | 5,697 | 7,596 | ×1.3 |
| ORPHAN_ORDINAL | 순번이 하나뿐인데 같은 페이지에 형제 순번이 남아 있다 — 집합에서 떨어진 조각 | 5,039 | 6,078 | ×1.2 |
| (풀 자체 = 기준선) | 64,251 | 107,276 | ×1.67 |
PAGE_BACKPLATE 계열이 폭증했다 — 「컴포넌트가 페이지 배판처럼 넓게 깔렸다」는 판정이고, BE 변경으로 장식·배경이 전경에 들어온 것이 그대로 찍힌다. 린터 단계의 DECORATION_RATHER_BACKGROUND 2.02배와 같은 축인데, 전혀 다른 규칙 체계가 독립적으로 다시 잡아냈다.
판정과 남은 위험
- ✓게이트는 켜는 방향이 맞다. 8월 서빙분에서 제거 대상은 덜 채택되던 것에 몰려 있고(순위 효과 정규화 후에도 유지), 검색 단위 커버리지 손실은 0.01% 다.
- !dv2.5 에서는 성격이 달라진다. 서빙 세대에서 5.77% 이던 제거율이 dv2.5 에서는 17.04% 다. PAGE_BACKPLATE 급증분이 그대로 더해진 결과이므로, BE 변경과 게이트를 함께 켜면 손실이 이 문서의 8월 수치보다 크다.
- !세트 3.4 로는 재현할 수 없다. 운영 원장의 판정은 3.4 이고 술어 파일이 교체돼 다시 돌릴 수 없다. 이 문서를 근거로 운영을 바꾸려면 4.0 머지가 선행이다.
- —대체 효과를 재지 않았다. 제거된 자리를 다른 컴포넌트가 채우는 몫은 재검색 시뮬이 필요하다. 여기 수치는 대체가 없다고 볼 때의 상한 손실이다.
방법과 재현
| 판정 3단 | judgeDesignObjectInput → toGateJudgement → computeVerdict — 전부 운영 순수 함수, 쓰기 없음 |
| 세트 / 전략 | GC_RULESET_4_0 · VERDICT_STRATEGY_V1 (1층 6 · 2층 5 × 컷 60) |
| dv2.5 유효 집합 | 저장값이 아니라 v3.6 재적용 결과 — dedupV3_6FilteredRows · hasOverlappingTableOrChart 를 그대로 import |
| 8월 서빙 | garbage_collector.demand_exposure_events run 4 (2026-08-01 – 09-01, end 미포함) |
| 일반 컴포넌트 | layouts.tags = '{}' — NULL 이 아니라 빈 배열이다 |
| 판정 세대 | 노출 uuid 의 structure_json 이 dv2.0·2.1·2.2·2.3 에서 바이트 동일(실측)이라 dv2.2 를 우선하고 없는 것만 다른 세대에서 채웠다 |
| 스크립트 | gc-2378/scripts/measure-gc-gate-serving.ts · analyze-gc-serving-demand.ts · measure-gc-gate-generations.ts |
| 데이터 | prod readonly 실측 2026-09-11 · 모든 조회에 default_transaction_read_only = on |