처음으로 소개한다. 크래프트테크놀로지스. 지금 내가 몸담고 있는 회사이다. 난 AI 강화학습 에이전트를 이용한 주문집행 소프트웨어를 주 라인업으로 가진, AI Trading Solution 부서의 개발팀에 있다. 입사 당시엔 AXE라는 이름으로 있었다. 도끼 아니다. 현재 3년을 넘겼다.
내가 입사할 때 이 회사는 30명 규모의 회사였다. 잠시후, 소프트뱅크에서 대규모 투자가 들어왔다. 인원이 80명으로 급증했다. 물론 우리팀은 예나 지금이나 비슷한 규모를 유지중이다. 회사에서 대형 프로젝트를 하기위해 팀이 신설되고 공격적인 채용이 진행됐던 것이다. 처음엔 기대했다. 그 대규모 프로젝트에서 우리팀은 나중에 이런걸 하고 있겠지. 물론 그 프로젝트는 실패했다. 우리 팀은 그냥 평온하게 하던거 하고 있다. 회사는 다시 대박을 칠 무언가를 기다리며 여러 시도들을 하고 있다.
우리 팀은 팀의 제품을 증권사에 납품하는 형식의 사업을 하고 있었다. 여타 기술기업들이 의례 그렇게 실수하듯, “좋은거 만들어두면 쓰겠지"라는 마인드가 좀 있었다. 제품과 니즈는 충돌했고, 우리에겐 “이럴거면 왜 AI를 도입하려는거지?”하는 불만이 좀 있었다. 하지만, 을은 갑이 원하는걸 해줘야 하니까, 일단 들어줬다. 결론부터 말하면 잘했다. 여기서 들이받았으면 제품은 영영 제자리걸음이었을 것이다. 강력한 성능의 못쓰는 물건으로.
제품은 현재 4.0버전까지 와 있다. 내가 입사할 당시는 1.0에서 2.0 버전으로 넘어가던 시기였다. 1.0의 성능에 만족한 고객사와 대형 프로젝트로 2.0을 기획하고 개발을 진행했다. 난 이 버전을 설치하고 세팅하는 시기에 입사했다. 해킹 공부로 얻은 인프라쪽 지식과 개발능력을 동시에 가지고 있었기 때문에 입사할 수 있었다. 딱 그런 사람이 필요한 시기였기 때문이다. 하지만 온보딩 시스템이 없는, 사수조차 없는 이 팀에서는, 프로그램이 뭘 하는 것인지 등 소개 문서 하나 없이 다짜고짜 일부 마이크로서비스의 코드를 분석하고 리펙터링하라는 지시가 내려왔다. 난 트레이딩에 대해서는 겉핥기 식으로 잠시 주식투자를 해본게 다였기 때문에, 프로그램이 뭘 하는지 이해하려니 막연하고 막막했다. 심지어 마이크로서비스 시스템은, 서비스의 목적을 더 알기 어렵게 만들었다. 삽질을 하기 시작했다. 그나마 설치 업무에 적응하는게 더 수월했다. 설치업무를 하면서, 시스템을 파악하여 코드베이스를 파악해나갔다.
2.0은 한가지 큰 과제가 있었다. 초대형이라는거다. B2B2C를 목표로 하고 있었다. 최신 개발 트렌드와 기술스택도 대거 도입했다. 2021년이었던 당시에 이미 Rust를 도입했고, 펄서를 메시지큐로 도입하고, 쿠버네티스를 도입하고, IaC도 하겠다며 helm과 Terraform까지 이용했다. 그것도 증권사의 폐쇄망 Cloud에서! 천재들의 세계는 엄청나군! 난 그저 그걸 내것으로 흡수하고, 그 원대한 계획을 실제로 실현해내는데 집중했다. 2.0 막바지에 갔을 땐, 모르는건 많지만 겁먹진 않는 개발자가 되어 있었다. 가장 비효율적인 곳에 들어왔기에 가능한 성장이였다. 이런 기회는 이제 주어지기 어려울 것이다. 회사는 더이상 이런 삽질을 기다려주지 않는다. 이제 성과를 내야 하는 시기이다. 나 또한 이런 개고생을 경험할 기회를 줄 생각은 없다. 버틸 확률이 10%일 것이다. 만든 사람들도 나중에 다 퇴사했을 정도니까. 진짜 중간에 별의 별 생각을 다했다. 무사히 넘겼으니까 이정도로 이야기할 수 있는 것이다. 기술이 어려운게 문제가 아니다. 설치 마무리 후 장애로 인해 매일같이 오는 긴급전화와, 긴급 출장업무가 문제였다.
초기 B2B2C로 기획되었던 프로젝트는 시간이 지나며 B2B로 축소됐다. 동시작업 10000건 목표는 없던 일이 되었다. 10000건을 감당하기 위해 만들어진 제품은 B2B에서 그냥 돼지가 되어버렸다. 심지어 먹이는 많이 먹는데 고기는 팔 곳이 없는 그런 돼지였다. 2.0 프로젝트의 주역들은 모두 퇴사했다. 충원은 이보다 덜했다. 프로젝트가 축소되었으니 당연한 수순이었다. 이후 잠시 팀을 맡던 팀장도 퇴사했다. 유지보수하는 입장에서 너무 힘들었다. 여기저기 함정이 도사리고 있고, 커다란 사이즈 만큼 버그도 많았다. 천재 개발자들이 만든 힙한 야심작은, 아무리 그들이 천재였어도 허점이 많았다. 당연하다. 버그 없는 프로그램은 없다. 매일 오전 카톡이 울리면 고객사 연락인가 하고 스트레스를 받으며 서비스를 안정시키기 위해 고군분투했다.
2.0의 주역들과 그 다음 팀장이 모두 퇴사하고, 팀장 제의를 강력히 거절했다. 동아리에서의 그 경험은 팀장직에 대한 본능적인 공포로 다가왔다. 다시는 그런거 안하기로 했다. 팀에서 조용히 계시던 시니어 개발자가 팀장이 되었다. 대신 나에게 많은 권한을 주셨다. 시니어 팀장님은 혼자 다른 언어를 쓰고 계셨기 때문이다. 당시 3.0 프로젝트가 진행중이었고, QA가 입사하며 버전 및 품질관리도 시작했다. 쓸데없는 중복을 버리고 안정성을 높이는게 3.0의 목표였다. 팀장님은 중복된 기능을 가진 세 개의 서비스를 통합했다. 3.0 프로젝트는 커졌다. 난 내가 담당하던 마이크로서비스도 완전 새로 개발했다. 그리고 아싸리 쓸데없는걸 다 들어내기로 했다. 인프라도 불필요한 것들을 다 날려버렸다. 이제 내가 아니어도 기본적인 설치나 디버깅 업무가 가능하게 되었다. 맞다. 제발 이 지옥같은 업무를 좀 분산시켜 달라는 아우성같은 것이었다. 그리고 그 시기에 새로 들어온 매우 협조적인 팀원이 간소화된 제품 설치 과정을 따라다니며 배우면서 설치 업무를 돕고자 부단히 노력했다.
3.0 버전으로 넘어가면서, 일에 여유가 좀 생겼다. 리서치팀과 함께 새로운 프로젝트를 진행했다. 매일 회사에 쌓이고 있는 데이터를 분석해서 우리 팀의 모델 학습에 사용할 수 있도록 기존에 사용하던 고가의 구매 데이터 형태로 변환하는 프로젝트였다. 이것이 진행되면, 데이터 구매 비용 부담으로 인해 잠시 멈췄던 학습을 다시 재개할 수 있었고, 타 거래소로의 확장도 용이해질 것이었다. CTO님의 퇴사 전 인수인계로 이 프로젝트에 대한 기획을 넘겨받았고, 무사히 개발해서 사용중이다.
시니어 팀장님이 이민을 가면서 퇴사하고, 잠시 팀장을 하다가 퇴사했던 팀장이 재입사했다.
다음은 4.0 프로젝트에 돌입했다. 4.0의 목표는 코드의 가독성, 유지보수성이다. 여기에 모든 기능의 완전한 이중화까지 지원한다. 개발언어를 Rust로 통일하고, 중앙화할 수 있는 것을 모두 공통 라이브러리로 관리한다. 모노리포 구조로 말이다. 코딩컨벤션도 정해졌다.
그러던 중 또다른 문제를 함께 해결해야 했다. 4.0 프로젝트 도중 DMA 프로토콜을 병행해서 개발해야 하게 되었다. 일정이 겹쳐서 끼어들어온 것이다. 하지만 난 허리 디스크가 파열되었다. 하지만 대체가 없어서 재택근무로 전환해서 마지막까지 프로젝트를 마무리해야 했다. 힘들긴 하다. 집에 갇혀서 일하는 느낌이다. 그 상태로 새벽 3시까지 작업을 하기도 했다. 하지만 그렇게 하라고 시킨 사람은 없다. 근데 하지 않으면 일정을 맞출 수가 없다. 뭐, 언젠간 지나갈 일이다.