[개드립 소설] 2. 적응과 도태
2. 적응과 도태
2-1장: 자연 선택
유니콘-X의 시계는 언제나 바깥세상보다 빠르게 돌아갔다. 생존을 위해 매일 새로운 마케팅 이벤트 기획이 무더기로 쏟아졌고, 오늘 오전에 낸 할인 룰과 쿠폰 아이디어는 내일 오후에 서비스되어야 했다.
그 맹렬한 속도전 속에서 회사 내부의 공기는 서서히 한쪽으로 기울기 시작했다.
마케팅팀과 운영팀은 반나절씩 잡아먹는 답답한 공돌이들의 절차 대신, 1시간 만에 결과를 내놓는 성치훈 차장에게 먼저 메신저를 보내기 시작했다. 쿼리를 직접 수정하다가 가끔 장애가 나더라도, 그는 5분 만에 롤백하고 다시 쿼리를 꽂아넣었다. 불만을 터뜨리는 고객은 쿠폰을 쥐여주는 것으로 해결했다. 비즈니스 부서 입장에서 그것은 마케팅 비용이었다. 반면 마케팅팀은 우진의 '의사의 손 씻기'를 일정 지연의 단골 핑계 정도로 치부하기 시작했다.
2-2장: 생존 편향
처음부터 거대한 아키텍처 개편이나 '수술' 같은 명분은 없었다. 시작은 그저 밀려드는 마케팅 기획을 쳐내기 위한 생존 수단이었다.
"로그인 보상 포인트 2배 이벤트, 오늘 자정에 무조건 나가야 합니다. 지표 떨어지고 있어요!"
"VIP 등급 산정 기준에 어제 런칭한 신규 서비스 결제액도 포함해주세요. 당장요."
스타트업 유니콘-X의 회의실은 매일같이 비즈니스 부서의 절박한 아우성으로 채워졌다. 투자금을 태워 고객을 모으는 맹렬한 속도전 속에서, 개발팀에게 주어진 시간은 언제나 턱없이 부족했다. 우진이 DTO와 도메인 모델 사이를 오가며 무결성을 챙기느라 5시간을 쓰는 동안, 경쟁사는 이미 이벤트를 시작하고 고객의 지갑을 열고 있었다.
개발팀의 선택지는 하나씩 줄어들고 있었다.
"이거 구조대로 짜려면 이번 주 안에는 못 나갑니다. 일단 치훈 차장님 방식대로 하죠. 화면에서 받은 데이터 그냥 프로시저 이름만 맞춰서 넘기세요. PL/SQL은 치훈 차장님이 짜주실 겁니다."
'나중에'라는 단서와 함께 임시로 작성된 코드는 그대로 운영 서버에 정착했다. 팀원들이 UI와 데이터베이스를 각자 분배해 작업하는 과정에서 PL/SQL 갱신이 누락되어 자정이 넘은 시간에 운영 서버에 오류가 떨어지곤 했다. 하지만 그때마다 치훈은 검은 SQL 클라이언트 창을 띄우고, 운영 DB에 직접 접속해 잽싸게 쿼리를 수정하고 '컴파일' 버튼을 눌렀다. 5분도 채 안 되어 상황은 종료되었다.
치훈은 시스템의 배를 직접 갈랐고, 환부를 직접 꿰맸다. 처음에는 마케팅 이벤트라는 말초 신경에만 가해지던 치훈의 '직접 집도'는, 그 짜릿한 1시간 컷의 효능감에 취한 비즈니스 부서의 요구에 따라 서서히 회원, 주문 같은 시스템의 주요 장기들로 번져나가기 시작했다.
시스템의 껍데기도 그 속도에 맞춰 급격히 얇아졌다. 마케팅팀이 기획안을 던지면 치훈은 곧장 프로시저로 기능을 찍어냈고, 테스트(QA)팀은 즉각 새 기능들을 검증해 냈다. 기획-개발-검증이 하나의 목표를 향해 완벽한 톱니바퀴처럼 쉴 새 없이 맞물려 돌아갔다. 경영진은 이 빠르고 유례없는 조직력에 깊은 흡족함을 표하며, 이 모든 '효율적 설계'를 주도하고 회사에 새로운 속도의 DNA를 주입한 치훈을 주목하기 시작했다.
복잡한 비즈니스 로직들은 데이터베이스 안으로 이동했다. 화면의 데이터는 HashMap으로 직접 DB에 전달되었다. 자바 레이어의 DTO 생성이나 인터페이스 설계는 쓸모를 잃고 도태되었다. 쓰이는 것은 살아남았고, 쓰이지 않는 것은 사라졌다. 개발자들이 처한 압력 속에서 유니콘-X의 코어 비즈니스 로직은 수백에서 수천 줄 규모의 스토어드 프로시저로 모습을 바꿔 적응했다.
---
2-3장: 처방 효과
치훈의 20분 컷 처방을 맞은 마케팅팀은 돌아갈 수 없었다. 쿠폰 5% 추가 같은 사소한 변경을 위해 8시간을 기다리는 건 이제 견딜 수 없었다. 하루가 늘어난 듯한 시간적 혜택을 누린 마케팅팀의 눈앞에는 그동안 보이지 않았던 새로운 비즈니스 모델이 그려지기 시작했다. 요청이 생기면 우진 대신 치훈에게 먼저 메신저를 보냈다. 마케팅 부서는 자기네 예산을 들여 치훈에게 노트북과 VPN을 지급했다.
금요일 오후, 마케팅팀에서 "신규 가입자 대상 7% 추가 할인 룰" 요청이 들어왔다. 치훈은 사무실에 없었다. 20분 뒤, 마케팅팀 이현주 대리의 휴대전화가 울렸다.
"다 됐습니다. 확인해 보세요." 치훈이 지급받은 노트북으로 VPN에 접속해 프로시저를 수정한 것이었다. 배포도, 재시작도 없었다.
"아이고, 이 대리. 나 오늘 월차거든요. 월차 내면 좀 쉬게는 해주셔야지~."
이현주가 웃으며 사과하려는데 치훈이 먼저 말을 이었다.
"아, 근데 뭐 무슨 일 있으면 연락 주셔도 돼요~."
수정 소요 시간 15분. 경영진은 이 압도적인 'Time-to-Market'이 선사하는 속도감에 만족했다. 대표는 주간 회의 내내 성치훈의 이름을 입에 올렸다. "이게 진짜 실력이지. 우리 비즈니스 속도에 맞춰주는 이런 유연함이 필요합니다. 급격히 변화하는 비즈니스 세계에서는 성 부장님같은 인재가 팀을 이끌어야 합니다."
성치훈은 특별 성과급과 함께 부장으로 승진했다. 경영진의 박수 속에서 그는 여유롭게 화답했다.
"감사합니다, 대표님. 사실 프로그램의 꽃은 데이터입니다. 자바니 스프링이니 코딩 언어나 프레임워크는 그때그때 유행 따라 바뀝니다. 코볼 시절에도 데이터는 있었고, 파워빌더 때도 있었고, 지금도 있거든요. 데이터는 안 바뀝니다. 비즈니스의 본질이 담겨 있으니까. 요새 AI, AI 하잖아요? 그것도 결국 데이터가 없으면 빈껍데기입니다. 클라우드도 마찬가지예요. 서버가 어디 있든 결국 데이터가 핵심이거든요. 우리 데이터가 다 DB에 있는데, AI 툴 하나 약정 걸어서 우리 데이터 돌리면 그게 빅데이터고 AI고 클라우드 아닙니까. 블록체인도 결국 데이터 체인이에요. 다 데이터입니다. 다들 우리 케이스를 못 봐서 뭐 아키텍처니 객체지향이니 하는 소리들 하는 건데, 우리한테는 우리에 맞는 방식을 써야 해요. 한방 쿼리로 결제랑 정산까지 직접 고쳐서 막힌 혈맥을 시원하게 뚫겠습니다."
마케팅팀과 경영진 쪽에서 박수가 터졌다.
우진은 박수 소리 속에서 움직이지 못했다. 치훈이 내뱉은 단어들—데이터, AI, 빅데이터, 클라우드, 블록체인, 프로시저—은 각각은 진짜였다. 하지만 엄격한 논리적 구조에서 배치되어야 할 단어들이 이름이 갖는 겉표면의 피상적 의미에 묶여 나열되고 있었다. '블록체인'이 등장한 이유는 '체인'이라는 글자가 '데이터'와 어울려 보여서였고, 'AI'와 '빅데이터'가 나란히 놓인 이유는 둘 다 '데이터'라는 글자를 공유하고 있어서였다. 우진에게 그것은 그저 나열된 데이터뿐이었다.
하지만 20분 만의 배포라는 성과 앞에서, 그는 위화감을 입 밖으로 내지 못한 채 침묵을 지켰다.
2-4장: 내성과 관련통
치훈의 집도가 시작된 지 한 달. 마케팅 캠페인의 주기는 하루 단위로 짧아졌다. 깃허브(GitHub)의 자바 프로젝트 리포지토리는 정적에 휩싸였다. 결제 엔진 모듈의 커밋 이력은 3주 전에서 멈춰 있었다. 반면 데이터베이스의 스토어드 프로시저 목록은 매일 오전 수십 개씩 새로 갱신되었다. 비즈니스 로직은 더 이상 컴파일되지 않고, DB 엔진 속에서 즉각적으로 해석되어 실행되었다.
어느 날 오후, 결제 시 쿠폰 유효성 검증에서 오류가 발생했다. 신입 개발자가 당황하며 성치훈에게 다가갔다.
"부장님, 자바 서비스 레이어에서 if문 로직을 확인해보고 있는데, 쿠폰 할인율 계산 부분이 좀 이상한 것 같습니다. 혹시 제가 이클립스 프로젝트에서..."
성치훈이 말을 잘랐다. 목소리가 한 톤 올라가 있었다.
"자바? 자바에서 뭘 봐요? 화면단에서 값 넘겼죠? 그거 바로 DB로 보냈어요? 서비스에서 무슨 if문을 써요, 쓸데없이. 나 노트북에 이클립스 깔려지도 않았어. 어딘데요, 스토어드 프로시저 명이 뭐냐고. 그 맵에 담긴 값 그대로 프로시저에 넘기세요. 내가 거기다 직접 검증 로직 넣을 테니까."
신입은 멍한 표정으로 돌아갔다. 성치훈은 검정 바탕의 SQL 클라이언트 창을 띄우고 수천 줄의 프로시저 코드 사이로 커서를 옮겼다. 자바라는 언어의 타입 시스템도, 객체 지향의 원칙도 그의 세계에서는 단지 개발 속도를 늦추는 거추장스러운 장애물일 뿐이었다. 오직 테이블과 인덱스, 그리고 쿼리의 실행 계획만이 실전에서 승리하는 유일한 해법이자 '진실'이었다.
하지만 우진의 눈에 그 광경은 전혀 다르게 해석되었다. 자바 코드가 박제된 화석처럼 굳어가는 동안, 핵심 로직은 '성치훈'이라는 단 한 사람만 접근 가능한 블랙박스 속으로 빨려 들어가고 있었다. 가이드도, 테스트 코드도 없이 암세포처럼 증식하는 수만 줄의 프로시저 코드. 그것은 언젠가 닥쳐올 거대한 파국을 준비하는, 시스템 전체의 '동반 자살의 의식'처럼 보였다.
식당으로 향하는 복도에서, 아까의 그 신입 개발자가 동기에게 흥분 섞인 목소리로 성치훈의 말투를 흉내 내며 속삭이는 것을 우진은 들었다.
"야, 성 부장님 말씀이 진짜 진리더라. 닭 잡는 데 무슨 소 잡는 칼을 쓰냐고 하시는데 소름 돋았어. 우진 형은 학교에서 자바 아키텍처니 객체지향이니 하는 무거운 소 잡는 칼이나 닦느라 시간 낭비만 한 거야. 부장님은 이클립스도 안 쓰셔. 그냥 SQL 창에서 프로시저 몇 줄로 쓱쓱 고치니까 바로 상황 종료잖아. 이게 진짜 닭 잡는 칼이지. 프로그램을 잘 짜려면 결국 SQL이 본체라는 걸 오늘 확실히 깨달았어. 자바는 그냥 화면이랑 DB 연결해 주는 택배 기사일 뿐이라니까."
우진은 떨렸다. 멀어져 가는 신입의 웃음소리는 파멸을 알리는 전주곡 같았고, 그것은 논리로 설명할 수 없는 기시적 공포였다. 성치훈이 펼쳐놓은 세계는 정교한 설계가 아니라, 서로 어울릴 수 없는 개념들을 ‘데이터’라는 끈적한 유혹으로 옭아매어 함께 침몰시키는 ‘동반 자살의 의식’에 가까웠다. 성치훈이 선사한 그 달콤한 효능감이 시스템의 중추신경을 마비시킬 독약이라는 확신은 들었지만, 정작 무엇이 어떻게 잘못되어 가는지 우진은 단 한 문장도 입 밖으로 내뱉을 수 없었다.
신입들은 복잡한 자바 설계를 고민하는 대신, 화면에서 넘긴 값을 HashMap에 담아 던지는 단순 반복 작업에 빠르게 적응했다. 요청이 들어오면 맵에 담고, 프로시저 이름을 맞춰 던지고, 치훈이 나머지를 처리했다. 그렇게 몇 달이 흘렀다.
블랙 프라이데이가 다가왔다. 누군가 실수로 동맥을 건드렸다. 결제 오류가 터졌고, 신입이 HashMap의 키를 추적하려 했지만 그 키가 어느 프로시저의 몇 번째 줄에서 바뀌는지 찾을 수 없었다. 치훈이 10분 만에 고쳤다. 다음 날 다른 키가 터졌다. 치훈이 또 고쳤다. 일주일 뒤, 신입은 추적을 포기하고 버그 리포트만 올렸다. 경영진은 고객에게 쿠폰을 지급하며 상황을 넘겼다. 언제 터질지 모르는 동맥류를 품은 결제 모듈에 시술을 시도하려는 사람은 아무도 없었다.