Step 325. 본선 대비 집중 훈련 — 아는 것을 확실히 하는 2주

Step 325. 본선 대비 집중 훈련 — 아는 것을 확실히 하는 2주

Level 4 — 전문가 | 난이도 ★★★★☆ | 예상 소요 시간 2일 (훈련 계획 수립 반나절 + 2주 훈련의 설계·착수)

전제: Step 324의 예선 결과 기록(못 푼 문제 목록과 막힌 지점). 본선 진출이 확정됐거나, 다음 시즌을 위한 동일 형식의 훈련을 설계하는 팀에도 그대로 적용됩니다.

  • 준비물: 예선 결과 기록(Step 324의 산출물), 본선 공지(형식·시간·규정), 훈련용 플랫폼(드림핵·외부 워게임 등), 팀 회의 시간. 계획표 생성 스크립트는 여러분의 데이터로 돌리는 실측 도구이고, 본선 관련 정보는 화면 예시로 표기합니다.
  • 주의: 이 챕터의 훈련 기간은 "본선까지 남은 약 2주"를 전제합니다. 진출하지 못했더라도 예선 미해결 문제 재현은 그대로 가장 효율적인 훈련입니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 재현 훈련은 공개된 문제 파일과 로컬 환경에서만 수행합니다.

본선 진출이 확정됐습니다. 이제 남은 2주가 승부입니다 — 그런데 이 2주의 사용법에는 함정이 있습니다. 조급함이 "새로운 것"을 요구합니다. 커널 포너블을 이참에 배워 볼까, 최신 웹 체인을 익혀 볼까. 소재 원문이 정확히 지적한 그 유혹입니다. 그리고 그 유혹은 본선에서 지는 길입니다.

직전 2주는 새로 배우는 시간이 아니라 아는 것을 확실히 하는 시간입니다. 예선에서 못 푼 문제는 출제자가 "본선 수준"으로 설계한 문제이고, 그 재현이 곧 최고의 본선 대비입니다. 오늘은 본선 형식을 조사하고, 재현 중심의 2주 계획표를 도구로 만들어, 훈련의 첫 삽을 뜹니다.


1. 학습 목표

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

  • 본선 형식(장시간 제퍼디/공격-방어/발표 포함)을 조사하고 형식별 대비의 차이를 설명한다
  • 예선 미해결 문제의 재현이 왜 최고의 본선 대비인지 설명하고 재현을 완료한다
  • 훈련 항목을 중요도·소요 시간으로 정리해 남은 일수에 배정하는 계획표를 생성한다
  • 공격-방어(Attack & Defense) 형식일 때 필요한 별도 훈련 세 가지를 나열한다
  • "직전 2주는 새 기술 금지" 원칙의 근거를 설명하고 훈련 계획에 적용한다

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

오늘의 도구 한눈에 보기

구분 내용
언어·환경 파이썬 3(훈련 계획표 생성), 로컬 재현 환경(VM·도커), 훈련용 플랫폼, 공유 문서
오늘의 명령 python step325_training_plan.py — 남은 일수에 훈련 항목을 자동 배정
필요한 개념 재현 훈련(풀이 이해 ≠ 풀이 능력), 형식별 대비, 직전 2주 원칙, 버퍼
오늘의 산출물 본선 형식 조사 메모 + 재현 기록 + 2주 훈련 계획표 + 운영 계획 초안

2-1. 본선은 다른 게임이다 — 세 가지 형식

예선이 24시간 온라인 제퍼디였다면, 본선은 대회마다 형식이 갈립니다. 형식을 모르고 준비하는 것은 종목을 모르고 훈련하는 것과 같습니다.

형식 구조 대비의 핵심
장시간 제퍼디 1~2일, 문제 수는 적고 난도 높음 깊이 파는 체력, 장시간 운영, 오프라인 환경 적응
공격-방어(A&D) 각 팀이 같은 서비스를 운영 — 내 서비스 패치 + 상대 서비스 공격 패치 속도, 익스플로잇 자동화, 트래픽 모니터링
풀이 발표 포함 제출한 풀이를 심사 앞에서 발표·질의응답 풀이의 문서화 품질, 설명력, 질문 대응

