Step 327. 우승팀과의 격차 분석 — “무엇이”가 아니라 “왜”를 해부한다

Step 327. 우승팀과의 격차 분석 — "무엇이"가 아니라 "왜"를 해부한다

Level 4 — 전문가 | 난이도 ★★★☆☆ | 예상 소요 시간 2일 (Write-up 수집 반나절 + 대조표 작성과 분석 1일 + 보완 계획 반나절)

전제: Step 326의 본선 기록 — 당일 로그, 못 푼 문제의 시도 내역, 확보한 상위 팀 풀이. 이 챕터는 새 기술이 아니라 분석 프레임을 배우는 개념 챕터입니다.

  • 준비물: 상위 3개 팀의 Write-up(대회 공식 페이지·팀 블로그·CTFtime), 우리 팀의 대회 기록(Step 326의 산출물), 대조표 작성용 문서, 파이썬 실행 환경. 격차 집계 스크립트는 여러분의 대조 결과로 돌리는 실측 도구이고, Write-up의 내용 인용은 화면 예시로 표기합니다.
  • 주의: 이 챕터의 목표는 감탄도 자책도 아닙니다 — 격차의 구조적 분석과 그에 따른 보완 계획이 유일한 산출물입니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 격차 분석 후의 재현 훈련은 공개된 문제 파일과 로컬 환경에서만 수행합니다.

대회가 끝나면 상위 팀의 Write-up이 공개됩니다. 읽기 시작하면 두 가지 감정이 옵니다 — "대단하다"와 "우리는 왜 못 했지". 둘 다 분석이 아닙니다. 소재 원문이 정확히 짚은 대로, 여기서 해야 할 일은 감탄이 아니라 격차의 구조적 분석입니다. 같은 문제를 그들이 왜 더 빨리 풀었는가 — 그 "왜"에는 유형이 있고, 유형마다 따라잡는 방법이 다릅니다.

오늘은 그 분석의 프레임을 배웁니다. 격차를 네 유형으로 분리하고, 못 푼 문제마다 대조표를 만들고, 유형별 보완 계획을 도출합니다. 이 프레임은 이번 대회뿐 아니라 앞으로 만날 모든 상위 팀 Write-up에 재사용되는 도구입니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • 격차의 네 유형(기법·도구화·관점·운영)을 정의하고 실제 사례에 적용한다
  • 못 푼 문제마다 "내 시도 / 정답 풀이 / 막힌 지점 / 격차 유형"의 대조표를 작성한다
  • 푼 문제에서도 더 우아한 풀이를 발견해 라이브러리에 흡수한다
  • 기술 격차와 운영 격차를 분리해 각각 다른 보완 계획을 세운다
  • "그들은 천재라서"라는 회피를 "재현 가능한 격차"의 목록으로 변환한다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 파이썬 3(격차 집계), 문서 도구(대조표), Write-up 아카이브
오늘의 명령 python step327_gap_analysis.py — 격차 유형 집계와 보완 계획 도출
필요한 개념 격차의 4유형, 기술 격차 vs 운영 격차의 분리, 재현 가능성 필터, 라이브러리 흡수
오늘의 산출물 격차 분석 문서(대조표 포함) + 유형별 보완 계획(학습·도구화·운영 개선)

2-1. 격차의 네 유형 — "왜"의 분류표

같은 "못 풀었다"도 원인이 다르면 처방이 다릅니다. 소재 원문의 네 가지 질문이 곧 분류표입니다.

유형 진단 질문 증상 처방
① 기법 격차 우리가 모르는 기법을 알고 있었나 Write-up의 기법이 처음 보는 것 학습 목록행 — 원리 학습 + 유사 문제 특훈
② 도구화 격차 같은 기법인데 도구화가 돼 있었나 기법은 아는데 그들은 40분, 우리는 4시간 도구화 목록행 — 스크립트·템플릿으로 라이브러리 커밋
③ 관점 차이 문제를 보는 관점이 달랐나 기법은 아는데 "거기서 그걸 볼" 생각을 못 함 관점 훈련 — Write-up의 사고 경로 재구성
④ 운영 격차 팀 운영(분업·공유)이 달랐나 문제는 풀 수 있었는데 시간·정보가 안 맞음 운영 개선안 — 팀 규칙 개정

