Summary
지난 10월 8일 그리고 이틀 전인 11월 10일 두 번에 걸쳐서 2022 POWER OF XX 대회를 운영하였다.
예/본선 모두 CTF 플랫폼과 문제 인스턴스 등 인프라 전체 관리를 맡았고 약간의 문제(?)를 제외하면 성공적으로 대회를 운영한 것 같다.
이번에 운영했을 때 인프라를 어떻게 구성했는지를 간단하게 썰로 풀어보려고 한다.
Server
Instance Name | Description | Spec |
---|---|---|
Main-Server | CTFd(v3.5.0) | c5.2xlarge(8CPU, 16RAM, SSD 8GIB) |
Challenge-Server | Ubuntu 22.04 AMD64 | c5.4xlarge(16CPU, 32RAM, SSD 32GIB) |
우선 서버 인스턴스는 총 2개로 메인 서버 - 문제 서버를 생성해서 사용하였다.
![]() |
---|
[사진 1] 그림에 소질이 없다.. 대충 그림 |
사진과 같이 Main-Instance <-> Challenge-Server 간 Docker SDK API
를 통해서
인스턴스가 연결되어 있는 구조이고 실제로 참가자들에게 문제를 할당할 때
Main-Instace (Request) -> Challenge Server (Build & Deploy) 되는 구조이다.
즉, 참가팀마다 서로 다른 인스턴스 환경에서 문제를 풀이하게 되고 타 참가팀의 트롤이 불가능하다.
Qualifier
우선 이번 예선전에 참가한 팀은 46팀 (110명) 에 대한 동시 접속에 대한 처리도 생각을 해야 했었다.
그래서 메인 서버에서 돌아가는 CTFd
를 약간 커스텀해서 동시에 처리할 수 있는 thread pull 을 늘려주었고
동시 접속에 대해서 원활하게 처리를 할 수 있었다.
[사진 2] 예선전 결과 스코어보드 |
Final
본선에서는 약 10팀이 올라왔고 인원수로는 45명 정도가 되었다. 예선보다 인원수가 많이 줄었기 때문에
이번 서버 사양은 조금 낮춰서 운영을 해보기로 했다. (실제로 리소스가 어느정도 필요한지 측정을 해놔야하기 때문!)
Instance Name | Description | Spec |
---|---|---|
Main-Server | CTFd(v3.5.0) | c5a.2xlarge(8CPU, 16RAM, SSD 8GIB) |
Challenge-Server | Ubuntu 22.04 AMD64 | c5a.2xlarge(8CPU, 16RAM, SSD 30GIB) |
메인 서버 인스턴스는 크게 변화가 없지만 가격대비 가성비가 좀 나오는 사양으로 선택을 했고
문제 인스턴스도 메인 서버쪽과 동일하게 맞췄다. 이렇게 본선 대회 운영을 했는데 대회 진행 시간 내내
인프라 쪽 크게 이슈는 없었다. 이로써 인원수 별 어느정도 리소스가 드는지 대략적으로 지표를 쓸 수 있었기 때문에
다음에도 비슷한 대회 규모가 있다면 문제 없이 운영이 가능할 것 같다.
![]() |
---|
[사진 3] 본선전 결과 스코어보드 |
본선전 결과는 CyKor (고려대 사국) 소속의 여성 해커분들이 우승을 하셨다.
이번에 본선 대회가 오프라인으로 진행됐기에 퇴근 하고나마 잠깐 대회장에 가서 분위기를 봤는데
정말 아~무 소리없이 다들 문제에만 집중하시는 것을 볼 수 있었다. (열정 good)
대회가 끝나고서는 한 문제를 계속 잡고 계셨던 분이 있는데 아쉽게도 문제를 못푸셨고 매우 아쉬워하시는 모습이 보였다. 😭
다음엔 꼭 문제를 모두 풀 수 있기를 응원하겠습니다! 🙏
ETC
이번에는 대회 안내 메일에 대해서 깨알 자동화 작업을 조금 했는데 다음 대회때도 유용하게 써먹을 수 있을 것 같다.
![]() |
---|
[사진 4] 메일 발송 자동화 툴(python) |
참가팀 정보 시트를 파싱해서 CTF 사이트 자동 가입 + 메일 발송까지 한번에 처리할 수 있도록 코드를 짰다.
References
AWS EC2, S3
CTFd
Docker API