같은 실력도 형식에 따라 환산율이 달라집니다. 장시간 제퍼디에서 이기는 팀은 "한 문제를 6시간 파는 지구력"의 팀이고, A&D에서 이기는 팀은 "공격과 패치를 동시에 굴리는 분업"의 팀입니다. 첫 준비 행동은 훈련이 아니라 형식 조사입니다 — 역대 본선 후기와 규정에서 형식, 시간, 채점 방식을 확인하세요.

2-2. 재현 훈련 — 왜 "이해"가 아니라 "다시 푸는가"

예선에서 못 푼 문제의 Write-up이 공개됩니다. 여기서 갈림길이 있습니다. 읽고 "아, 그렇구나"로 끝내는 것과, 환경을 직접 구성해 손으로 다시 푸는 것. 둘의 차이는 대회에서 정확히 드러납니다.

풀이 이해 ≠ 풀이 능력입니다. Write-up을 읽을 때 우리는 결과를 알고 과정을 따라가므로, 모든 단계가 자연스러워 보입니다. 그런데 대회에서 문제를 만나면 결과가 없습니다 — 어느 지점에서 어떤 가설을 세워야 하는지가 바로 훈련의 대상이고, 이것은 결과 없이 부딪혀 봐야만 생깁니다. 재현은 Write-up을 옆에 두고도 손이 직접 전 과정을 수행하는 훈련입니다.

재현의 규칙은 세 가지입니다. ① 환경은 직접 구성합니다 — 문제 바이너리를 로컬에서 띄우거나, 도커 파일이 있으면 빌드합니다. ② 막히면 Write-up의 "다음 한 단계"만 봅니다 — 전체를 읽고 따라 하면 재현이 아니라 필사입니다. ③ 완료 후 그 유형을 한 문장으로 일반화해 라이브러리에 커밋합니다(Step 298의 일반화 공식).

2-3. 공격-방어 대비 — 형식이 A&D라면 추가할 세 훈련

본선이 A&D라면 제퍼디 훈련만으로는 부족합니다. A&D는 "문제를 푸는" 게임이 아니라 "서비스를 운영하는" 게임입니다. 추가할 훈련 세 가지.

A&D 추가 훈련 목록:
1. 패치 속도 훈련 — 취약한 서비스 소스를 받고, 기능을 깨지 않고 취약점만
   막는 패치를 30분 안에 작성·적용·검증하는 연습 (타이머 필수)
2. 익스플로잇 자동화 — 손으로 성공한 익스플로잇을 "IP만 바꾸면 모든
   상대 팀 서버에 작동하는 스크립트"로 변환 (반복 실행과 결과 수집 포함)
3. 트래픽 모니터링 체계 — 내 서비스에 들어오는 공격 트래픽을 보고 상대의
   익스플로잇을 역으로 파악하는 체계 (pcap 수집 + 의심 패턴 알림)

셋의 공통점은 속도와 반복입니다. A&D에서는 완벽한 패치 하나보다 80%짜리 패치의 빠른 배포가 점수를 지키고, 정교한 익스플로잇 하나보다 모든 상대에게 돌아가는 평범한 자동화가 점수를 쓸어 담습니다. 제퍼디의 깊이와 A&D의 속도는 다른 근육입니다.

2-4. 직전 2주 원칙과 버퍼 — 계획의 두 축

소재 원문의 경고를 계획의 원칙으로 옮깁니다: 직전 2주는 "새로 배우는 시간"이 아니라 "아는 것을 확실히 하는 시간". 새 기술의 학습 곡선은 대부분 2주 안에 실전 수준에 도달하지 못하고, 반쯤 배운 기술은 본선에서 "아는 척"을 만들어 시간을 태웁니다. 아는 것의 정확도와 속도를 올리는 것이 이 기간의 기대값이 가장 높은 투자입니다.