이 분류가 중요한 이유: ①에 ②의 처방을 쓰면(모르는 기법을 도구화하려 하면) 아무것도 되지 않고, ④에 ①의 처방을 쓰면(운영 문제를 학습으로 해결하려 하면) 격차는 그대로입니다. 유형 없는 보완 계획은 계획이 아니라 소망입니다.

2-2. 기술 격차 vs 운영 격차 — 두 개의 다른 축

네 유형을 더 크게 묶으면 두 축입니다. ①②③은 기술 격차 — 문제를 대하는 개인의 역량 차이. ④는 운영 격차 — 역량을 점수로 연결하는 팀 시스템의 차이.

이 분리가 왜 필요한가 — 둘의 회복 곡선이 다르기 때문입니다. 기술 격차는 학습·특훈·재현으로 몇 주~몇 달에 걸쳐 메웁니다. 운영 격차는 회의 한 번으로 규칙을 고치면 다음 대회에 바로 반영됩니다. 분석 문서에서 두 축을 섞어 쓰면 "다음 대회까지 할 것"과 "이번 분기에 할 것"이 뒤섞여 계획이 흐려집니다.

실제 대회에서 많은 팀이 발견하는 사실은 이것입니다 — 총점 격차의 상당 부분이 기술이 아니라 운영에서 나옵니다. 같은 문제를 풀 수 있는 팀이 담당 중복·정보 공유 실패·스코어보드 중독으로 두 시간을 태우면, 그 두 시간은 기술 격차로 기록되지만 실체는 운영 격차입니다. 대조표를 쓸 때 "못 푼 것"과 "못 푼 채로 방치된 것"을 구분하는 이유입니다.

2-3. 재현 가능성 필터 — "천재론"의 해독

소재 원문의 경고입니다: Write-up을 읽다 보면 "그들은 천재라서"라는 결론으로 도망가고 싶어집니다. 이 결론의 문제는 틀렸다는 것이 아니라 행동 불가능하다는 것입니다. "천재"에서는 할 일이 나오지 않습니다.

해독제는 재현 가능성의 질문입니다 — "이 격차를 우리가 재현해 메울 수 있는가?" Write-up을 뜯어 보면 대부분의 격차는 "우리도 아는 것의 조합 + 훨씬 빠른 도구화"로 분해됩니다. 정말로 재현 불가능한 격차(수년의 전공 배경이 필요한 문제 등)도 존재하지만, 그것은 분석의 결론이어야지 첫 반응이어서는 안 됩니다. 재현 가능한 격차만 취하라 — 이 문장이 이 챕터의 작업 규칙입니다.

2-4. 푼 문제도 대조한다 — 우아함의 흡수

격차 분석은 못 푼 문제만의 작업이 아닙니다. 푼 문제의 대조가 오히려 수확이 큰 경우가 많습니다. 같은 플래그를 더 짧은 경로로, 더 범용적인 스크립트로 얻은 풀이가 있다면, 그 풀이는 우리 라이브러리의 업그레이드 패치입니다.

대조의 기준은 세 가지입니다 — 경로의 길이(단계 수), 재사용성(템플릿화 가능한가), 견고함(문제 변형에도 작동하는가). 세 기준에서 우리 풀이가 지면, 우승팀의 접근을 우리 라이브러리에 커밋합니다. 이때 원출처를 함께 적어 둡니다 — 흡수의 기록이자, 나중에 그 팀의 다른 Write-up을 우선 읽는 내비게이션이 됩니다.


3. 따라 하기

3-1. Write-up 수집 — 분석의 원료 모으기

상위 3개 팀의 Write-up을 수집합니다. 채널은 네 곳입니다 — 대회 공식 페이지(수상 팀 풀이 공개), 팀 블로그, CTFtime의 대회 페이지(Write-up 링크 모음), 그리고 본선이라면 시상 후의 풀이 발표 메모(Step 326에서 확보한 것).

