‹ 목록으로 그 마법, 버그 있는데요

2화

며칠째 마력 측정을 미루고 있는 사이, 나는 다른 문제에 매달려 있었다. 장부의 백도어를 지운 건 시작에 불과했다. 진짜 문제는 그 다음에 보였다. 지출 항목 하나를 고치자, 다른 계산이 어긋났다. 하인 급여 산정 로직은 원래 인원수에 비례해서 나오는 게 정상인데, 실제로는 고정값에 가까웠다. 인원이 늘어도 줄어도 총액이 거의 그대로였다. 이상했다. 전생 식으로 말하면, 하드코딩된 값이 변수 취급을 받고 있는 상황. 처음엔 단순 오타인 줄 알았다. 숫자 하나가 잘못 박힌 정도. 그런데 로직을 세 번 되짚어 봐도 결론은 같았다. 누군가 일부러 그렇게 짜놓았거나, 아니면 애초에 이 시스템을 만든 사람이 인원 변수를 아예 죽여놓고 상수로 박아버린 거였다. 후자라면 최악이다. 설계 단계에서부터 썩어 있었다는 뜻이니까. 더 파고들자 곡물 상단 세 곳과의 계약이 서로 얽혀 있다는 걸 알았다. A 상단과의 계약이 갱신되면 B 상단 계약도 자동으로 연동돼서 갱신되는데, 그 연동 로직에 조건이 하나 빠져 있었다. 계약 종료 시점을 체크하지 않는 거였다. 그러니까 이미 끝난 계약이 계속 살아서 돈을 빨아먹고 있었다. 죽은 계약이 살아 움직이며 돈을 갈취한다니, 이건 거의 언데드 아닌가. 나는 속으로 실없는 비유를 던져놓고도 웃지 못했다. 실제로 이 저택에서 벌어지고 있는 일이 그거였다. 죽었어야 할 지출이 관 뚜껑을 열고 나와서 매달 곡물 값을 뜯어가고 있었다. 망했다. 이건 조건문 하나 지운다고 끝날 문제가 아니었다. 나는 촛불 아래서 며칠 밤을 그렇게 보냈다. 코드를 읽고, 어디가 잘못됐는지 표시하고, 그중 몇 개만 골라서 지우는 시늉을 했다. 성공률은 여전히 낮았다. 열 번 시도하면 한 번쯤 실제로 바뀌었다. 그것도 언제 바뀔지는 예측할 수 없었다. 손끝에서 뭔가 걸린다는 감각이 있을 때도 있고, 아무 감각 없이 그냥 넘어갈 때도 있었다. 확률 게임을 하고 있는 기분이었다. 다만 이 게임의 패널티는 게임 오버가 아니라 가문의 파산이었다. 이 방식으로는 근본적인 해결이 안 된다. 그건 진작에 알고 있었다. --- 어느 날 밤, 나는 회계석 앞에 앉아서 결심했다. 지금까지는 눈에 띄는 백도어나 명백한 오류만 건드렸다. 큰 구조는 그대로 두고 작은 버그만 고치는, 말 그대로 '핫픽스'였다. 하지만 이 저택의 재무 시스템 전체가 애초에 잘못 설계됐다는 걸 알게 된 이상, 이제는 핫픽스로 버틸 수 있는 단계가 아니었다. 전체 구조를 다시 짜야 한다. 문제는 위험이었다. 지금까지는 눈에 띄지 않는 작은 수정이라 어머니도 크게 의심하지 않았다. 하지만 시스템 전체를 손대면, 변화가 훨씬 크고 빠르게 드러난다. 누군가는 눈치챌 거다. 왜 갑자기 지출 패턴이 완전히 바뀌었는지, 왜 계약들이 재정비되는지. 그리고 만약 누군가—신전 쪽 사람이든, 다른 귀족이든—이 변화를 이상하게 여기고 조사를 시작한다면, 나는 그 조사의 중심에 서게 될 거다. 마력 측정도 안 받은 삼녀. 그게 나였다. 생각해보면 우스운 조건이었다. 마력도 없고, 신분도 낮고, 나이도 어린 아이가 가문 재정을 뒤엎어놓은 범인으로 지목될 가능성. 소설로 쓰면 다들 말도 안 된다고 할 거다. 그런데 현실은 그 말도 안 되는 쪽으로 흘러가고 있었다. 그럼에도 나는 결심했다. 이유는 단순했다. 이대로 두면 설가는 몇 년 안에 완전히 망한다. 코드를 읽을 줄 아는 사람으로서, 눈에 보이는 버그를 그대로 방치하는 건—참을 수 없었다. 이건 직업병이다. 전생에도 그랬다. 퇴근 시간이 지나도 미해결 티켓이 눈에 밟혀서 집에 못 가던 그 습관, 그게 몸이 바뀌어도 남아 있었다. 전생에서 팀장이 그랬다. "일단 넘어가, 나중에 고치자." 나는 그 말을 들을 때마다 속으로 이를 갈았다. 나중은 안 온다. 나중은 항상 사고가 터진 다음에야 온다. 그리고 지금, 나는 팀장 없이 혼자 그 나중을 앞당기기로 한 거였다. 괜찮다. 위험을 감수할 만한 가치가 있다. --- 나는 다음 사흘 동안 저택의 재무 구조를 전부 그려봤다. 종이에 쓴 게 아니라, 머릿속으로. 상단 계약, 하인 급여, 세금 납부 주기, 저택 유지비, 그리고 그 모든 게 회계석이라는 하나의 시스템에 어떻게 얽혀 있는지. 전생의 표현으로 하면 아키텍처 재설계였다. 밤마다 눈을 감고 그 구조를 그려보다가, 어느 순간 나는 웃음이 나왔다. 열세 살짜리가 명문가의 재무 아키텍처를 리팩토링하겠다고 결심하는 게, 생각해보면 우스운 일이었다. 그래도 웃기지만 해야 할 일이었다. 낮에는 평범한 삼녀 노릇을 했다. 자수를 놓는 척하고, 언니들 옆에서 차를 마시는 척하고, 가정교사 앞에서 얌전히 앉아 있는 척했다. 머릿속으로는 계속 다이어그램을 그리고 있으면서도. 겉으로는 태연하게, 속으로는 계속 코드를 굴리는 이중생활이었다. 실행은 회계석을 통해서 해야 했다. 회계석은 저택 전체 재무 데이터가 모이는 유일한 지점이었다. 거기서 코드를 고치면, 확률이 낮아도, 언젠가는 반영이 된다. 나는 매일 밤 조금씩, 우선순위를 정해서 순서대로 손을 댔다. 첫째, 죽은 계약을 끊는다. 둘째, 하드코딩된 급여 로직을 정상화한다. 셋째, 검증 백도어를 완전히 제거한다. 순서를 정한 이유가 있었다. 죽은 계약을 먼저 끊어야 다른 계산이 정상적으로 작동한다. 급여 로직을 먼저 고치면 다른 지출과 충돌이 생긴다. 순서가 틀리면 전체가 더 엉망이 될 수도 있었다. 마이그레이션 스크립트를 짤 때랑 똑같았다. 한 번은 순서를 무시하고 급한 마음에 급여 로직부터 건드렸다가, 다음날 아침 지출 총액이 마이너스로 찍혀 있는 걸 보고 심장이 내려앉았다. 다행히 어머니가 그 장부를 보기 전에 다시 회계석 앞에 앉아서 되돌렸다. 그날 이후로는 절대 순서를 어기지 않았다. 실수 한 번의 값을 몸으로 배운 셈이었다. --- 일주일쯤 지나자 변화가 눈에 보이기 시작했다. 곡물 지출이 눈에 띄게 줄었고, 하인들 급여 지급일에 실수로 두 번 지급되던 항목도 사라졌다. 세금 계산은 아직 손대지 못했지만, 적어도 죽은 계약 두 개는 확실히 끊어놓은 상태였다. 어머니가 장부를 확인하며 놀란 표정을 지었다. "이상하네. 곡물 지출이 절반으로 줄었어." 나는 찻잔을 내려놓으며 최대한 평온한 얼굴을 만들었다. 속으로는 심장이 두 배로 뛰고 있었지만. "상단 쪽에서 계약을 새로 정리했다던데요." 나는 태연하게 대답했다. 거짓말이 점점 자연스러워지고 있었다. 이것도 문제였다. "정리를? 누가 그런 얘기를 했지?" "집사가 그러던데요. 저도 자세히는 몰라요." 어머니는 장부를 몇 번이나 다시 보더니, 결국 아무 말도 하지 않았다. 그저 나를 쳐다보는 시간이 조금 길어졌을 뿐이다. 그 시선이 등에 꽂히는 느낌이 오래도록 남았다. 의심이라기보다는, 뭔가 이상한 걸 봤는데 그게 뭔지 정확히 짚어내지 못하는 사람의 표정이었다. 그날 밤, 나는 다시 회계석 앞에 앉았다. 아직 손대야 할 부분이 많았다. 급여 로직은 절반쯤 고쳤고, 세금 계산 부분은 아직 건드리지 못했다. 시간이 필요했다. 촛불 하나만 켜놓고, 나는 회계석 표면에 손을 올렸다. 차가운 감각이 손끝에서부터 올라왔다. 익숙한 감각이었다. 이 감각이 있을 때는 코드가 눈에 보인다. 없을 때는 그냥 돌덩이다. 세금 계산 로직은 예상보다 더 복잡하게 엉켜 있었다. 납부 주기가 세 갈래로 나뉘어 있는데, 그중 하나는 이미 존재하지 않는 옛 세율 기준으로 돌아가고 있었다. 몇 년 전에 개정됐어야 할 값이 그대로 남아 있는 거였다. 레거시 코드의 전형적인 문제. 아무도 건드리기 무서워서 그냥 놔둔 흔적이 여기저기 남아 있었다. 나는 그 값을 표시해두고, 다음 수정 목록에 추가했다. 오늘 밤 안에 끝낼 수 있는 양은 아니었다. 끼익. 서재 문이 열리는 소리에 나는 완전히 얼어붙었다. 이번엔 진짜였다. 촛불을 급히 끄고 회계석 뒤로 몸을 숙였다. 발소리가 다가왔다. 무겁지 않은, 가벼운 걸음. 하인 발소리와는 달랐다. 심장이 빠르게 뛰었다. 어머니라면 걸음이 저렇게 가볍지 않다. 아버지라면 더 무겁다. 하인이라면 이 시간에 서재에 들어올 이유가 없다. 그럼 남는 건 하나뿐이었다. 이 저택 사람이 아닌 누군가. "거기 누구 있어?" 낯선 목소리였다. 여자아이 목소리, 그런데 억양이 이상했다. 이 저택 사람이 아니었다. 나는 숨을 멈췄다. 심장이 뛰는 소리가 방 안을 채우는 것 같았다. 회계석 모서리에 몸을 딱 붙이고, 최대한 숨소리를 죽였다. 몸을 낮추면서도 머릿속은 빠르게 돌아갔다. 도망칠 문은 하나뿐인데, 저 목소리의 주인이 그 문 근처에 서 있었다. 나갈 길이 없었다. 누군가 문을 완전히 열어젖혔다. 촛불 없는 서재 안으로 달빛이 쏟아져 들어왔고, 그 빛 사이로 낯선 실루엣이 서 있었다. 머리카락이 짧았고, 옷차림은 이 저택 하인들의 제복과도, 귀족가 여식들의 드레스와도 달랐다. 실용적이면서도 낯선 재질. 어깨선이 이상하게 각져 있었다. 이 세계 사람의 복식이 아니었다. 망했다. 이 시간에 우리 집 서재에, 내가 모르는 사람이 서 있었다.
♡ 좋아요 0 · 로그인 후 좋아요/별점/댓글 참여 가능

댓글 0

  • 첫 댓글을 남겨보세요.