두 번째 축은 버퍼입니다. 재현이 예상보다 오래 걸리고, 팀원의 일정은 어긋나고, 환경 구성은 꼬입니다. 필요 시간과 가용 시간이 정확히 같으면 계획은 첫 지연에서 붕괴합니다. 가용 시간의 15~20%를 빈 칸으로 남기는 것이 계획의 일부입니다. 3-3의 도구가 이 버퍼를 자동으로 계산해 줍니다.


3. 따라 하기

3-1. 본선 형식 조사 — 계획의 입력값

가장 먼저, 본선의 형식을 확인합니다. 확인 채널은 대회 공지·규정 문서, 역대 본선 후기(참가자 블로그), 주최 측 사전 설명회입니다.

본선 형식 조사 메모 (화면 예시):
- 형식: 오프라인 장시간 제퍼디 (10:00~18:00, 8시간)
- 문제: 6~8개, 분야 혼합, 일부 문제는 단계별 플래그
- 환경: 대회장 네트워크, 개인 노트북 지참, 외부 인터넷 제한 구간 있음
- 채점: 정적 배점 + 동점 시 마지막 플래그 제출 시각이 빠른 팀 우선
- 특이사항: 종료 후 상위 3팀 풀이 발표 있음

조사 결과가 계획을 바꾸는 예: "외부 인터넷 제한"이 있으면 익스플로잇 라이브러리와 문서를 로컬 사본으로 준비하는 항목이 계획에 들어갑니다. "동점 시 제출 시각 우선"이면 쉬운 문제의 신속 회수가 재등장합니다. 조사 없는 계획은 상상 위의 계획입니다.

3-2. 예선 미해결 문제 재현 — 최우선 항목

Step 324의 결과 기록에서 못 푼 문제 목록을 꺼냅니다. 이 문제들은 출제자가 본선 수준으로 설계한 문제이므로, 재현이 곧 본선 예상 문제 풀이입니다. 팀원에게 분배하고, 2-2의 재현 규칙으로 진행합니다.

재현 기록 양식 (화면 예시):
[예선 crypto-aes 재현 — 담당 C]
- 환경 구성: 문제 소스를 로컬에서 빌드 (도커 파일 있음) — 40분
- 1차 시도: 예선 때와 같은 접근(ECB 오라클 가정) — 50분, 막힘 재현됨
- Write-up 첫 힌트 확인: "모드를 확인하라" — 응답 길이 분석으로 CBC 확인
- bit-flipping 익스플로잇 작성 — 1시간 20분, 로컬 플래그 획득
- 일반화 커밋: "고정 prefix oracle처럼 보여도 CBC 가능성 배제 절차"
  → crypto 치트시트에 '모드 식별 절차' 항목 추가

읽는 법: 기록에서 가장 값진 줄은 "1차 시도 … 막힘 재현됨"입니다. 예선에서의 막힘이 우연이 아니라 구조(가정을 검증하는 절차의 부재)였음이 확인된 순간입니다. 재현의 산출물은 플래그가 아니라 이 확인과 일반화된 치트시트 항목입니다.

3-3. 2주 훈련 계획표 — 도구로 배정한다

재현과 특훈, 운영 준비를 남은 일수에 배정합니다. 감으로 나누면 앞쪽에 몰리고 직전일까지 훈련이 남습니다. step325_training_plan.py로 저장하세요 — DAYS_LEFTTASKS를 우리 팀 상황으로 교체하면 됩니다.

# step325_training_plan.py — 본선 대비 집중 훈련 계획표 생성기
DAYS_LEFT = 14          # 본선까지 남은 날
HOURS_PER_DAY = 4       # 하루 훈련 가능 시간