수집 규칙은 Step 298의 기출 수집과 같습니다 — 원문 보존, 문제별 폴더 정리, 출처 기록. 단 하나가 다릅니다: 이번에는 Write-up을 먼저 읽는 것이 목적입니다. 문제는 이미 대회에서 만났으니, 훈련 가치의 소멸 걱정 없이 정독할 수 있습니다.

3-2. 대조표 작성 — 문제마다 네 칸

못 푼 문제마다 대조표의 한 행을 채웁니다. 네 칸의 구조입니다 — 내 시도 / 정답 풀이 / 막힌 지점 / 격차 유형.

대조표 작성 예시 (화면 예시):

[web-chain (web, 300점)]
- 내 시도: SSRF 취약점 발견, 내부 포트 스캔까지 진행. 3시간 후 교대, 미해결
- 정답 풀이(우승팀): SSRF → 내부 Redis 접근 → 세션 변조 → 관리자 RCE의 3단 체인
- 막힌 지점: Redis를 발견하고도 "캐시일 뿐"이라고 단정. 체인의 다음 고리를 못 봄
- 격차 유형: ① (SSRF→Redis 체인 패턴을 몰랐음) + ③ (발견한 것을 연결하는 관점 부재)

[pwn-heap (pwn, 350점)]
- 내 시도: tcache 포이즈닝으로 4시간 만에 해결
- 정답 풀이(우승팀): 같은 기법, 하지만 자체 템플릿 스크립트로 40분
- 막힌 지점: 막히지 않았음 — 그러나 6배 느림
- 격차 유형: ② (기법은 같음, 도구화가 다름)

읽는 법: 두 행의 대비를 봅니다. web-chain은 "못 푼 문제"지만 분석 결과 두 유형의 겹침이고, pwn-heap은 "푼 문제"지만 명백한 ② 격차입니다. 순위표에는 둘 다 "풀이 여부"만 기록되지만, 대조표에는 전혀 다른 처방이 기록됩니다. 이것이 격차 분석의 해상도입니다.

3-3. 격차 집계 — 유형별로 모아 보기

대조표가 쌓이면 유형별로 집계해 구조를 봅니다. step327_gap_analysis.py로 저장하세요 — ROWS를 우리 대조표로 교체합니다.

# step327_gap_analysis.py — 우승팀과의 격차 분석 대조표 생성기
# 격차 유형: 1 모르는 기법 / 2 도구화 격차 / 3 관점 차이 / 4 팀 운영 격차

# (문제, 분야, 내 시도 요약, 우승팀 풀이 요약, 막힌 지점, 격차 유형, 우승팀 소요 분, 내 소요 분)
ROWS = [
    ("pwn-heap",   "pwn",   "tcache 포이즈닝 시도",   "same, 하지만 템플릿 스크립트로 40분", "속도",            2, 40,  240),
    ("web-chain",  "web",   "SSRF 단일 시도",          "SSRF→Redis→RCE 3단 체인",              "체인 구성 못 함",  1, 90,  None),
    ("crypto-aes", "crypto","ECB 오라클 의심",          "CBC bit-flipping, 라이브러리 함수 사용", "유형 식별 실패",   1, 35,  None),
    ("rev-packed", "rev",   "수동 언패킹 시도",         "동적 덤프 스크립트로 자동화",            "도구 없음",        2, 50,  150),
    ("foren-mem",  "foren", "Volatility 기본 플러그인", "커스텀 프로파일 + 타임라인 상관",         "관점이 달랐음",    3, 60,  None),
]

TYPE_NAME = {1: "① 모르는 기법", 2: "② 도구화 격차", 3: "③ 관점 차이", 4: "④ 팀 운영 격차"}

print("=== 격차 대조표 ===\n")
print(f"{'문제':<12}{'분야':<8}{'막힌 지점':<16}{'격차 유형':<14}{'우승팀':>6}{'우리':>6}")
from collections import Counter
types = Counter()
for name, cat, mine, win, stuck, t, wt, mt in ROWS:
    types[t] += 1
    m = f"{mt}분" if mt else "미해결"
    print(f"{name:<12}{cat:<8}{stuck:<16}{TYPE_NAME[t]:<14}{wt:>5}분{m:>7}")

