Step 340. 대회 여정 전체 회고록 — 경험을 이야기로 만드는 자산화
Level 4 — 전문가 | 난이도 ★★★☆☆ | 예상 소요 시간 2일 (자료 수집 반나절 + 타임라인 반나절 + 집필 1일)
전제: Step 279~339의 대회 출전 기록 전체 — 각 대회의 로그, 복기표, 갭 분석, Write-up 링크, 팀 헌장의 버전들.
- 준비물: 지금까지의 대회 기록 전부(순위·득점·푼 문제·복기 문서), 파이썬 3, 블로그 계정. 여정 분석 스크립트는 여러분의 기록으로 직접 돌리는 실측 도구이고, 회고록 본문의 예시는 화면 예시입니다.
- 주의: 회고록에 팀원의 이름·기록을 실을 때는 본인 동의와 가공이 먼저입니다. 대회 운영진과의 비공개 약속(문제 상세 등)이 있다면 그 범위를 지킵니다.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.
CTF #1부터 지금까지의 여정을 펼쳐 보세요. 첫 대회에서 두 문제를 풀고 환호하던 팀이, 국내 본선과 국제 대회를 지나 여기까지 왔습니다. 이 기록은 그냥 두면 흩어진 파일 묶음이지만, 하나의 문서로 엮으면 세 가지가 됩니다 — 후배들의 길잡이, 포트폴리오의 가장 강력한 콘텐츠, 그리고 훗날의 내가 읽을 기록.
오늘 만드는 것은 대회 여정 회고록입니다. 순위의 나열이 아니라 "어떤 팀이 어떻게 성장했는가"의 이야기입니다. 첫 대회의 참담함, 전환점이 된 대회, 팀 운영의 진화, 각 대회에서 배운 것 — 이 재료들을 하나의 글로 완성합니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 흩어진 대회 기록을 "기록 없음" 규칙을 지키며 한곳에 수집한다
- 대회별 "순위 / 배운 것 / 팀의 변화" 타임라인을 만든다
- 분석 스크립트로 전환점 후보를 추출하고, 각각을 한 편의 이야기로 집필한다
- 총 출전 수·솔브 수·백분위 추이로 여정을 숫자로 요약한다
- 팀원 동의 절차를 거쳐 회고록을 블로그에 공개한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파이썬 3(타임라인 분석), 마크다운, 블로그 플랫폼 |
| 오늘의 명령 | python step340_journey.py — 여정 타임라인·통계·전환점 후보·목차 초안 |
| 필요한 개념 | 자산화, 타임라인, 전환점, "기록 없음" 규칙, 공개의 동의 절차 |
| 오늘의 산출물 | 대회 여정 회고록 1부(5장 구성) + 블로그 공개본 |
2-1. 자산화 — 경험은 문서가 될 때 자산이다
대회 스무 번의 경험은 그 자체로는 자산이 아닙니다 — 기억은 퇴색하고, 흩어진 로그는 검색되지 않습니다. 경험이 자산이 되는 지점은 문서로 전환되는 순간입니다.
자산화가 만드는 세 가지를 구분해 두세요. ① 후배의 길잡이 — "입문 팀이 가장 현실적으로 읽을 성장기"는 지금까지 여러분이 찾아 헤맨 바로 그 문서입니다. 여러분에게 없었던 것을 이제 여러분이 만듭니다. ② 포트폴리오 — 이력서의 "대회 다수 참가" 한 줄보다, 성장의 궤적과 그 분석이 담긴 회고록 한 편이 채용 담당자에게 훨씬 강합니다. ③ 미래의 나를 위한 기록 — 1년 뒤의 여러분은 오늘의 판단 근거를 잊습니다. 문서만이 그때의 여러분에게 말을 걸 수 있습니다.
2-2. 타임라인이 먼저다 — 표가 완성되면 글은 풀어 쓰는 것뿐
백지 앞의 조언은 정해져 있습니다 — 어디서부터 써야 할지 막막할 때는 타임라인부터 완성하세요. 표가 완성되면 글은 그 표를 풀어 쓰는 것에 불과합니다.
타임라인의 열은 세 개입니다 — 순위 / 배운 것 / 팀의 변화. 순위만 적으면 성적표가 되고, 배운 것만 적으면 일기가 됩니다. 세 열이 함께여야 "성장의 이야기"가 됩니다. 그리고 Step 297의 규칙이 여기도 적용됩니다 — 기억에 의존해 채우지 말고, 로그가 없는 회차는 "기록 없음"으로 명시합니다. 기록 없음 칸의 분포 자체가 팀의 기록 루틴이 무너졌던 시기를 보여 주는 데이터입니다.
2-3. 전환점 — 성장을 만든 결정적 순간을 고른다
회고록의 심장은 전환점 세 편입니다. 전부 다 쓰려 하지 말고, 성장을 만든 결정적 순간 세 개를 골라 각각 깊이 있게 씁니다.
전환점의 후보 유형은 네 가지입니다. ① 첫 유의미한 순위 — "우리도 되는구나"를 확인한 대회. ② 운영의 개혁 — 팀 규칙이 바뀌어 성적이 따라 바뀐 대회. ③ 충격 — 국제 대회의 0솔브 구간처럼 기준을 갱신한 대회. ④ 결실 — 오랜 훈련이 점수로 회수된 대회. 3-1의 스크립트는 백분위 도약이 큰 회차를 후보로 자동 표시해 줍니다 — 다만 숫자는 후보를 줄 뿐, 최종 선택은 여러분의 기억과 기록의 대조로 합니다.
2-4. 공개의 절차 — 동의와 가공
회고록은 블로그에 공개하는 것까지가 완료입니다. 다만 공개 전에 두 절차가 있습니다.
첫째, 팀원 동의입니다. 팀의 실패 장면과 내부 규칙은 팀 전원의 자산이므로, 실명·닉네임·내부 회화의 인용은 본인 확인을 거칩니다. 둘째, 가공입니다. 대회 플랫폼의 내부 정보, 제보한 취약점의 비공개 상세, 실제 인프라 정보는 뭉개거나 뺍니다. "성장의 구조는 구체적으로, 민감 정보는 추상적으로"가 공개본의 원칙입니다.
3. 따라 하기
3-1. 자료 수집과 여정 분석 스크립트
자료를 한 폴더에 모읍니다 — 대회 로그, 복기 문서, Write-up 링크, 팀 헌장 버전들. 그다음 step340_journey.py를 저장하고 RECORDS를 여러분의 실제 기록으로 교체합니다.
# step340_journey.py — 대회 여정 전체 회고록 생성기
# RECORDS를 여러분의 실제 기록으로 교체해서 사용
# (회차/대회명, 전체 팀 수, 우리 순위, 솔브 수, 비고)
RECORDS = [
("CTF #1 주말 대회", 380, 291, 2, "첫 대회 — 완주가 목표, 거의 못 풀었다"),
("CTF #5 정기 대회", 402, 165, 5, "Hard 첫 도전 — 분업의 힘을 처음 체감"),
("CTF #10 기념 대회", 428, 120, 8, "상위 30% 진입 — 힙 특훈 결실"),
("국내 대회 예선", 612, 45, 9, "본선 진출 — 팀 운영 개혁의 검증"),
("국내 대회 본선", 24, 7, 5, "오프라인 본선 — 상위권의 벽 체감"),
("국제 대회 출전", 1900, 640, 1, "세계의 천장 — 0솔브 구간 통과 훈련"),
("최고 수준 재도전", 150, 4, 6, "목표 대회 — 준비된 팀의 실행"),
]
print("=== 대회 여정 타임라인 ===n")
total_solves = 0
turning = []
for i, (name, total, rank, solves, note) in enumerate(RECORDS, 1):
pct = rank / total * 100
total_solves += solves
arrow = ""
if i > 1:
prev_pct = RECORDS[i-2][2] / RECORDS[i-2][1] * 100
if prev_pct - pct >= 10:
arrow = " <- 전환점 후보 (백분위 10%p 이상 도약)"
turning.append(name)
print(f"{i:>2}. {name:<14} {total:>5}팀 중 {rank:>4}위 (상위 {pct:4.1f}%) 솔브 {solves}{arrow}")
print(f" 배운 것: {note}")
print(f"n=== 숫자로 보는 여정 ===")
print(f"총 출전 {len(RECORDS)}회 / 총 솔브 {total_solves}문제")
first_pct = RECORDS[0][2] / RECORDS[0][1] * 100
last_pct = RECORDS[-1][2] / RECORDS[-1][1] * 100
print(f"백분위 변화: 상위 {first_pct:.1f}% -> 상위 {last_pct:.1f}%")
print(f"전환점 후보: {len(turning)}곳 ({', '.join(turning) if turning else '없음 — 수동 선정'})")
print("n=== 회고록 목차 초안 ===")
print("1. 숫자로 보는 여정 — 위 표와 백분위 추이 그래프")
print("2. 전환점 이야기 — 후보 대회 3개를 각 한 편의 이야기로")
print("3. 팀 운영의 진화 — 헌장 버전별 변화")
print("4. 후배에게 — 처음 시작하는 팀이 피할 수 있는 시행착오")
print("5. 다음 여정 — 새 성장 축으로의 이행 선언")
이 챕터의 예시 데이터를 넣고 실행한 실측 출력입니다:
=== 대회 여정 타임라인 ===
1. CTF #1 주말 대회 380팀 중 291위 (상위 76.6%) 솔브 2
배운 것: 첫 대회 — 완주가 목표, 거의 못 풀었다
2. CTF #5 정기 대회 402팀 중 165위 (상위 41.0%) 솔브 5 <- 전환점 후보 (백분위 10%p 이상 도약)
배운 것: Hard 첫 도전 — 분업의 힘을 처음 체감
3. CTF #10 기념 대회 428팀 중 120위 (상위 28.0%) 솔브 8 <- 전환점 후보 (백분위 10%p 이상 도약)
배운 것: 상위 30% 진입 — 힙 특훈 결실
4. 국내 대회 예선 612팀 중 45위 (상위 7.4%) 솔브 9 <- 전환점 후보 (백분위 10%p 이상 도약)
배운 것: 본선 진출 — 팀 운영 개혁의 검증
5. 국내 대회 본선 24팀 중 7위 (상위 29.2%) 솔브 5
배운 것: 오프라인 본선 — 상위권의 벽 체감
6. 국제 대회 출전 1900팀 중 640위 (상위 33.7%) 솔브 1
배운 것: 세계의 천장 — 0솔브 구간 통과 훈련
7. 최고 수준 재도전 150팀 중 4위 (상위 2.7%) 솔브 6 <- 전환점 후보 (백분위 10%p 이상 도약)
배운 것: 목표 대회 — 준비된 팀의 실행
=== 숫자로 보는 여정 ===
총 출전 7회 / 총 솔브 36문제
백분위 변화: 상위 76.6% -> 상위 2.7%
전환점 후보: 4곳 (CTF #5 정기 대회, CTF #10 기념 대회, 국내 대회 예선, 최고 수준 재도전)
=== 회고록 목차 초안 ===
1. 숫자로 보는 여정 — 위 표와 백분위 추이 그래프
2. 전환점 이야기 — 후보 대회 3개를 각 한 편의 이야기로
3. 팀 운영의 진화 — 헌장 버전별 변화
4. 후배에게 — 처음 시작하는 팀이 피할 수 있는 시행착오
5. 다음 여정 — 새 성장 축으로의 이행 선언
읽는 법: 세 가지를 봅니다. ① 전환점 후보 네 곳 — 모두 백분위가 직전 대회 대비 10%p 이상 도약한 회차입니다. 이 중 세 곳을 골라 이야기로 씁니다. ② 6번 행의 함의 — 국제 대회는 백분위가 33.7%로 나빠졌지만 이것은 퇴보가 아니라 풀이 다른 무대입니다(참가 풀이 세계 랭킹 팀 중심). 타임라인을 읽을 때 대회의 성격을 함께 적어 두는 이유입니다. ③ "기록 없음" 처리 — 실제 기록으로 교체할 때 로그가 없는 회차는 지우지 말고 비고에 "기록 없음"으로 남기세요.
3-2. 타임라인 표의 완성
스크립트 출력을 회고록의 1장 재료로 옮깁니다. 스크립트가 계산해 주는 것은 숫자뿐이고, "팀의 변화" 열은 여러분이 헌장 버전 이력에서 채웁니다.
타임라인 표의 예시 한 행 (화면 예시):
| 국내 대회 예선 | 612팀 중 45위 (상위 7.4%) | 솔브 9 |
| 배운 것: 압축 시간 운영의 위력 |
| 팀의 변화: 헌장 v3 — 정체 30분 스왑 규칙 도입된 첫 대회 |
"팀의 변화" 열을 채우는 방법 — 팀 헌장의 Git 이력을 펼쳐 각 규칙이 어느 대회 직후에 생겼는지 연결합니다. 규칙의 도입 대회와 성적 도약의 대회가 이어져 있으면, 그것이 그대로 전환점 이야기의 뼈대입니다.
3-3. 전환점 이야기 집필 — 세 편의 구조
후보 중 세 편을 골라 각각 한 편의 이야기로 씁니다. 한 편의 권장 구조는 다섯 문단입니다.
전환점 이야기의 문단 구조 (화면 예시):
1. 그때의 우리 — 대회 직전 팀의 상태와 불안
2. 결정 — 무엇을 바꾸기로 했는가 (규칙, 분업, 훈련)
3. 대회 — 바꾼 것이 시험받은 순간의 장면
4. 결과와 해석 — 숫자와, 숫자가 말하지 않는 것
5. 남은 것 — 이 대회가 팀에 영구히 남긴 규칙·습관
핵심은 3문단의 "장면"입니다. "스왑 규칙을 도입했다"는 정보이고, "06:30, 정체 30분 알림이 울리자 아무도 이의를 달지 않고 채널에 ‘[버리기]’가 뜬 순간"은 이야기입니다. 후배가 읽고 자기 팀에 적용하는 것은 정보가 아니라 장면입니다 — 장면을 복원하기 위해 대회 로그의 시각들을 인용하세요.
3-4. 숫자로 정리 — 수식어 없는 첫 장
회고록의 첫 장은 수식어 없이 숫자만 놓습니다 — Step 297에서 배운 장기 회고의 신뢰 원칙 그대로입니다.
숫자 요약 (화면 예시 — 3-1 실측 출력 기반):
- 총 출전: 7회 (주말 CTF 3회, 국내 예선·본선, 국제 대회, 재도전 대회)
- 총 솔브: 36문제
- 백분위 궤적: 상위 76.6% -> 상위 2.7%
- 분야 커버리지: 시작 시 web만 -> 현재 web/pwn/rev/crypto/forensics 전 분야
마지막 항목, 커버리지를 잊지 마세요 — Step 297의 결론 그대로, 순위의 성장보다 분야 커버리지의 성장이 체급 상승의 본체입니다. 백분위 그래프를 그리고 싶다면 Step 297의 season_review.py를 그대로 재사용하면 됩니다 — ROUNDS만 이 여정의 기록으로 교체하면 됩니다.
3-5. 블로그 공개 — 동의와 가공의 절차
초고가 완성되면 공개 절차를 밟습니다.
공개 체크리스트 (화면 예시):
[ ] 팀원 전원에게 초고 공유 — 인용된 발언·기록의 본인 확인 완료
[ ] 실명/닉네임 처리 방식 합의 (실명 / 이니셜 / 가명)
[ ] 대회 비공개 정보 검토 — 문제 상세, 운영진과의 약속 범위
[ ] 민감 정보 가공 — 인프라 정보, 제보 취약점 상세
[ ] 말미에 팀원 크레딧과 감사 표기
[ ] 공개 후 팀 채널에 링크 공유 — 다음 시즌의 첫 문서로
공개의 의미를 하나 더 짚으면 — 이 회고록은 "입문자가 읽을 가장 현실적인 성장기"가 됩니다. 천재의 우승기가 아니라, 첫 대회에서 두 문제를 풀던 팀이 규칙과 기록으로 여기까지 온 이야기이기 때문입니다. 그런 이야기가 인터넷에 하나 더 있는 것은 생태계 전체의 자산입니다.
4. 미션과 연습문제
미션 — 대회 여정 회고록의 완성과 공개
- 대회 기록 전부를 한 폴더에 모으고, 없는 회차를 "기록 없음"으로 명시한 목록을 만듭니다.
step340_journey.py의RECORDS를 실제 기록으로 교체해 실행하고, 타임라인 표를 완성합니다(순위/배운 것/팀의 변화 세 열).- 전환점 후보 중 세 편을 골라 3-3의 다섯 문단 구조로 집필합니다.
- 5장 구성(숫자 → 전환점 → 팀 운영의 진화 → 후배에게 → 다음 여정)으로 회고록을 완성합니다.
- 공개 체크리스트(3-5)를 통과한 뒤 블로그에 공개하고, 팀 채널에 공유합니다.
연습문제
문제 1. 경험이 "자산"이 되기 위한 조건을 문서화의 관점에서 설명하고, 회고록이 만드는 세 가지 자산(후배의 길잡이·포트폴리오·미래의 나의 기록)을 각각 설명해 보세요.
문제 2. 타임라인 작성에서 "기록 없음" 규칙(기억으로 채우지 않는다)이 필요한 두 가지 이유를 설명해 보세요.
문제 3. 3-1의 실측 출력에서 국제 대회(6번)의 백분위가 직전 대회보다 나쁜데도 전환점 후보로 표시되지 않은 이유를 스크립트의 판정 로직으로 설명하고, 이 회차의 백분위 하락을 회고록에서 어떻게 서술해야 하는지 설명해 보세요.
문제 4. 전환점 이야기에서 "정보"와 "장면"의 차이를 예시와 함께 설명하고, 왜 후배에게 전해지는 것은 장면인지 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
검증 기준으로 확인하세요.
- 수집의 완전성: 전 회차가 목록에 있고, 빠진 회차가 "기록 없음"으로 명시됐는가 — 목록에서 조용히 삭제된 회차가 없는가.
- 타임라인의 세 열: 순위·배운 것·팀의 변화가 모두 채워졌고, "팀의 변화"가 헌장 버전 이력과 연결됐는가.
- 전환점의 깊이: 세 편 모두 다섯 문단 구조를 따르고, 3문단에 대회 로그 인용이 있는가.
- 첫 장의 숫자: 회고록 첫 장에 수식어 없는 숫자 요약이 있는가.
- 공개의 절차: 팀원 동의와 가공 체크리스트의 통과 흔적이 있는가.
연습문제 해답
문제 1 해답. 경험은 기억에 남아 있는 동안은 퇴색하고, 흩어진 파일로는 검색되지 않으며, 타인에게 전달되지 않습니다. 문서로 전환되는 순간 세 가지가 가능해집니다 — 검색, 전달, 시간을 넘는 보존. 회고록이 만드는 세 자산은 이렇습니다. 후배의 길잡이: 입문 팀이 겪을 시행착오의 지도로서, 천재의 우승기가 줄 수 없는 "현실적인 경로"를 제공합니다. 포트폴리오: 이력서의 "대회 다수 참가"는 주장이지만, 성장 궤적과 그 분석이 담긴 회고록은 증거이며, 기록·분석·서술 능력 자체를 시연합니다. 미래의 나의 기록: 시간이 지나면 판단의 근거를 잊는데, 문서만이 그때의 나에게 말을 걸 수 있습니다 — 다음 도전의 출발선에서 이 문서가 기준점이 됩니다.
문제 2 해답. 첫째, 기억으로 채운 숫자는 분석을 오염시킵니다 — 기억은 성공 쪽으로 미화되기 쉬워서, 그 위에 그린 추세선은 실제 성장 곡선이 아니라 기억의 곡선이 됩니다. 둘째, "기록 없음" 칸의 분포 자체가 데이터입니다 — 기록이 비는 시기는 팀의 기록 루틴이 무너진 시기이고, 그 시기와 성적 정체가 겹치는지를 보는 것이 회고의 통찰 중 하나입니다. 빈칸을 미워하지 말고 명시하세요 — 회고에서 빈칸도 정보입니다.
문제 3 해답. 스크립트의 전환점 판정은 "직전 회차 대비 백분위가 10%p 이상 좋아졌는가"(낮아졌는가)입니다 — prev_pct - pct >= 10. 국제 대회는 29.2% → 33.7%로 백분위가 나빠졌으므로 prev_pct - pct가 음수라 후보가 되지 않습니다. 그러나 이 하락은 실력 퇴보가 아니라 무대의 교체입니다 — 참가 풀이 세계 랭킹 팀 중심으로 바뀌었으므로 백분위의 분모 자체가 다른 분포입니다. 회고록에서는 이 회차를 순위의 후퇴가 아니라 "기준의 갱신"으로 서술해야 합니다 — 세계 최고의 천장을 체감하고 0솔브 구간을 통과한 것이 이 대회의 수확이며, 오히려 내용상으로는 가장 큰 전환점(충격 유형)에 해당합니다. 숫자의 판정과 이야기의 판정이 다른 대표 사례이므로, 스크립트는 후보를 줄 뿐 최종 선택은 맥락으로 한다는 원칙의 예시로 쓰면 좋습니다.
문제 4 해답. 정보는 "스왑 규칙을 도입했다"이고, 장면은 "06:30, 정체 30분 알림이 울리자 채널에 아무 이의 없이 ‘[버리기]’가 뜬 순간"입니다. 정보는 무엇을 했는지를 말하고, 장면은 그것이 어떻게 실제로 작동했는지를 보여 줍니다. 후배에게 전해지는 것이 장면인 이유 — 독자는 정보를 읽고도 "우리 팀에서는 안 될 것"이라고 느끼지만, 장면을 읽으면 자기 팀의 회의 장면에 그것을 겹쳐 볼 수 있습니다. 적용의 단계로 넘어가게 하는 것은 정확성이 아니라 상상 가능성이고, 장면은 대회 로그의 시각·메시지 원문 인용으로만 복원됩니다. 그래서 전환점 집필의 첫 작업은 글쓰기가 아니라 로그 열람입니다.
완료 기준 체크리스트
- [ ] 전 회차의 기록을 수집하고 "기록 없음" 회차를 명시했다
- [ ]
step340_journey.py를 실제 기록으로 실행해 타임라인을 뽑았다 - [ ] 순위/배운 것/팀의 변화 세 열의 타임라인 표를 완성했다
- [ ] 전환점 세 편을 다섯 문단 구조로 집필했다
- [ ] 첫 장에 수식어 없는 숫자 요약(출전·솔브·백분위·커버리지)을 놓았다
- [ ] 팀원 동의와 가공 체크리스트를 통과했다
- [ ] 블로그에 공개하고 팀 채널에 공유했다
6. 흔한 실수와 해결
벽 1. 어디서부터 써야 할지 모르겠어요 — 백지 앞에서 한 시간째입니다
증상: 회고록 제목 아래 커서만 깜빡입니다.
원인: 글쓰기부터 시작한 것입니다 — 회고록의 첫 작업은 글이 아니라 표입니다.
해결: 타임라인부터 먼저 완성하세요. step340_journey.py의 RECORDS를 채우는 것부터 시작하면 됩니다 — 표가 완성되면 글은 그 표를 풀어 쓰는 것에 불과합니다. 그래도 막히면 문단 단위로 쪼개세요 — "전환점 한 편의 3문단(장면) 하나"부터. 백지의 적은 규모이지 글쓰기가 아닙니다.
벽 2. 전환점 후보가 하나도 안 떠요
증상: 스크립트를 돌렸는데 "전환점 후보: 0곳"이 나옵니다.
원인(자주 있는 실수): 직전 회차와 비교해야 할 인덱스를 잘못 잡는 것입니다. 이 챕터의 스크립트도 첫 작성 때 그랬습니다 — enumerate(RECORDS, 1)에서 RECORDS[i-1]은 자기 자신입니다(실측 — 수정 전 실행에서는 도약이 네 곳인데 후보 0곳으로 나왔습니다).
해결: 직전 회차는 RECORDS[i-2]입니다. 이 챕터에 실린 스크립트는 수정본입니다. 일반화하면 — "시작을 1로 센 enumerate 안에서 리스트를 인덱싱할 때는 오프셋을 다시 확인"하세요. 그리고 후보가 정말 없는 경우(모든 대회가 완만한 팀)도 있습니다 — 그때는 백분위가 아니라 "팀의 변화" 열에서 전환점을 고르면 됩니다. 숫자는 후보 선정의 도구일 뿐, 전환점의 정의가 아닙니다.
벽 3. 옛날 대회의 로그가 안 보여요 — 기억으로 채우면 안 되나요?
증상: 초반 대회의 로그가 날아갔고, 대략의 순위는 기억납니다.
원인: 기록 루틴이 정착되기 전 시기입니다 — 그리고 그것 자체가 회고의 재료입니다.
해결: 기억으로 채우지 말고 "기록 없음"으로 남기세요 (2-2, 문제 2). 대신 공인 기록이 있는지 찾아보세요 — CTFtime의 팀 히스토리, 대회 플랫폼의 아카이브, 팀 채널의 당일 메시지. 메신저 검색이 의외로 강력합니다 — 종료 직후의 "우리 몇 위야?" 메시지가 로그를 대신합니다. 그래도 없으면 "기록 없음"이 정답입니다. 회고록에 그 사실을 솔직하게 적으면, 그 문장이 후배에게 "기록을 처음부터 남겨라"는 교훈으로 작동합니다.
벽 4. 팀원 한 명이 회고록 공개에 난색을 표해요
증상: "내 실수 장면이 실렸다"며 공개를 꺼립니다.
원인: 동의 절차 없이 초고를 먼저 쓴 경우가 많습니다 — 그리고 그 난색은 정당합니다.
해결: 두 가지를 제안하세요. ① 해당 장면의 가명 처리 또는 재서술 — 누가 했는지가 아니라 무엇을 배웠는지가 회고록의 본체이므로, 인물을 지워도 이야기는 살아납니다. ② 실패 장면의 주인공에게 그 문단의 최종 검토권 부여 — 자기 실패의 서술권을 가진 사람은 대개 가장 정확하게 씁니다. 합의가 안 되는 장면은 빼세요 — 회고록 한 편보다 팀이 남습니다.
벽 5. 회고록을 쓰다 보니 자기 자랑처럼 느껴져서 공개가 망설여져요
증상: "우리가 이렇게 성장했다"는 문장을 지우고 고치기를 반복합니다.
원인: 회고록의 톤 문제입니다 — 성공기로 쓰면 자랑이 되고, 성장기로 쓰면 길잡이가 됩니다.
해결: 두 가지 규칙을 적용하세요. ① 첫 장은 수식어 없는 숫자만 (3-4) — 숫자는 자랑의 문법이 아닙니다. ② 실패의 비중을 의도적으로 유지 — 첫 대회의 참담함, 무너진 규칙, 국제 대회의 0솔브 구간. 독자는 성공담이 아니라 "나도 저기서 시작할 수 있겠다"는 지점에서 공감합니다. 마지막으로, 회고록의 마지막 문단을 "다음에 이 길을 걷는 사람에게"로 끝내세요 — 시선이 독자에게 향한 글은 자랑이 될 수 없습니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 자산화 | 경험은 문서로 전환될 때 검색·전달·보존이 가능한 자산이 된다 |
| 타임라인 우선 | 표가 완성되면 글은 풀어 쓰는 것뿐 — 순위/배운 것/팀의 변화 |
| "기록 없음" 규칙 | 기억으로 채우지 않는다 — 빈칸의 분포도 데이터 |
| 전환점 | 성장을 만든 결정적 순간 3개 — 숫자는 후보, 선택은 맥락 |
| 정보와 장면 | 전해지는 것은 장면 — 로그 인용으로 복원한다 |
| 공개의 절차 | 팀원 동의 → 가공 → 크레딧 — 팀이 회고록보다 먼저 |
오늘의 도구·명령어
| 도구·명령 | 하는 일 |
|---|---|
python step340_journey.py |
타임라인·통계·전환점 후보·회고록 목차 초안 생성 |
| 타임라인 표 | 순위 / 배운 것 / 팀의 변화 — 회고록의 뼈대 |
| 전환점 다섯 문단 | 그때의 우리 → 결정 → 대회 장면 → 결과와 해석 → 남은 것 |
| 공개 체크리스트 | 동의·가명·비공개 정보·가공·크레딧·공유 |
season_review.py 재사용 |
백분위 추이 그래프 (Step 297 도구, ROUNDS만 교체) |
명령어보다 중요한 감각
회고록을 쓰다 보면 이상한 일이 벌어집니다 — 쓰기 전에는 "우리가 그동안 뭘 했지?"라고 생각했는데, 표를 채우고 장면을 복원하는 과정에서 성장이 숫자와 문장으로 눈앞에 쌓입니다. 회고의 첫 수혜자는 독자가 아니라 쓰는 사람입니다.
그리고 이 문서는 마침표가 아니라 이정표입니다. 5장의 "다음 여정"이 다음 챕터들 — 새 성장 축의 탐색과 착수 — 으로 이어집니다. 대회라는 무대에서 배운 것(기록, 복기, 규칙, 결단)은 어떤 새 분야에서도 그대로 작동하는 범용 엔진입니다. 그 엔진의 설계도가 바로 오늘 완성한 회고록입니다.
전부 체크되면 Step 340 완료입니다.