# (훈련 항목, 소요 시간, 중요도 1~5, 구분: 재현/특훈/운영)
TASKS = [
    ("예선 미해결 문제 재현 (전원 분배)",  16, 5, "재현"),
    ("힙 포너블 특훈 10문제",             12, 4, "특훈"),
    ("고급 크립토(AES 오라클) 특훈",        8, 3, "특훈"),
    ("익스플로잇 라이브러리 정리·커밋",      4, 5, "운영"),
    ("본선 운영 계획 회의 (역할·교대 확정)",  3, 5, "운영"),
    ("장비·체크리스트 최종 점검",            2, 4, "운영"),
    ("컨디션 관리 (훈련 없음, 휴식)",        0, 5, "운영"),
]

capacity = DAYS_LEFT * HOURS_PER_DAY
need = sum(t[1] for t in TASKS)
print(f"=== 본선 D-{DAYS_LEFT} 훈련 계획표 ===")
print(f"가용 시간: {DAYS_LEFT}일 x {HOURS_PER_DAY}시간 = {capacity}시간 / 필요: {need}시간")
print(f"여유: {capacity - need}시간 (버퍼 {max(0,(capacity-need))*100//capacity}%)\n")

plan = []
day, left = 1, HOURS_PER_DAY
for name, hours, imp, kind in sorted(TASKS, key=lambda t: -t[2]):
    if kind == "운영" and "컨디션" in name:
        plan.append((DAYS_LEFT, name, 0))
        continue
    remain = hours
    while remain > 0:
        if day > DAYS_LEFT - 2 and kind != "운영":
            day = DAYS_LEFT - 2  # 마지막 이틀에는 새 훈련을 넣지 않음
        use = min(remain, left)
        plan.append((day, name, use))
        remain -= use
        left -= use
        if left <= 0:
            day += 1
            left = HOURS_PER_DAY

plan.sort()
cur = None
for d, name, use in plan:
    if d != cur:
        print(f"{d:>2}일차 (D-{DAYS_LEFT - d:>2}):")
        cur = d
    print(f"   - {name}" + (f" ({use}시간)" if use else ""))

print("\n규칙 확인: 직전 2일(D-1, D-0)에는 새 기술 훈련이 배정되지 않았는가?")
bad = [p for p in plan if p[0] >= DAYS_LEFT - 1 and p[2] > 0 and "점검" not in p[1]]
print("   ->", "OK, 직전 2일은 점검·휴식만" if not bad else f"위반: {bad}")

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

=== 본선 D-14 훈련 계획표 ===
가용 시간: 14일 x 4시간 = 56시간 / 필요: 45시간
여유: 11시간 (버퍼 19%)

 1일차 (D-13):
   - 예선 미해결 문제 재현 (전원 분배) (4시간)
 2일차 (D-12):
   - 예선 미해결 문제 재현 (전원 분배) (4시간)
 3일차 (D-11):
   - 예선 미해결 문제 재현 (전원 분배) (4시간)
 4일차 (D-10):
   - 예선 미해결 문제 재현 (전원 분배) (4시간)
 5일차 (D- 9):
   - 익스플로잇 라이브러리 정리·커밋 (4시간)
 6일차 (D- 8):
   - 본선 운영 계획 회의 (역할·교대 확정) (3시간)
   - 힙 포너블 특훈 10문제 (1시간)
 7일차 (D- 7):
   - 힙 포너블 특훈 10문제 (4시간)
 8일차 (D- 6):
   - 힙 포너블 특훈 10문제 (4시간)
 9일차 (D- 5):
   - 장비·체크리스트 최종 점검 (1시간)
   - 힙 포너블 특훈 10문제 (3시간)
10일차 (D- 4):
   - 고급 크립토(AES 오라클) 특훈 (3시간)
   - 장비·체크리스트 최종 점검 (1시간)
11일차 (D- 3):
   - 고급 크립토(AES 오라클) 특훈 (4시간)
12일차 (D- 2):
   - 고급 크립토(AES 오라클) 특훈 (1시간)
14일차 (D- 0):
   - 컨디션 관리 (훈련 없음, 휴식)

규칙 확인: 직전 2일(D-1, D-0)에는 새 기술 훈련이 배정되지 않았는가?
   -> OK, 직전 2일은 점검·휴식만

