개발 히스토리#
코드배틀은 “한 번에 크게 만들기”보다는 MVP를 올리고, 느린 지점을 고치고, 행사를 지원하면서 확장하는 방식으로 성장해 왔습니다. 특히 초창기에는 회사 일과 공부 사이에서 시간을 쪼개며 진행했고, 그 과정에서 “개발 히스토리를 문서로 남겨 컨텍스트를 유지하는 습관”이 큰 도움이 되었습니다.
2017년 5월 21일 — 가위바위보 게임 MVP로 사이트 오픈#
코드배틀의 1st MVP는 가위바위보 게임이었습니다. 처음에는 웹페이지 하나와 API 하나로 시작했고, 사용자는 onGameStart(), onRoundStart() 같은 콜백 함수를 코드 영역에 작성해 “내 전략”을 주입하는 방식이었습니다.
- 기술 스택: Node.js + Express 기반으로 라우터 / 뷰를 분리했고, 코드 작성 영역은 모나코 에디터를 적용했습니다. 디자인은 Bootstrap을 얹고, 모바일 / 데스크탑 반응형 레이아웃을 최소한으로 맞췄습니다.
- 게임 설계 포인트: 단순 가위바위보 룰만으로는 “랜덤을 대부분 이길 수 있는 전략”을 만들기 어려워서, 이길 때 선택에 따라 점수가 달라지도록(가위 1점/바위 2점/보 3점) 룰을 바꿔 전략 설계의 여지를 만들었습니다.
- 동시 실행 이슈: 서버가 클라이언트를 구분하지 못하면 여러 사용자가 동시에 실행할 때 결과가 섞일 수 있어서,
trans_id를 도입해 트랜잭션 단위를 분리하는 방식으로 안정성을 확보했습니다. - 운영 오픈: AWS(서울 리전) 인스턴스에 Nginx/Node 환경을 올리고,
codebattle.online도메인을 붙여 첫 오픈을 마쳤습니다.
2017년 8월 3일 — AJAX 통신에서 Socket.io 기반으로 전환#
초기에는 턴 / 라운드 단위로 요청이 많이 발생하다 보니, 동시 실행이 조금만 늘어도 서버 입장에서는 “거의 DDOS처럼” 부담이 커지는 느낌이 있었습니다. 그래서 게임 진행 중의 요청 / 응답 흐름을 Socket 기반으로 전환했습니다.
- 체감 성능: Socket으로 바꾸면 극적으로 빨라질 것이라 기대했지만, 실제로는 “엄청 빨라졌다”기보다는 구조가 더 명확해진 쪽이 더 컸습니다.
- 의미: 이후 사용자 간 실시간 대전(1:1) 확장에 필요한 기반을 미리 깔아 둔 셈이었습니다.
2017년 8월 14일 — 원격 사용자 1:1 온라인 대결 릴리즈#
기존에는 서버에 구현된 상대 로직(RANDOM / LEVEL 등)과만 대결할 수 있었는데, 대기실(닉네임), 매칭 / 대결 신청 등 사용자끼리 1:1로 붙는 온라인 대전을 오픈했습니다.
- 개발 난이도: 소켓 프로그래밍이 익숙하지 않은 상태에서 시작해 삽질이 많았고, “돌아가긴 하는데 코드가 엉켜 있는” 상태로 기능이 먼저 완성된 후에 정리해야 하는 숙제가 남기도 했습니다.
- 운영의 현실: 기능은 열었지만, “나 말고는 아무도 들어오지 않는” 현실도 마주했습니다. 그래도 이 경험은 이후 행사 운영(토너먼트/대진표) 관점에서 큰 자산이 됐습니다.
2017년 9월 6일 — 검색엔진최적화(SEO) 작업#
구글 / 네이버 서치콘솔(또는 웹마스터 도구) 기준으로 사이트 인증, 사이트맵 제출, 메타태그 보강 등 기본적인 SEO 작업을 진행했습니다. “내가 할 수 있는 건 대강 다 했다”는 느낌으로, 이후에는 검색엔진이 잘 반영해 주기를 기다리는 단계였습니다.
2017년 11월 1일 — 오목(Five in a Row) 게임 추가#
두 번째 게임은 오목으로 정했고, 이때부터 “게임이 늘어나는 구조”를 본격적으로 고민하게 됐습니다.
- 구조 변화: 게임별로 소켓 포트 / 컨트롤러 / 게임 파일을 분리하는 방식으로 구조를 잡았습니다.
- 운영 이슈: 게임을 추가할 때마다 포트 오픈을 위한 AWS Security Group 설정을 손봐야 하는 번거로움이 있어, “게임을 쉽게 추가하는 구조”까지는 아직 갈 길이 남아 있었습니다.
- 알고리즘: RANDOM / LEVEL1부터 시작해, LEVEL2, LEVEL3(미니맥스 등)까지 단계별로 고도화하는 흐름으로 가져갔습니다. 특히 LEVEL3는 디버깅에 시간이 많이 들었고, LEVEL2에게 지는 상태를 그냥 둘 수 없어서 끝까지 붙잡고 개선했습니다.
2018년 8월 10일 — 숫자야구(Bulls and Cows) 게임 추가#
오랜 공백 이후 추가한 게임이 숫자야구였습니다. 이 게임은 매 턴마다 “볼 / 스트라이크” 같은 피드백을 받아서 가능한 정답 후보를 계속 줄여 나가는 것(필터링) 이 핵심입니다. 그런데 후보를 줄이고 나면, 남아 있는 후보들 중에서 “다음에 어떤 숫자를 던질지”를 정하는 기준이 애매해지기 쉬워, 결과적으로 선택이 무작위에 가까워지는 문제가 있었습니다. 그래서 LEVEL 간(예: LEVEL1과 LEVEL2)의 실력 차이를 분명하게 만들기가 어려웠습니다.
- 룰 보강: 동시 정답(비김) 상황에서 더 큰 수가 승리하도록 규칙을 추가해, LEVEL1 / 2 / 3를 의미 있게 나눌 수 있도록 설계를 보강했습니다.
2019년 8월 20일 — 섯다(Sutda) 게임 추가#
타짜 명장면을 다시 본 뒤 섯다를 추가하기로 결정했고, 결과적으로는 “게임 프로토콜을 단순화하기가 가장 어려웠던 게임” 중 하나였습니다.
- 복잡했던 이유: 턴의 의미가 다른 게임들보다 복잡했고, 라운드마다 선이 바뀌는 요소가 구현 난이도를 올렸습니다.
- 범위 조절: 규칙을 전부 넣기엔 과해질 수 있어, 끗 / 땡 / 광땡(38, 18, 13) 중심으로 룰을 설계해 게임성을 확보했습니다.
2021년 9월 24일 — SK플래닛 행사 지원용 “1:1 무술대회” 컨셉 게임 추가#
코드배틀은 네오위즈 재직 시절 개발자 행사에서 마지막 세션이자 분위기의 피크를 찍던 주인공 같은 세션이었습니다. 그래서 추억을 가진 사람이 저뿐만이 아니었고, SK플래닛에서 개발자 행사를 기획하던 지인이 우연히 검색을 통해 제 글을 보고 연락이 닿으면서, 코드배틀로 행사를 지원하게 됐습니다.
- 지원 범위: 단순히 웹페이지를 만드는 수준이 아니라, “어떤 게임이 행사에 맞는가”, “예선 / 본선 진행 방식은 어떻게 할 것인가”, “운영을 위해 무엇이 필요한가” 같은 제안까지 포함된 형태였습니다.
- 핵심 가치 재확인: 코드배틀이 “서비스”로서도 의미가 있지만, 특히 개발자 행사에서 사람들을 몰입시키는 장치로 강하다는 걸 다시 체감한 시기였습니다.
2022년 11월 24일 — SK플래닛 행사 지원용 “진짜 야구” 게임 추가#
지인이 처음엔 “숫자야구인가?” 하고 살짝 실망한 듯했지만, “진짜 야구” 컨셉임을 설명하자 이내 반응이 좋아졌던 기억이 있습니다. 이때부터는 행사 맥락에 맞게, 규칙을 ‘직관적이면서도 관전 재미가 있는 방향’으로 더 신경 쓰게 됐습니다.
2023년 12월 2일 — SK플래닛 행사 지원용 “숫자 카드 배틀” 게임 추가#
홀덤/오목/섯다 중에 고민하다가 섯다로 하려고 했는데, 지인이 도박 종류는 리스키하다고 하여, 섯다 룰에 기반한 “숫자 카드 배틀” 을 고안했습니다.
- 피드백: 이전 게임들에 비해 컨셉이 어렵다는 피드백들이 있었지만, 그래도 다행히 행사를 성황리에 잘 마쳤다고 하여 안심했던 기억이 있습니다.
2026년 1월 30일 — 트래픽 구조 개선 및 디자인 리뉴얼 릴리즈#
코드배틀 사이트를 오픈한지 어느덧 9년이 다 되어 가는 시점이었습니다. 이때까지 마케팅을 하지 않았었고, 디자인도 처음 그대로였습니다.
- 미뤄진 이유: 회사 일 때문에 바쁜 것도 있었지만 더 중요한 것은, 게임 특성상 게임 실행시 서버와의 통신량이 많아서 동시 접속자가 늘어날 경우 버티기 어려운 구조였기 때문입니다.
- 전환점: SK플래닛 지원용 게임을 추가하면서 서버 통신 없이 게임을 실행하는 방식을 고안해냈고, 어떻게 개선해야할지를 정할 수 있었습니다.
- 실행: 다만 그 생각을 하고 나서도 몇년간 미뤄오다가, Ted Factory 기획을 하면서 이제는 해야한다는 사명감과 함께 트래픽 관련 기능 개선 및 디자인 리뉴얼을 진행하여 릴리즈했습니다.