- Published on
[개발자 칼럼] 좌충우돌 부산국제영화제 예매 시스템 구축기
열정 하나로 트래픽의 폭풍을 마주했던 그 시절의 기록

가을바람이 선선해질 때면 언제나 부산은 영화의 열기로 뜨겁게 달아오릅니다. 문화의 불모지였던 부산에서 피어난 부산국제영화제(BIFF)는 이제 대한민국을 넘어 아시아를 대표하는 최고의 축제로 자리 잡았습니다. 이 시즌이 되면 전국 각지에서 자원봉사자들과 영화 팬들이 한걸음에 달려오는 모습을 보며, 부산 출신의 개발자로서 매번 말로 다 할 수 없는 깊은 자부심을 느낍니다.
하지만 화려한 축제의 막이 오를 때마다, 제 마음 한구석에는 아련함과 함께 찌릿한 긴장감이 동시에 밀려오곤 합니다. 20여 년 전, 밤을 지새우며 서버실의 열기 속에서 악전고투했던 '그때 그 시절'의 기억이 생생하게 떠오르기 때문입니다. 코드가 완벽해서가 아닙니다. 오히려 예상치 못한 시스템 장애와 밀려드는 트래픽 앞에서 온몸으로 버텨내야 했던, 눈물겨운 장애 복구의 추억 때문입니다.
1. 3주라는 시간, 3명의 개발진이 마주한 무모한 도전
시간을 거슬러 올라가 2000년 가을, 제5회 부산국제영화제를 앞두고 있었을 때의 일입니다. 당시만 해도 영화표를 구하려면 새벽부터 극장 앞에 길게 줄을 서는 오프라인 예매가 당연하던 시절이었습니다. 영화제 사무국은 이러한 불편을 획기적으로 개선하고자, 축제 역사상 최초로 웹 기반 인터넷 실시간 예매 시스템을 도입하겠다는 야심 찬 계획을 세웠습니다.
하지만 이상과 현실의 거리는 멀었습니다. 일 년 중 영화제 기간에만 반짝 주목받는 사이트의 특성상, 개발팀에게 주어진 인프라와 시간은 턱없이 부족했습니다. 금융 결제가 포함된 고난도의 시스템을 구축해야 했음에도 불구하고, 우리에게 남은 시간은 단 3주였습니다. 게다가 투입된 인력은 웹 개발자 2명과 웹 디자이너 1명이 전부였습니다.
지금의 상식으로는 도저히 불가능한 일정과 리소스였지만, 당시 우리는 세간의 주목을 받는 BIFF의 핵심 시스템을 만든다는 순수한 자부심 하나로 똘똘 뭉쳐 있었습니다. 매일 밤을 새우다시피 하면서도 피곤한 줄 모른 채 열정적으로 키보드를 두드렸습니다.
2. 예고 없이 찾아온 난관: 이름도 생소한 'X.25' 프로토콜
일반적인 게시판과 안내 페이지들은 순조롭게 만들어졌습니다. 진짜 문제는 엉뚱한 곳에서 터졌습니다. 당시 영화제의 메인 협찬사였던 부산의 한 은행과 결제 모듈을 연동해야 했는데, 은행 측으로부터 전달받은 연동 스펙을 본 순간 개발팀은 깊은 충격에 빠졌습니다.
편리하게 연동할 수 있는 일반적인 PG 대행업체의 모듈 대신, 이름도 생소한 'X.25' 기반의 인터페이스 규격서를 받아 들었기 때문입니다. X.25는 주로 금융권 전용망에서 사용되는 프로토콜로, 보안성과 안정성은 뛰어났지만 TCP/IP 인터넷 환경과는 완전히 다른 세상의 물건이었습니다.

TCP/IP와 X.25 프로토콜 간 변환 구조
더 큰 문제는 연동을 위한 라이브러리나 API는커녕, 수십 페이지짜리 종이 문서 규격서가 전부였다는 점입니다. 게다가 이 프로토콜을 테스트하려면 서버에 특수한 전용 통신 카드를 장착해야만 했는데, 이는 개발 환경에서는 확인할 방법이 없고 오직 은행과 연결된 실제 운영 서버에서만 구동을 확인할 수 있는 구조였습니다. 한 마디로 '눈을 가린 채 징검다리를 건너는' 격이었습니다.
당시 웹 사이트의 메인 언어는 ASP Active Server Pages였습니다. 서버 스크립트 언어인 ASP만으로는 인터넷의 TCP/IP 신호를 받아 X.25 금융망 신호로 변환해 쏘아주는 백엔드 모듈을 구현하는 것이 원천적으로 불가능했습니다. 그렇다고 이제 와서 개발 환경을 통째로 뒤엎기에는 남은 시간이 전혀 없었습니다. 진퇴양난의 막막한 어둠 속이었습니다.
3. 총대를 멘 동료, 그리고 밤샘의 연속
어떻게든 길을 찾아야 했습니다. 며칠 밤을 수소문한 끝에, C++ 같은 고급 언어로 연동 모듈을 개발한 뒤 Windows 서버의 레지스트리에 DLL Dynamic Link Library로 등록하고, 이를 IIS(인터넷 정보 서비스)의 ISAPI Extension으로 구성하면 ASP에서도 호출할 수 있다는 실마리를 찾아냈습니다.
오픈을 고작 일주일 남겨둔 시점, 클라이언트-서버(C/S) 프로그램 개발 경험이 있던 동료 개발자가 총대를 메고 이 험난한 X.25 변환 모듈 전담 개발에 착수했습니다. 인터넷 예매가 실패하면 영화제 전체가 마비되는 상황이었기에, 나는 그 친구가 오직 통신 모듈 개발에만 전념할 수 있도록 그가 맡았던 나머지 웹 페이지 개발 업무를 전부 밤을 새우며 대신 받아 쳐내기 시작했습니다.
매일 밤 기획서와 코드를 번갈아 보며 숨 막히는 압박감과 싸웠습니다. 영화제 사무국에서는 연일 사상 최초 인터넷 예매 개시라며 대대적인 언론 홍보를 쏟아내고 있었으니, 우리가 느낀 심리적 중압감은 이루 말할 수 없었습니다. 우여곡절 끝에 오픈 직전, 기적적으로 X.25 변환 모듈이 완성되었고 운영 서버 배포까지 성공했습니다. 테스트 환경에서 마침내 결제 신호가 떨어지는 것을 확인했을 때, 우리는 서로를 껴안으며 안도의 한숨을 내쉬었습니다.
4. 운명의 9시, 그리고 멈춰버린 서버
그리고 마침내 운명의 오픈 당일 오전 9시가 되었습니다.
지금도 그 순간을 생각하면 등 뒤로 식은땀이 흐르는 것만 같습니다. 예매 시작 버튼이 활성화되자마자, 모니터 앞 조마조마하게 대기하고 있던 수만 명의 사용자가 일시에 접속을 시도했습니다.