읽는 법: 네 가지 구조를 봅니다. ① 버퍼 19% — 56시간 중 11시간이 빈 칸입니다. 지연과 추가 재현이 이 칸을 씁니다. ② 재현이 앞 4일 — 중요도 5점이 최우선이고, 기억이 신선할 때 몰아서 하는 것도 의도입니다. ③ 특훈은 연속 배치 — 힙 특훈 12시간이 6~9일차에 연속됩니다. 특훈은 끊기면 손근육이 식으므로 뭉쳐야 합니다. ④ 13일차(D-1)가 비어 있음 — 스크립트가 "마지막 이틀에는 새 훈련 금지" 규칙으로 밀어 낸 결과입니다. 직전 2일은 점검과 휴식만. 이 빈칸이 2-4의 원칙이 계획에 새겨진 모습입니다.

3-4. 운영 계획 회의 — 훈련의 마지막 항목

6일차에 배정된 운영 계획 회의에서는 훈련이 아니라 본선 당일의 운영을 확정합니다. Step 324의 전략 문서를 본선 형식에 맞게 개정하는 자리입니다.

본선 운영 계획 회의 안건 (화면 예시):
1. 형식 반영 — 8시간 제퍼디 기준으로 열거·회의·교대 규칙의 시간 상수 수정
   (예: 2시간 교대 규칙 → 8시간 대회에서는 90분으로 단축?)
2. 분야 배정 — 특훈 결과를 반영해 담당 재배정
3. 인수인계 규칙 — 오프라인(같은 공간)에서도 문서 인수인계를 유지할 것인가
4. 식사·휴식 계획 — 대회장에서의 식사 동선, 컨디션 담당 지정
5. 로컬 사본 점검 — 인터넷 제한 대비 라이브러리·문서의 오프라인 패키징

회의의 산출물은 "본선 당일 전략 문서" 한 장입니다. 훈련 2주의 모든 것이 이 문서를 위한 재료였습니다.

3-5. 훈련 진행 관리 — 계획표를 살아 있는 문서로

계획표는 벽에 붙이는 족자가 아니라 매일 갱신하는 문서입니다. 규칙은 단순합니다.

  • 매일 훈련 종료 시 완료 여부를 표시하고, 밀린 항목은 버퍼에서 가져와 재배정합니다.
  • 버퍼가 다 떨어지면 항목을 추가하지 말고 우선순위가 낮은 특훈을 삭감합니다 — 재현과 운영 준비는 끝까지 지킵니다.
  • 주 1회 15분 점검 회의에서 각자의 진도와 막힘을 공유합니다 — 막힌 재현은 담당을 합류시킵니다.

계획이 어긋나는 것은 실패가 아니라 정보입니다. 어긋난 만큼 계획표를 다시 계산하는 습관이, 본선 당일의 재판단 능력이 됩니다.


4. 미션과 연습문제

미션 — 2주 훈련 계획 수립과 재현 착수

  1. 본선 형식 조사 메모(3-1)를 실제 공지와 후기로 채웁니다 — 형식·시간·환경·채점·특이사항의 다섯 칸.
  2. Step 324의 못 푼 문제 전체를 팀원에게 분배하고 재현 규칙(2-2)으로 재현합니다. 문제당 재현 기록(3-2 양식)을 남깁니다.
  3. step325_training_plan.pyTASKS를 우리 팀 항목으로 교체해 계획표를 생성하고, 버퍼가 15% 이상인지 확인합니다 — 부족하면 항목을 조정합니다.
  4. 본선이 A&D 형식이라면 추가 훈련 세 가지(2-3)를 TASKS에 넣고 계획표를 재생성합니다.
  5. 운영 계획 회의를 열어 본선 당일 전략 문서 초안을 완성합니다.

연습문제

문제 1. "풀이 이해 ≠ 풀이 능력"의 차이를, Write-up을 읽을 때와 대회에서 문제를 만날 때의 인지 조건 차이로 설명해 보세요.