print("\n=== 격차 유형 집계 ===")
for t, k in sorted(types.items()):
    print(f"  {TYPE_NAME[t]}: {k}건")

print("\n=== 유형별 보완 계획 (자동 도출) ===")
plan = {
    1: "학습 목록행 — 해당 기법의 원리 학습 + 유사 문제 5개 특훈",
    2: "도구화 목록행 — 풀이를 스크립트/템플릿으로 만들어 라이브러리 커밋",
    3: "관점 훈련 — 우승팀 Write-up을 문제부터 다시 읽고 '왜 거기서 그걸 봤나' 재구성",
    4: "운영 개선안 — 분업·정보 공유 규칙을 팀 회의에서 개정",
}
for t, k in sorted(types.items()):
    print(f"  {TYPE_NAME[t]} ({k}건) → {plan[t]}")

solved_by_winner = [r for r in ROWS if r[7] is None]
print(f"\n우승팀이 풀고 우리는 못 푼 문제: {len(solved_by_winner)}건 — 재현 목록에 전량 등록")
for r in solved_by_winner:
    print(f"   - {r[0]} ({r[1]})")

위 대조표 데이터로 실행한 실측 출력입니다:

=== 격차 대조표 ===

문제          분야      막힌 지점           격차 유형            우승팀    우리
pwn-heap    pwn     속도              ② 도구화 격차         40분   240분
web-chain   web     체인 구성 못 함       ① 모르는 기법         90분    미해결
crypto-aes  crypto  유형 식별 실패        ① 모르는 기법         35분    미해결
rev-packed  rev     도구 없음           ② 도구화 격차         50분   150분
foren-mem   foren   관점이 달랐음         ③ 관점 차이          60분    미해결

=== 격차 유형 집계 ===
  ① 모르는 기법: 2건
  ② 도구화 격차: 2건
  ③ 관점 차이: 1건

=== 유형별 보완 계획 (자동 도출) ===
  ① 모르는 기법 (2건) → 학습 목록행 — 해당 기법의 원리 학습 + 유사 문제 5개 특훈
  ② 도구화 격차 (2건) → 도구화 목록행 — 풀이를 스크립트/템플릿으로 만들어 라이브러리 커밋
  ③ 관점 차이 (1건) → 관점 훈련 — 우승팀 Write-up을 문제부터 다시 읽고 '왜 거기서 그걸 봤나' 재구성

우승팀이 풀고 우리는 못 푼 문제: 3건 — 재현 목록에 전량 등록
   - web-chain (web)
   - crypto-aes (crypto)
   - foren-mem (foren)

읽는 법: 집계가 이야기하는 것을 읽습니다. 이 예시 팀의 격차는 ① 2건, ② 2건, ③ 1건, ④ 0건입니다. 두 가지 결론. ① 우승팀과의 격차가 "천재성"이 아닙니다 — 다섯 문제 모두 아는 기법의 부재나 도구화의 부재로 분해됐습니다. 특히 ② 두 건(pwn-heap 40분 vs 240분, rev-packed 50분 vs 150분)은 기법이 같은데 시간만 다릅니다 — 템플릿 스크립트 두 개가 5시간 30분의 차이를 만들었고, 그 시간이면 미해결 세 문제 중 하나를 더 공략할 수 있었습니다. ② 보완 계획이 유형별로 자동 분기됩니다 — 학습 목록 2건, 도구화 목록 2건, 관점 훈련 1건. 이 목록이 다음 훈련 주기의 입력입니다.

3-4. 운영 격차의 분석 — 점수 밖의 점수

④ 유형은 대조표 밖에서 찾습니다. 상위 팀의 운영 방식이 후기나 발표에서 공개됐다면, 우리의 당일 로그(Step 326)와 비교합니다.

