Step 190. 팀 찾기/결성 + CTFtime 캘린더 — 혼자 하는 게임을 팀 스포츠로
Level 3 — CTF 실전과 공격 스킬 심화 | 난이도 ★★☆☆☆ | 예상 소요 시간 2시간
전제: Step 176~180의 CTF 맛보기(5개 분야)를 경험했고, Step 181에서 주력 분야를 정했다.
- 준비물: 웹 브라우저, 메모 앱 또는 스프레드시트, (선택) CTFtime 계정과 디스코드 계정.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. CTFtime과 각종 CTF 대회는 참가하라고 열린 합법 플랫폼입니다.
- 주의: 이 챕터는 새로운 공격 기법이 아니라 환경 설계 챕터라서 로컬 실측이 없습니다. CTFtime 화면과 대회 목록은 "화면 예시"로 표기하며, 실제 일정과 규칙은 반드시 여러분이 직접 확인하세요.
여기까지 오는 동안 여러분은 혼자 풀었습니다. 그런데 CTF의 본무대 — 주말마다 열리는 국제 대회 — 는 팀 경기입니다. 한 사람이 Web, Pwn, Reversing, Crypto, Forensics를 전부 잘할 수는 없습니다. 분야별 전문가가 모여야 상위권이 보이고, 무엇보다 같이 배우는 속도가 다릅니다. 오늘은 세 가지를 끝냅니다: 전 세계 대회 일정의 허브 CTFtime 읽는 법, 나와 맞는 팀을 찾거나 만드는 법, 첫 대회를 위한 준비 체크리스트.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- CTFtime의 대회 캘린더·팀 페이지·랭킹 구조를 읽는다
- 대회 페이지에서 난이도·형식(Jeopardy 등)·시간을 해석해 첫 대회를 고른다
- 내 주력 분야와 겹치지 않는 팀원 조합의 원칙을 설명한다
- 팀 규칙 초안(소통, 풀이 공유, Write-up 분담)을 작성한다
- 팀이 없어도 혼자 대회에 참가해 네트워킹하는 경로를 설명한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 웹 브라우저 (CTFtime.org), 스프레드시트(대회 일정표), 디스코드/커뮤니티(팀원 찾기) |
| 오늘의 화면·문서 | CTFtime 캘린더·대회 페이지·팀 페이지, 팀 규칙 초안, 첫 대회 준비 체크리스트 |
| 필요한 개념 | Jeopardy vs Attack-Defense, 대회 가중치(weight)와 랭킹 포인트, 분야 분담 |
| 오늘의 산출물 | 향후 3개월 대회 일정표 + 팀 확정(또는 참가 계획) 문서 |
2-1. CTF는 왜 팀 스포츠인가
CTF 대회 한 번에 문제가 수십 개 나옵니다. 48시간 동안 5개 분야를 혼자 다 보는 것은 물리적으로 불가능에 가깝습니다. 그래서 팀은 분야별 커버리지로 설계됩니다 — "Web 1명, Pwn 1명, Crypto 1명, 올라운더 1명" 같은 식입니다.
팀의 이득은 점수만이 아닙니다. 대회가 끝난 뒤 서로의 풀이를 설명하는 시간 — Write-up 리뷰 — 이 팀 학습의 핵심입니다. 혼자 풀면 모르는 문제는 영원히 모르는 채로 끝나지만, 팀이면 남의 풀이가 내 실력이 됩니다.
팀의 적정 규모는 얼마일까요? 입문 팀은 3~5명이 실전형입니다. 2명은 분야 공백이 크고, 6명을 넘기면 대회 중 소통 비용이 급증해 진행판 없이는 굴러가지 않습니다. 처음에는 소수 정예로 시작해, 대회를 두세 번 같이 뛰며 호흡을 확인한 뒤 늘리는 것이 정석입니다.
2-1a. "실력이 부족한데 팀에 껴도 될까" — 가장 흔한 주저
이 지점에서 많은 입문자가 멈칫합니다. 답은 정해져 있습니다: 됩니다. CTF 커뮤니티는 신입의 질문에 관대한 편이고, 팀 입장에서도 "풀 문제를 정확히 고르는 신입"은 자산이기 때문입니다. 여러분이 이 책을 여기까지 따라오며 쌓은 것 — 5개 분야 맛보기와 주력 분야 — 는 이미 지원 자격 그 이상입니다. 주저할 근거가 아니라 지원할 근거입니다.
2-2. CTFtime — 대회 일정과 랭킹의 허브
CTFtime(ctftime.org)은 전 세계 CTF 대회의 캘린더, 팀 등록, 결과와 랭킹을 모아 둔 허브 사이트입니다. 하는 일은 세 가지입니다.
- 캘린더: 향후 대회 목록. 대부분 주말(금~일, UTC 기준) 에 열립니다. 시차 계산은 필수 — UTC 금요일 저녁 시작은 한국 시간 토요일 새벽인 경우가 흔합니다.
- 대회 페이지: 형식, 제한(학생부 여부), 가중치, 과거 문제와 Write-up 링크. 첫 대회를 고를 때 여기를 봅니다.
- 팀 페이지와 랭킹: 팀을 만들면 대회 결과가 누적되고 세계/국가 랭킹이 매겨집니다. 대회마다 가중치(weight) 가 달라서, 큰 대회(DEF CON 예선 등)일수록 랭킹 포인트가 큽니다.
2-3. 대회 형식 두 가지
- Jeopardy: 지금까지 여러분이 해 온 형식입니다. 분야별 문제가 점수와 함께 나열되고, 풀면 점수를 얻습니다. 입문자의 대회는 전부 이 형식이라고 보면 됩니다.
- Attack-Defense: 각 팀이 같은 취약 서버를 하나씩 받아, 남의 서버를 공격하면서 내 서버를 방어합니다. 고급 대회의 형식으로, 지금은 "이런 게 있다" 정도만 알아 두세요.
대회 페이지에 "Quals(예선)"가 붙어 있으면 본선이 따로 있는 큰 대회의 관문입니다. 예선은 대부분 온라인·Jeopardy라 입문자도 참가할 수 있지만, 문제 수준은 이름값을 합니다. 첫 대회로는 무겁고, 두세 번째 대회의 도전 목표로 적합합니다.
2-4. 팀원 찾기의 원칙 — 겹치지 않는 사람
팀원을 고를 때의 첫 원칙: 내 주력 분야와 겹치지 않는 사람을 찾습니다. Web 특화 둘이 모이면 Web 문제는 빨라도 Pwn 문제가 열리지 않습니다. Step 181에서 정한 여러분의 주력 분야가 여기서 팀 설계의 기준이 됩니다.
찾는 곳: 학교 보안 동아리, 드림핵 등 국내 보안 커뮤니티의 팀원 모집 글, 디스코드 보안 서버, 그리고 — 가장 성공률이 높은 곳 — 대회 채팅방 그 자체입니다. 혼자 참가한 사람들끼리 다음 대회를 같이 하자며 팀이 되는 경우이 아주 많습니다.
2-5. 팀 안의 역할 — 분야와는 다른 축
분야 분배와 별개로, 팀에는 역할의 축도 있습니다. 대회가 커질수록 이 역할들이 점수를 가릅니다.
- 캡틴: 문제 배분을 조정하고, "이 문제는 여기까지"라는 손절 판단을 내립니다. 48시간짜리 대회에서 가장 귀한 자원은 문제가 아니라 팀원의 시간입니다.
- 인프라 담당: 대회 전에 디스코드 서버, 공유 폴더, 진행판, 공통 도구 환경을 준비합니다.
- 기록 담당(겸업 가능): 풀이 과정을 그때그때 메모합니다. 대회가 끝나면 기억은 급속히 사라지고, 메모만이 Write-up이 됩니다.
입문 팀이라면 완벽한 역할 분담보다 "기록은 누가 할 것인가" 하나만 정해도 큰 차이가 납니다.
3. 따라 하기
3-1. CTFtime 둘러보기 (화면 예시)
브라우저에서 ctftime.org에 접속해 가입합니다. 상단 메뉴의 구조는 대략 이렇습니다 (화면 예시 — 실제 레이아웃은 바뀔 수 있습니다):
[CTFtime 로고] Calendar | Events | Teams | Rankings | Write-ups
Calendar에 들어가면 향후 대회가 시간순으로 나옵니다. 각 항목은 대략 이런 모양입니다 (화면 예시):
Example CTF 2026
Fri, 10 Apr. 2026, 12:00 UTC — Sun, 12 Apr. 2026, 12:00 UTC
Format: Jeopardy Weight: 24.70 Official URL: ...
읽는 법: ① 시작·종료가 UTC — 한국 시간(+9)으로 환산하세요. 위 예시는 토요일 밤 9시 시작입니다. ② Format: Jeopardy인지 확인. ③ Weight가 높을수록 강팀이 몰리는 큰 대회 — 첫 대회는 가중치가 낮은 신생·주니어 대회가 좋습니다.
3-2. 향후 3개월 대회 일정표 만들기
스프레드시트에 표를 만듭니다. 열은 이렇게 잡으세요.
| 대회명 | 시작(한국 시간) | 종료 | 형식 | 가중치 | 참가 여부 |
|---|---|---|---|---|---|
| (예시) Example CTF | 4/10(금) 21:00 | 4/12(일) 21:00 | Jeopardy | 24.70 | 검토 중 |
3개월 치를 채운 뒤, 그중 하나를 "첫 대회"로 확정합니다. 기준: ① 주말에 온전히 시간을 낼 수 있는가, ② Jeopardy인가, ③ "Beginner", "Junior", "Quals(예선)" 중 입문용 표기가 있는가.
대회가 주말마다 열리는 것은 우연이 아닙니다 — 전 세계의 직장인·학생이 동시에 달릴 수 있는 유일한 시간대이기 때문입니다. 여러분의 일정표도 같은 제약 위에 있습니다. "언제 열리는가"보다 "내가 그 주말을 비울 수 있는가"가 선정의 실질 기준입니다.
3-3. 팀 찾기 또는 결성
두 갈래 길입니다.
길 A — 기존 팀에 합류: 커뮤니티의 모집 글에 지원합니다. 지원 메시지에는 ① 주력 분야(Step 181), ② 지금까지 푼 문제 수나 플랫폼, ③ 대회에 쓸 수 있는 시간을 적습니다. "신입이지만 Web 30문제 풀었고 주말 20시간 가능합니다"처럼 구체적인 한 줄이 열정의 열 줄을 이깁니다.
길 B — 직접 결성: 뜻이 맞는 사람 2~4명을 모읍니다. 정할 것은 네 가지입니다.
- 팀 이름 — CTFtime에 등록할 이름. 바꾸기 어려우니 신중하게.
- 분야 분배 — 팀원들의 주력 분야를 나열해 최소 3개 분야가 커버되는지 확인합니다.
- 연락 채널 — 디스코드 서버 생성이 표준입니다. 음성 채널은 대회 중 실시간 협업에 필수입니다.
- CTFtime 팀 등록 — 팀 페이지를 만들고 팀원을 초대합니다.
3-4. 팀 규칙 초안 작성
대회 전에 미리 정해 두면 싸우지 않습니다. 최소 네 항목입니다.
[우리 팀 규칙 초안]
1. 소통: 대회 중 디스코드 상주. 문제 착수/포기는 채널에 즉시 공유.
2. 풀이 공유: 잡은 문제와 진행 상황을 30분마다 짧게 공유.
(같은 문제를 두 명이 모르게 붙잡는 낭비 방지)
3. 진행판: 문제별 담당/진행/해결 상태를 공유 스프레드시트로 관리.
4. Write-up: 대회 종료 후 1주일 안에, 푼 사람이 쓰고 못 푼 사람이 리뷰.
3-5. 혼자라면 — 그것도 정상입니다
팀이 당장 안 구해져도 괜찮습니다. 혼자 참가 → 대회 채팅방에서 같은 처지의 사람과 대화 → 다음 대회 동행이 흔한 경로입니다. 혼자 나갈 때의 요령: ① 풀 수 있는 쉬운 문제부터 점수를 내고, ② 대회 디스코드에서 풀이 논의에 참여하고, ③ 끝나면 내 Write-up을 공유합니다. Write-up 한 편이 "함께하자"는 제안을 불러오는 명함입니다.
3-6. 첫 대회 당일 체크리스트
확정한 첫 대회의 당일, 시작 전에 이 목록을 돌립니다.
[대회 시작 1시간 전]
- [ ] 시작/종료 시간을 한국 시간으로 다시 확인했다
- [ ] 대회 플랫폼 계정 로그인과 팀 등록이 돼 있다
- [ ] 디스코드 음성/문자 채널이 열려 있다
- [ ] 진행판 스프레드시트에 문제 목록을 옮길 준비가 됐다
- [ ] 식사·수면 계획을 정했다 (48시간 대회에서 전략적 취침은 실력이다)
[대회 시작 직후]
- [ ] 전체 문제 목록을 훑고 분야별로 담당을 배정했다
- [ ] 쉬운 문제(참가자 다수가 푼 문제)부터 착수해 점수판을 열었다
마지막 항목이 중요합니다. 대회 시작 직후의 "쉬운 문제 먼저"는 자존심이 아니라 전략입니다 — 초반 점수가 팀의 사기를 만들고, 사기가 후반의 어려운 문제를 뚫는 체력이 됩니다.
4. 미션과 연습문제
미션 — 팀과 캘린더 확정
- CTFtime에 가입하고, 향후 3개월 대회 5개 이상을 3-2의 표로 정리합니다.
- 그중 하나를 첫 대회로 확정하고, 고른 이유를 세 줄로 적습니다 (형식·난이도·시간 근거).
- 길 A(합류 지원) 또는 길 B(결성) 중 하나를 실행합니다. 둘 다 여의치 않으면 "혼자 참가 + 채팅방 네트워킹" 계획서를 작성합니다.
- 팀이 있다면(또는 만들 예정이라면) 3-4의 규칙 초안을 우리 팀 버전으로 고쳐 저장합니다.
- 3-6의 당일 체크리스트를 확정한 첫 대회의 날짜에 맞춰 캘린더 앱에 등록하고, 시작 1시간 전 알림을 겁니다.
연습문제
문제 1. CTFtime 대회 페이지에서 첫 대회 선정에 봐야 할 정보 네 가지를 말해 보세요.
문제 2. "내 주력 분야와 겹치지 않는 사람을 뽑아라"는 원칙의 이유를 분야 커버리지 관점에서 설명해 보세요.
문제 3. Jeopardy와 Attack-Defense의 차이를 "무엇을 하느냐"의 관점에서 비교해 보세요.
문제 4. 대회 중 "같은 문제를 두 명이 모르게 붙잡는" 낭비를 막는 장치 두 가지를 3-4의 규칙에서 찾아 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
검증하는 법: ① 일정표에 최소 5개 대회가 있고 시작 시간이 한국 시간으로 환산돼 있는가 (UTC 그대로 적으면 감점 — 새벽 대회를 낮으로 착각하는 사고가 실제로 납니다). ② 첫 대회 선정 이유에 "Jeopardy", "입문용/낮은 가중치", "시간 확보"의 근거가 있는가. ③ 팀 확정 문서 또는 혼자 참가 계획서가 존재하는가. ④ 규칙 초안에 소통·공유·진행판·Write-up 네 항목이 모두 있는가. ⑤ 당일 체크리스트가 실제 캘린더에 알림과 함께 등록돼 있는가.
연습문제 해답
문제 1 해답. ① 형식(Jeopardy인가), ② 시작·종료 시간(UTC — 한국 시간 환산 필요), ③ 가중치(낮을수록 입문자에게 적합), ④ 참가 제한(학생부·지역 제한 여부). 여기에 과거 Write-up의 존재 여부까지 보면 난이도 감을 잡는 데 더 좋습니다.
문제 2 해답. 대회 점수는 분야별 문제를 얼마나 넓게 커버하느냐에서 나옵니다. 같은 분야 특화자가 둘이면 그 분야의 처리 속도는 올라가도, 나머지 분야의 문제는 아무도 못 여는 상태가 됩니다. 분야가 겹치지 않아야 팀 전체의 커버리지가 넓어집니다.
문제 3 해답. Jeopardy는 주최 측이 준비한 문제를 풀어 점수를 얻는 방식 — 공격 대상은 문제 서버뿐입니다. Attack-Defense는 각 팀이 자기 서버를 운영하며, 다른 팀의 서버를 공격하고 내 서버의 취약점을 패치해 방어하는 방식입니다. 전자가 문제 풀이라면 후자는 운영을 동반한 실전 게임입니다.
문제 4 해답. ① "착수/포기를 채널에 즉시 공유" — 누가 무엇을 잡았는지 실시간으로 보입니다. ② "공유 스프레드시트 진행판" — 문제별 담당 열을 보면 중복 착수가 원천 차단됩니다.
완료 기준 체크리스트
- [ ] CTFtime의 캘린더·대회 페이지·팀 페이지가 각각 무엇을 보여 주는지 말할 수 있다
- [ ] UTC 표기를 한국 시간으로 환산해 일정표를 만들었다
- [ ] 첫 대회 선정 기준(형식·난이도·시간)을 설명할 수 있다
- [ ] 팀원을 고를 때 "겹치지 않는 분야" 원칙을 설명할 수 있다
- [ ] 팀 규칙 네 항목(소통·공유·진행판·Write-up)을 말할 수 있다
- [ ] 팀 확정, 또는 혼자 참가 + 네트워킹 계획이 문서로 있다
- [ ] 첫 대회의 당일 체크리스트가 캘린더에 등록돼 있다
6. 흔한 실수와 해결
벽 1. 대회 시작 시간을 착각해 놓쳤어요
증상: "금요일 저녁 시작"이라더니 열어 보니 이미 반나절이 지나 있습니다.
원인: CTFtime은 UTC로 표시합니다. 한국은 UTC+9라서, UTC 금요일 12:00 시작은 한국 시간 금요일 밤 9시입니다. 반대로 UTC 일요일 종료는 한국 월요일 새벽이 될 수 있습니다.
해결: 일정표의 시간 열은 처음부터 한국 시간으로 환산해 적고, 캘린더 앱에도 환산된 시간으로 등록하세요.
벽 2. 팀 지원 메시지에 답장이 없어요
원인 1순위: "열심히 하겠습니다"형 메시지 — 팀 입장에서는 아무 정보가 없습니다. 2순위: 그 팀의 구성과 내 분야가 겹칩니다.
해결: ① 주력 분야, ② 풀어 본 문제 수나 플랫폼 기록, ③ 투자 가능 시간 — 이 세 가지 숫자를 넣으세요. 그리고 모집 글의 "찾는 분야"와 내 분야가 맞는지부터 확인하세요.
벽 3. 첫 대회에서 한 문제도 못 풀었어요
원인: 첫 대회를 가중치 높은 큰 대회로 골랐을 가능성이 큽니다. 그런 대회는 쉬운 문제조차 입문자 기준으로는 어렵습니다.
해결: 실패가 아니라 측정입니다 — "어느 분야의 어느 유형에서 막혔는가"를 기록하세요. 다음 대회는 "Beginner/Junior" 표기가 있는 곳으로 고르고, 막힌 유형은 대회가 아니라 Step 191 이후의 트랙 학습으로 메웁니다.
벽 4. 팀은 만들었는데 대회 중 각자 따로 놀아요
증상: 누가 무슨 문제를 보는지 모르고, 끝나고 보니 같은 문제를 셋이 봤습니다.
원인: 규칙 없이 시작했습니다.
해결: 3-4의 규칙 초안 그대로라도 좋으니 대회 전에 합의하세요. 특히 "착수 즉시 공유"와 "진행판" 두 개만 지켜도 팀의 효율이 눈에 띄게 달라집니다.
벽 5. 팀을 못 구하겠어요
원인: 팀원 찾기를 "대회 전에 완료해야 할 과제"로 생각하고 있습니다.
해결: 순서를 뒤집으세요 — 혼자 대회에 나가는 것이 팀원 찾기의 일부입니다. 대회 채팅방에는 혼자 온 사람이 항상 있고, Write-up을 공유하는 사람에게 다음 제안이 옵니다. 팀이 없다는 이유로 대회를 미루는 것만이 진짜 손해입니다.
벽 6. 48시간 대회에서 후반에 팀 전원이 녹초가 됐어요
원인: 시작의 흥분으로 전원이 풀가동하다가 둘째 날에 동시에 무너졌습니다. CTF는 스프린트가 아니라 이틀짜리 경기입니다.
해결: 대회 전에 교대 수면 계획을 정하세요 — "누가 언제 자는가"까지 정해진 팀과 아닌 팀의 후반전 성적은 다릅니다. 캡틴의 역할(2-5)이 바로 이 자원 배분입니다. 첫 대회라면 24시간짜리 짧은 대회부터 시작하는 것도 방법입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| CTFtime | 전 세계 CTF 대회 일정·팀·랭킹의 허브 |
| 가중치(weight) | 대회의 규모·수준을 나타내는 값 — 높을수록 강팀 집결, 랭킹 포인트도 큼 |
| Jeopardy | 분야별 문제를 풀어 점수를 얻는 방식 — 입문 대회의 표준 |
| Attack-Defense | 자기 서버를 방어하며 남의 서버를 공격하는 고급 방식 |
| 분야 커버리지 | 팀이 다룰 수 있는 분야의 넓이 — 팀 설계의 첫 원칙 |
| 역할 분담 | 캡틴(손절 판단)·인프라·기록 — 분야와는 다른 팀의 두 번째 축 |
| Write-up 리뷰 | 대회 후 서로의 풀이를 설명하는 시간 — 팀 학습의 핵심 |
| 진행판 | 문제별 담당·진행·해결 상태를 공유하는 표 — 중복 착수 방지 장치 |
오늘의 도구와 문서
| 도구·문서 | 하는 일 |
|---|---|
| CTFtime Calendar | 향후 대회 탐색 (UTC 표기 주의) |
| CTFtime 대회 페이지 | 형식·가중치·제한·과거 Write-up 확인 |
| 대회 일정표 (스프레드시트) | 3개월 일정 + 첫 대회 확정 |
| 팀 규칙 초안 | 소통·공유·진행판·Write-up 분담의 합의 |
| 대회 디스코드 채팅방 | 혼자 참가자의 팀원 찾기 최전선 |
| 당일 체크리스트 | 시작 전 시간·계정·채널·진행판·수면 계획 점검 |
커뮤니티의 예의 — 하나만 기억하세요
팀 찾기든 대회 채팅방이든, 첫인상은 질문의 품질이 만듭니다. "안 돼요"가 아니라 "여기까지 했고, 이 지점에서 막혔습니다" — 시도한 내용을 먼저 보여 주는 사람에게 답이 모입니다. Write-up을 읽을 때도 마찬가지입니다: 퍼 가기보다 감사와 질문 한 줄이 다음 협업의 씨앗입니다.
한 가지 경고를 덧붙입니다. CTFtime의 랭킹은 중독성이 있습니다. 랭킹은 수단이지 목적이 아닙니다 — 순위를 올리려다 풀이 공부를 생략하는 팀은 금방 정체됩니다. 대회가 끝날 때마다 "우리가 새로 배운 것이 무엇인가"를 묻는 팀이 오래 갑니다.
명령어보다 중요한 감각
기술 챕터들 사이에서 오늘은 쉬어 가는 날처럼 보이지만, 커리어 관점에서는 가장 수익률이 높은 날일 수 있습니다. 혼자 100문제를 푸는 것보다, 대회 한 번을 팀으로 뛰고 Write-up을 주고받는 것이 실력과 인맥 양쪽에서 빠릅니다. CTFtime에 가입하고 일정표를 만드는 데 걸리는 시간은 한 시간 — 그 한 시간이 다음 1년의 학습 구조를 바꿉니다.
전부 체크되면 Step 190 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.