문제 2. 본선이 공격-방어 형식일 때 제퍼디 훈련만으로 부족한 이유를, "점수가 만들어지는 방식"의 차이로 설명해 보세요.

문제 3. 3-3 실측 계획표에서 특훈(힙 포너블)이 재현보다 뒤에, 그리고 연속해서 배치된 이유 두 가지를 설명해 보세요.

문제 4. "직전 2주에 새 기술 금지" 원칙이 위반됐을 때 본선에서 일어나는 구체적 사고 시나리오를 하나 상상해 서술해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

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

  1. 조사의 구체성: 형식 조사 메모 다섯 칸이 실제 문서(공지·후기)를 근거로 채워졌는가 — "아마 제퍼디일 것"은 조사가 아닙니다.
  2. 재현의 완결성: 모든 미해결 문제에 재현 기록이 있고, 각 기록에 환경 구성·막힘 재현·일반화 커밋의 세 단계가 있는가.
  3. 계획의 정합성: 계획표의 버퍼가 15% 이상이고, 직전 2일에 새 훈련이 배정되지 않았는가 — 스크립트의 규칙 확인 출력이 "OK"인가.
  4. 형식의 반영: 조사된 형식의 특성(인터넷 제한, A&D, 발표 등)이 계획 항목으로 변환됐는가.
  5. 문서의 연결: 훈련 계획과 특훈 결과가 "본선 당일 전략 문서" 초안에 반영됐는가.

연습문제 해답

문제 1 해답. Write-up을 읽을 때 우리는 결과(정답 기법)를 알고 과정을 거슬러 따라갑니다. 모든 분기점에서 "어느 길이 맞는지"를 이미 알고 있으므로, 가설을 세우고 검증하고 폐기하는 과정이 생략됩니다. 대회에서는 그 과정이 전부입니다 — 어느 지점에서 무엇을 의심하고, 어떤 실험으로 확인하고, 언제 가설을 버릴지. 이 의사결정 근육은 결과 없이 부딪히는 상황에서만 단련됩니다. 재현 훈련은 Write-up이 있어도 손이 전 과정을 수행하게 함으로써, "읽은 지식"을 "할 수 있는 기술"로 변환하는 장치입니다.

문제 2 해답. 제퍼디의 점수는 "난이도 높은 문제를 단 한 번 푸는 것"에서 나오므로 깊이와 집중이 자산입니다. 반면 A&D의 점수는 세 갈래에서 지속적으로 새어 나옵니다 — 내 서비스가 살아 있는 시간(방어 점수), 내가 뚫은 상대 팀 수(공격 점수), 서비스 정상 동작 체크(SLA). 한 번의 깊은 성공이 아니라 반복되는 속도의 합산이 총점입니다. 따라서 패치 속도, 익스플로잇의 자동화·반복 실행, 침해 탐지 체계라는 세 가지 "운영 근육"이 필요하고, 이는 제퍼디 훈련에서는 길러지지 않습니다.

문제 3 해답. 첫째, 재현의 중요도(5)가 특훈(4~3)보다 높기 때문입니다 — 예선 미해결 문제는 출제자가 본선 수준으로 설계한 실제 표본이고, 특훈 유형은 그 재현 과정에서 확정됩니다. 재현이 먼저여야 특훈의 대상이 정확해집니다. 둘째, 특훈은 기술의 손근육을 만드는 훈련이라 분산되면 효과가 반감합니다 — 같은 근육을 연속된 날에 반복해야 대회일에 그 근육이 남아 있습니다. 기억의 간격 효과와 반대로, 기능 습득 직전의 분산은 맥락 전환 비용만 키웁니다.