운영 격차 비교표 (화면 예시):
| 항목 | 우승팀(공개 후기) | 우리 팀(당일 로그) |
| 분업 | 분야 담당 + 전원 리뷰어 1명 상주 | 분야 담당만, 리뷰는 비정기 |
| 정보 공유 | 발견 즉시 공용 보드에 기록 의무 | 스레드에 기록했으나 누락 2건 |
| 스코어보드 | 1시간 간격 고정 확인 | 회의(3~4시간 간격) 때만 — 우리가 더 엄격 |
| 마감 관리 | 종료 30분 전 풀이 정리 담당 별도 | 종료 후 60분 정리 — 운영 과다로 기록됨 |

이 표의 용법: 모든 차이가 격차는 아닙니다 — 스코어보드 항목처럼 우리가 나은 운영도 있습니다. 격차 분석의 목적은 자책이 아니라 채택입니다. "리뷰어 상주"와 "마감 정리 담당 분리"가 채택 대상이라면, 그 두 줄이 다음 대회 운영 계획의 개정안입니다.

3-5. 격차 분석 문서의 완성 — 세 목록의 도출

분석의 최종 산출물은 문서 하나입니다. 구조는 대조표 + 집계 + 세 목록입니다.

격차 분석 문서 구조 (화면 예시):
1. 대조표 (3-2) — 모든 미해결 문제 + 푼 문제 중 더 나은 풀이가 있던 것
2. 유형 집계 (3-3) — 격차의 구조 한눈에 보기
3. 보완 계획 세 목록:
   - 학습 목록: ① 유형 기법들 — 각 기법의 원리 학습 자료 + 유사 문제 5개
   - 도구화 목록: ② 유형 기법들 — 템플릿화 명세 + 라이브러리 커밋 일정
   - 운영 개선안: ④ 유형 — 다음 대회부터 적용할 규칙 개정 문장
4. 재현 목록 — 우승팀이 풀고 우리는 못 푼 문제 전량, 담당과 기한 포함

문서의 완료 조건은 "읽을 만하다"가 아니라 각 목록의 첫 항목에 다음 행동이 붙어 있다는 것입니다. 학습 목록의 첫 기법에 학습 자료 링크가, 도구화 목록의 첫 항목에 템플릿 명세가, 운영 개선안에 개정 문장 초안이. 분석의 끝은 이해가 아니라 행동 목록입니다.


4. 미션과 연습문제

미션 — 격차 분석 문서 완성

  1. 상위 3개 팀의 Write-up을 수집하고 문제별로 정리합니다 (3-1).
  2. 못 푼 문제 전체에 대해 대조표(내 시도/정답 풀이/막힌 지점/격차 유형)를 작성합니다.
  3. 푼 문제도 대조합니다 — 더 우아한 풀이를 발견하면 라이브러리 개선 항목으로 등록합니다.
  4. step327_gap_analysis.py에 대조표를 입력해 유형 집계와 보완 계획을 도출합니다.
  5. 운영 격차 비교표(3-4)를 작성하고, 세 목록(학습·도구화·운영 개선)으로 보완 계획을 완성합니다 — 각 목록 첫 항목에 다음 행동을 붙입니다.

연습문제

문제 1. ① 기법 격차와 ② 도구화 격차는 Write-up 상에서 어떻게 구분되나요? 각각의 진단 질문과 처방의 차이를 설명해 보세요.

문제 2. "그들은 천재라서"라는 결론이 분석의 관점에서 왜 문제인지, "재현 가능성 필터"의 개념으로 설명해 보세요.

문제 3. 3-3 실측 출력에서 ② 도구화 격차 두 건(pwn-heap 240분→40분, rev-packed 150분→50분)이 총점에 미친 영향을 시간 환산으로 추정해 보세요. 이 시간이 확보됐다면 무엇이 달라졌을 수 있나요?

문제 4. 푼 문제도 대조하는 이유를, 대조의 세 기준(경로 길이·재사용성·견고함)과 함께 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