단 몇 초 만에 엄청난 결제 요청이 폭주했고, 우리의 X.25 연동 모듈은 밀려드는 데이터를 감당하지 못한 채 동맥경화에 걸린 것처럼 극심한 병목 현상을 일으켰습니다. 하나의 요청이 처리될 때까지 뒤이어 들어온 수천 개의 요청들이 서버 메모리를 가득 채웠고, 결국 예매 시스템을 넘어 웹사이트 전체가 완전히 먹통이 되는 대형 장애가 발생하고 말았습니다.
X.25 프로토콜의 특성상 데이터 처리 속도가 느리다는 점을 간과한 대가였습니다. 트래픽을 분산시키거나 메시지 큐(Queue)를 도입해 순차적으로 처리했어야 했는데, 단순한 기능 작동 테스트만 통과했다고 안심했던 것이 화근이었습니다. 자유게시판은 예매에 실패한 사용자들의 분노와 항의글로 순식간에 도배되었습니다. 열심히 준비했던 만큼, 밀려오는 자괴감과 면목 없음은 이루 말할 수 없었습니다.
5. 뜻밖의 위로, 그리고 '화양연화'가 남긴 여운
그런데 그 절망적인 순간에 다소 의외의 상황이 펼쳐졌습니다. 영화제 사무국에서 부산국제영화제의 폭발적인 인기로 인해 예매 시스템 마비라는 내용의 보도자료를 신속하게 배포하며 대중의 불만을 진화하기 시작한 것입니다.
열악한 환경에서 며칠 밤을 지새우며 고생한 개발진의 사정을 누구보다 잘 알고 있었기에, 사무국 담당자들이 책임을 묻기보다 오히려 우리를 보호하고 격려하기 위해 기지를 발휘해 준 것이었습니다. 고생 많았다, 힘내서 복구해 보자며 어깨를 두드려주던 그들의 따뜻한 눈빛은 평생 잊지 못할 고마움으로 남아있습니다.
이 사건을 계기로 영화제 예매 시스템의 엄중함을 깨달은 사무국은, 이듬해부터 대형 포털이나 티켓 예매 전문 기업과 연계하여 시스템을 구축하기 시작했습니다. 재미있는 점은 그 후로 약 10년 동안, 최고의 기술력을 가진 대기업들이 참여했음에도 불구하고 매년 예매 오픈일마다 시스템 마비 사태가 연례행사처럼 반복되었다는 사실입니다. 트래픽의 대폭발 앞에서는 당해낼 장사가 없다는 IT 업계의 오랜 격언을 증명하듯 말입니다.
영화제 기간 내내 예매 시스템 코드를 수정하고 개선하는 작업을 반복하며 악몽 같은 스케줄을 보냈지만, 축제의 마지막 날 우리에게는 뜻밖의 보상이 주어졌습니다. 고생한 개발진을 위해 사무국에서 폐막작인 왕가위 감독의 영화 <화양연화> VIP 입장권을 선물해 준 것입니다. 스크린 속에 흐르는 애잔한 첼로 선율을 들으며, 비로소 길었던 3주간의 전쟁이 끝났음을 실감했습니다.

왕가위 감독의 <화양연화> (2000)
6. 다시 그 시절로 돌아간다면
가끔 '지금의 기술을 가지고 그때로 돌아간다면 어땠을까' 하는 부질없는 상상을 해보곤 합니다. 만약 지금 다시 시스템을 구축한다면 대규모 비용을 들여 전용 서버를 사지 않아도, AWS 같은 클라우드 환경 위에 쿠버네티스 Kubernetes를 얹어 사용자 트래픽 추이에 따라 실시간으로 서버를 늘리는 오토 스케일링 Autoscaling을 적용했을 것입니다. 결제 요청 역시 다양한 메시지 큐(Message Queue) 서비스들을 활용해 시스템 다운 없이 우아하게 순차 처리를 해냈겠지요.
지금은 너무나 당연하고 쉬워진 기술들이지만, 20년 전에는 맨땅에 헤딩하듯 온몸으로 부딪쳐 깨달아야 했던 소중한 자산이었습니다.
비록 기술적으로는 거칠고 부족한 투성이의 시스템이었지만, 오직 열정과 책임감 하나만으로 거대한 트래픽의 폭풍에 맞섰던 그 시절이 오늘따라 유독 그리워집니다. 화려하게 빛나는 해운대 '영화의 전당' 불빛 속에서, 그 시절 밤새도록 모니터를 밝히던 우리의 젊은 날의 코드가 아른거리는 듯합니다.

현재의 부산 영화의 전당