문제 4 해답. 시나리오 예시: 본선 일주일 전에 "커널 익스플로잇"을 새로 배우기 시작한 팀원이 있다고 합시다. 본선에서 커널 문제가 열렸을 때, 그는 반쯤 배운 지식으로 착수합니다 — 완전히 모르면 교대 규칙이 작동했을 것인데, "조금 아는" 상태는 착수를 정당화합니다. 3시간 뒤 그 문제는 미해결이고, 그 3시간 동안 그가 풀 수 있었던 중간 문제 하나는 다른 담당의 손이 모자라 식어 있습니다. 새 기술의 대가는 그 시간뿐 아니라 기회비용의 이중 손실로 청구됩니다. 이것이 직전 2주 원칙이 욕심의 문제가 아니라 총점 관리의 문제인 이유입니다.

완료 기준 체크리스트

  • [ ] 본선 형식(형식·시간·환경·채점·특이사항)을 조사해 메모했다
  • [ ] 예선 미해결 문제를 전원 재현하고 문제당 재현 기록을 남겼다
  • [ ] 각 재현에서 유형을 일반화해 라이브러리·치트시트에 커밋했다
  • [ ] 2주 훈련 계획표를 생성하고 버퍼 15% 이상을 확인했다
  • [ ] (A&D 형식이라면) 패치 속도·자동화·모니터링 훈련을 계획에 포함했다
  • [ ] 직전 2일에 새 훈련이 없음을 스크립트 규칙 확인으로 검증했다
  • [ ] 본선 운영 계획 회의로 당일 전략 문서 초안을 완성했다

6. 흔한 실수와 해결

벽 1. 재현하려는데 예선 문제 서버가 닫혀 있어요

증상: 문제의 원격 서비스가 내려가 익스플로잇을 날려볼 곳이 없습니다.

원인: 대회 종료 후 서비스는 내려가는 것이 정상입니다 — Step 298의 벽 3과 같은 구조입니다.

해결: 세 갈래입니다. ① 문제 파일(바이너리·소스·도커 파일)이 공개됐다면 로컬에 환경을 재구성하세요 — 재구성 과정 자체가 훈련입니다. ② 재구성이 불가하면 같은 기법의 외부 플랫폼 문제로 유형 재현을 대신합니다. ③ 둘 다 안 되면 정적 분석이라도 끝까지 완주하세요. 단, 어느 갈래든 "내 손이 끝까지 간" 기록이 있어야 재현으로 인정합니다 — 읽기로 끝낸 것은 재현이 아닙니다.

벽 2. 계획표를 돌렸더니 필요 시간이 가용 시간을 넘어요

증상: 출력이 "여유: -8시간"처럼 음수로 나옵니다 (실측 — 항목을 과도하게 넣으면 발생).

원인: 2주에 하고 싶은 것이 너무 많습니다. 버퍼까지 포함해 물리적으로 불가능한 계획입니다.

해결: 삭감의 우선순위는 정해져 있습니다. ① 중요도 3 이하 특훈부터 줄입니다(10문제→6문제). ② 그래도 넘치면 중요도 4 특훈의 분량을 줄입니다. ③ 재현과 운영 준비(중요도 5)는 끝까지 지킵니다. 판단 기준은 "본선 당일의 총점에 직결되는가"입니다. 특훈은 가능성의 투자이지만, 재현과 운영은 확정된 점수의 회수 준비입니다.

벽 3. 재현이 계획보다 훨씬 오래 걸려요

증상: 16시간으로 잡은 재현이 24시간을 넘어갑니다.

원인: 예선 때 막힌 문제는 원래 어려운 문제입니다. 그리고 환경 재구성은 항상 예상을 초과합니다.

해결: 두 가지로 대응합니다. ① 재현의 범위를 조정합니다 — "끝까지 플래그"가 목표이지만, 정 안 되면 "핵심 기법 단계까지 손으로 실행"을 완료 기준으로 낮추고 나머지는 정적 분석으로 대체합니다. ② 버퍼를 소진하되, 버퍼가 다 떨어지면 재현 문제 수를 줄입니다 — 3문제 전부 70%보다 2문제 100%가 낫습니다. 재현의 가치는 깊이에 있지 넓이에 있지 않습니다.