검증 기준으로 확인하세요.

  1. 수집의 완전성: 상위 3개 팀의 Write-up이 문제별로 정리되고 출처가 기록됐는가 — 본선이었다면 풀이 발표 메모도 포함됐는가.
  2. 대조표의 해상도: 모든 미해결 문제의 행에 "막힌 지점"이 추상적 표현("몰랐다")이 아니라 구체적 지점("Redis를 발견하고도 캐시로 단정")으로 적혔는가.
  3. 유형 판정의 근거: 각 격차 유형이 진단 질문에 대한 답으로 판정됐는가 — 유형 없는 행이 남아 있지 않은가.
  4. 푼 문제의 대조: 더 나은 풀이를 발견한 사례가 라이브러리 개선 항목으로 등록됐는가.
  5. 계획의 행동성: 세 목록의 각 첫 항목에 다음 행동(자료 링크·명세·개정 문장)이 붙어 있고, 재현 목록 전량에 담당과 기한이 있는가.

연습문제 해답

문제 1 해답. 구분의 핵심은 "기법을 알고 있었는가"입니다. Write-up의 핵심 기법을 읽었을 때 처음 보는 것이면 ①이고, 알고 있는 기법인데 그들의 실행이 압도적으로 빠르면 ②입니다. 진단 질문으로는 ①은 "우리가 모르는 기법을 알고 있었나", ②는 "같은 기법인데 도구화가 되어 있었나". 처방은 완전히 다릅니다 — ①은 학습(원리 이해 + 유사 문제 특훈)이 필요한 반면, ②는 공학(기존 지식의 스크립트·템플릿화)입니다. ①에 공학을 쓰면 무엇을 만들지 모르고, ②에 학습을 쓰면 이미 아는 것을 다시 배우는 낭비가 됩니다.

문제 2 해답. "천재"라는 결론은 분석의 종결입니다 — 그 단어에는 행동이 없습니다. 재현 가능성 필터는 이 종결을 막는 질문입니다: "이 격차를 우리가 재현해 메울 수 있는가?" 필터를 통과한 격차는 전부 행동 목록으로 변환됩니다 — 모르는 기법은 학습 목록으로, 도구화는 템플릿 명세로. 실제로 Write-up을 뜯어 보면 대부분의 격차는 "아는 것의 조합 + 빠른 도구화"로 분해되므로 필터의 통과율이 높습니다. 정말 재현 불가능한 격차가 남더라도, 그것은 전체를 분해한 뒤의 결론이어야지 첫 반응이어서는 안 됩니다 — 첫 반응의 "천재론"은 분석 회피이고, 필터는 그 회피를 막는 작업 규칙입니다.

문제 3 해답. 시간 환산: pwn-heap에서 200분, rev-packed에서 100분, 합계 300분 = 5시간의 절약입니다. 이 대회에서 우리 팀의 미해결은 3건(web-chain, crypto-aes, foren-mem)이었고, 우승팀의 해당 문제 소요 시간은 각각 90분, 35분, 60분 — 5시간이면 이 중 최소 두 문제에 착수해 완료할 수 있는 시간입니다. 물론 도구화는 대회 전에 완성돼 있어야 하므로 "그날의 5시간"은 다음 대회의 점수로 이월되는 자산입니다. 이 계산이 도구화 목록의 우선순위 근거가 됩니다 — 템플릿 두 개의 가치가 문제 두 개의 배점이라는 것이 숫자로 보입니다.

문제 4 해답. 못 푼 문제의 대조가 "못 한 것"의 분석이라면, 푼 문제의 대조는 "더 잘할 수 있었던 것"의 발견입니다 — 그리고 후자가 실전에서 더 자주 점수를 바꿉니다. 세 기준으로 대조합니다. 경로 길이: 같은 플래그를 더 적은 단계로 얻는 풀이는 대회 시간을 절약합니다. 재사용성: 템플릿화된 풀이는 다음 대회의 같은 유형에서 그대로 작동합니다. 견고함: 문제가 변형됐을 때도 작동하는 풀이는 유형 전체를 커버합니다. 푼 문제에서 이 기준을 통과하지 못한 우리 풀이는 "정답이지만 개선 여지 있음"으로 표시되고, 우승팀의 접근이 라이브러리의 업그레이드 패치로 커밋됩니다. 격차 분석의 절반은 패배의 분석이지만, 나머지 절반은 승리의 검수입니다.