벽 4. 팀원이 "이 기법 하나만 배우면"을 반복해요

증상: 조급함이 새 기술 욕심으로 나타납니다. 2-4의 원칙이 흔들립니다.

원인: 본선 직전의 불안은 정상입니다 — 불안이 "통제 가능한 행동"을 찾기 때문에 새 학습 욕구로 표출됩니다.

해결: 원칙을 논쟁으로 지키지 말고 계획표로 지키세요 — 그 기법의 학습 시간을 TASKS에 추가해 스크립트를 다시 돌려 보면, 버퍼가 음수로 가거나 다른 항목이 밀려나는 것이 숫자로 보입니다. "배우고 싶다"와 "계획에 들어간다"의 거리를 수치로 보여 주는 것이 설득입니다. 단, 예외 하나 — 조사 결과 본선에 그 분야 문제가 확정돼 있고 팀에 담당이 없다면, 그것은 새 기술 욕심이 아니라 공백 메우기입니다. 구분 기준은 "조사에 근거하는가"입니다.

벽 5. 오프라인 본선인데 "로컬 사본" 준비를 잊었어요

증상: 대회장에서 인터넷이 제한됐는데 치트시트와 라이브러리가 클라우드에만 있습니다.

원인: 온라인 예선 습관 그대로 준비한 것입니다 — 3-1의 "환경" 칸이 채워지지 않았을 때의 전형적 사고입니다.

해결: 3-4의 운영 회의 전에 "오프라인 패키지"를 만드세요 — 익스플로잇 라이브러리 전체, 치트시트·플레이북의 로컬 사본, 참고 문서(언어·라이브러리 오프라인 문서), 그리고 그 패키지의 압축본을 USB에. 만드는 것보다 중요한 것은 검증입니다 — 노트북의 네트워크를 끄고 "이 상태로 문제 하나를 풀 수 있는가"를 실제로 시험해 보세요. 패키지의 완성도는 파일 수가 아니라 이 시험으로 증명됩니다.


7. 정리

오늘의 개념

개념 한 줄 설명
본선 형식 3종 장시간 제퍼디 / 공격-방어 / 발표 포함 — 형식이 대비를 결정
재현 훈련 Write-up 옆에서 손으로 다시 풀기 — 이해를 능력으로 변환
재현 3규칙 환경 직접 구성 · 다음 한 단계만 참고 · 일반화 커밋
A&D 추가 훈련 패치 속도 · 익스플로잇 자동화 · 트래픽 모니터링
직전 2주 원칙 새 기술 금지, 아는 것의 확실화 — 욕심이 아니라 총점 관리
버퍼 가용 시간의 15~20%를 빈 칸으로 — 계획의 내구성 부품

오늘의 도구·명령어

도구·명령 하는 일
python step325_training_plan.py 훈련 항목의 중요도 정렬·일자 배정·버퍼 계산·직전 2일 규칙 검증
형식 조사 메모 형식·시간·환경·채점·특이사항의 다섯 칸
재현 기록 양식 환경 구성 → 막힘 재현 → 단계별 힌트 → 일반화 커밋
본선 당일 전략 문서 운영 계획 회의의 산출물 — 예선 문서의 본선판 개정
오프라인 패키지 라이브러리·문서 로컬 사본 + 네트워크 차단 상태 실제 검증

명령어보다 중요한 감각

2주 훈련의 성과는 지식의 양이 아니라 확실함의 깊이로 측정합니다. "본 적 있는 기법" 열 개보다 "졸고 있어도 손이 움직이는 기법" 세 개가 본선의 점수를 만듭니다. 재현은 그 깊이를 파는 삽이고, 계획표는 그 삽이 엉뚱한 곳을 파지 않게 하는 지도입니다.

그리고 이 2주의 마지막 이틀이 비어 있는 것을 두려워하지 마세요. 그 빈칸은 게으름이 아니라 설계입니다 — 컨디션이라는 가장 비싼 자원을 대회 당일에 배달하는 물류 시간이니까요.


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