완료 기준 체크리스트

  • [ ] 상위 3개 팀의 Write-up을 수집하고 문제별로 정리했다
  • [ ] 못 푼 문제 전체의 대조표(내 시도/정답 풀이/막힌 지점/격차 유형)를 작성했다
  • [ ] 푼 문제도 대조해 더 나은 풀이를 라이브러리 개선 항목으로 등록했다
  • [ ] 격차 유형 집계를 스크립트로 도출하고 구조를 읽었다
  • [ ] 운영 격차 비교표를 작성하고 채택할 규칙을 골랐다
  • [ ] 보완 계획 세 목록(학습·도구화·운영 개선)을 완성했다
  • [ ] 각 목록 첫 항목에 다음 행동을 붙였다
  • [ ] 재현 목록 전량에 담당과 기한을 배정했다

6. 흔한 실수와 해결

벽 1. 우승팀 Write-up이 너무 생략돼 있어서 따라갈 수 없어요

증상: "여기서 표준적인 체인을 연결한다" 같은 한 줄이 실제로는 세 단계입니다.

원인: 상위 팀의 Write-up은 독자를 같은 수준으로 가정합니다 — 생략은 의도된 것이 아니라 그들에게는 "당연"입니다.

해결: 생략을 채우는 것이 곧 분석 훈련입니다. 절차는 세 단계입니다. ① 생략 지점에 표시 — "이 한 줄이 실제로 몇 단계인가"를 세어 봅니다. ② 각 단계의 근거를 역추적 — 왜 이 단계가 되는지, 해당 소프트웨어의 문서·소스로 확인합니다. ③ 채운 내용으로 로컬에서 재현. 이때 막히면 그 지점이 바로 ① 유형 격차의 정확한 위치입니다 — Write-up의 생략은 버그가 아니라 우리 격차의 측정기입니다.

벽 2. 격차 유형을 매기다 보니 전부 ①(모르는 기법)이 돼요

증상: 대조표의 유형 열이 ①로만 채워집니다.

원인: 대부분은 분석의 해상도 부족입니다 — "모른다"로 뭉뚱그린 격차 속에 ②③④가 숨어 있는 경우가 많습니다.

해결: 각 행에 두 번째 질문을 던지세요. "정말 기법을 몰랐는가, 아니면 알고도 떠올리지 못했는가(③)?" "알고 떠올렸는데 손이 느렸는가(②)?" "시간이 없어서 시도조차 못 했는가(④)?" 특히 ④는 대조표가 아니라 당일 로그에서 확인됩니다 — 그 문제에 투입된 시간이 30분 미만이었다면 기술 격차가 아니라 배정 격차입니다. 유형이 한쪽으로 몰리는 것 자체가 분석 품질의 경고 신호입니다.

벽 3. 보완 계획이 너무 커져서 다음 시즌 전부를 채워요

증상: 학습 목록 15건, 도구화 목록 10건 — 다 하려면 반 년입니다.

원인: 정상입니다 — 좋은 분석은 항상 할 일을 넘치게 만듭니다. 문제는 우선순위의 부재입니다.

해결: 두 가지 기준으로 자릅니다. ① 빈도 가중 — 다음 시즌 대회들에서 그 기법·유형이 나올 확률(Step 298의 기출 경향 데이터가 근거). ② 비용 대비 효과 — 도구화 2건은 각 하루면 되는데 학습 1건은 2주라면, 도구화가 먼저입니다. Step 295의 단일 목표 원칙을 상기하세요 — 목록의 모든 것을 동시에 하지 않고, 이번 주기의 1~2개만 실행합니다. 나머지는 "다음 기회에"가 아니라 "우선순위 큐에" 들어갑니다 — 큐에 있다는 것은 버린 것이 아니라 순서를 정한 것입니다.

벽 4. 팀원이 분석 자체를 거부해요 — "졌는데 또 보자고?"

증상: 대회 직후의 피로와 패배감으로 격차 분석 회의가 성립되지 않습니다.

원인: 감정은 정상이고, 타이밍의 문제입니다. 그리고 분석이 "누가 못했나"의 자리로 느껴지면 누구든 거부합니다.

해결: 두 가지 장치. ① 시간 간격 — 대회 직후에는 소감 회의(Step 326, 15분)까지만 하고, 격차 분석은 며칠 뒤로 예정합니다. 단, 원료 확보(로그·Write-up 수집)는 당일에 끝내야 합니다 — 분석은 미뤄도 기록은 미루면 사라집니다. ② 규칙의 사전 공지 — 분석의 목적이 "기여 평가"가 아님을 미리 정합니다. 대조표에는 이름이 아니라 문제와 유형만 옵니다. 분석의 대상은 팀원이 아니라 격차입니다.

벽 5. 분석은 했는데 다음 대회에서 똑같이 져요

증상: 격차 분석 문서가 있는데 행동이 바뀌지 않았습니다.

원인: 문서의 완료 조건을 위반한 것입니다 — "각 목록의 첫 항목에 다음 행동"이 없었거나, 있어도 실행이 추적되지 않았습니다.

해결: 문서와 훈련 주기를 연결하세요. ① 학습·도구화 목록은 훈련 계획표(Step 325의 TASKS 형식)에 실제 시간으로 배정될 때만 "계획"입니다. ② 운영 개선안은 다음 대회의 당일 전략 문서에 규칙 문장으로 들어가야 합니다 — "리뷰어 상주"라는 개선안이 다음 전략 문서에 "각 문제 해결 시 다른 팀원 1명의 플래그 검증 후 제출"로 번역되지 않으면 실행되지 않습니다. 분석 문서의 마지막에 "이 문서의 각 항목이 어디로 갔는가"를 추적하는 열을 추가하세요 — 분석의 끝은 문서가 아니라 문서가 바꾼 행동입니다.


7. 정리

오늘의 개념

개념 한 줄 설명
격차의 4유형 ① 모르는 기법 ② 도구화 격차 ③ 관점 차이 ④ 팀 운영 격차
기술 vs 운영 격차 회복 곡선이 다른 두 축 — 학습의 문제와 규칙의 문제를 분리
재현 가능성 필터 "메울 수 있는가"의 질문 — 천재론을 행동 목록으로 변환
대조표 내 시도 / 정답 풀이 / 막힌 지점 / 격차 유형의 네 칸
푼 문제의 대조 경로 길이·재사용성·견고함 — 승리의 검수
세 목록 학습 목록·도구화 목록·운영 개선안 — 분석의 끝은 행동

오늘의 도구·명령어

도구·명령 하는 일
python step327_gap_analysis.py 대조표의 유형 집계·보완 계획 분기·재현 목록 도출
대조표 양식 문제당 네 칸 — 막힌 지점은 구체적 지점으로
운영 격차 비교표 상위 팀의 공개 운영 방식 vs 우리 당일 로그
생략 추적 절차 생략 지점 표시 → 근거 역추적 → 로컬 재현
행동 추적 열 분석 항목이 어느 계획·문서로 갔는지의 추적

명령어보다 중요한 감각

격차 분석에서 가장 위험한 적은 우승팀이 아니라 두 가지 감정입니다 — 감탄과 자책. 감탄은 분석을 구경으로 바꾸고, 자책은 분석을 처벌로 바꿉니다. 이 챕터의 프레임은 둘 사이의 세 번째 길입니다 — 격차를 유형으로 분해하면, 거기에는 항상 우리가 할 수 있는 일이 있습니다. 모르는 기법은 배우면 되고, 도구화는 만들면 되고, 관점은 훈련하면 되고, 운영은 규칙을 고치면 됩니다.

그리고 이 프레임의 진짜 가치는 재사용입니다. 오늘 만든 대조표 양식과 집계 도구는 다음 대회에서도, 그리고 국제 대회의 세계 랭킹 팀들의 Write-up 앞에서도 그대로 작동합니다. 격차가 커질수록 분석의 가치는 커집니다 — 상대가 강할수록 그들의 Write-up은 더 좋은 교과서가 되니까요.


전부 체크되면 Step 327 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.