코드로 세상을 지배하는 마법사

5화: 마력 효율 100%
연구실 문이 닫히자마자 마력 저장고의 수위가 눈에 띄게 내려갔다.
레온이 든 등불이 푸르게 흔들렸다. 바닥의 마력석 열두 개가 동시에 빛을 토해 내고 있었다. 누군가 거대한 빨대를 꽂아 놓은 듯 저장고의 힘이 한 방향으로 빨려 들어갔다.
엘리언은 발치로 시선을 내렸다.
그림자가 살아 있는 것처럼 부풀어 있었다. 검은 표면 위로 붉은 눈 두 개가 떠올랐다.
“주인님. 이곳의 마력은 질이 나쁘지만 양은 충분합니다.”
레온이 등불을 놓칠 뻔했다.
“저 마수가 말을…….”
“사역마니까.”
엘리언은 손가락을 튕겨 그림자 위에 봉인선을 그었다. 가고일의 시선이 저장고에서 떨어졌고 마력 흐름도 끊겼다.
“허가하지 않은 자원 접근은 금지한다. 네 역할은 감지와 호위다.”
가고일은 으르렁거리면서도 그림자 안으로 가라앉았다.
레온은 한참 뒤에야 숨을 내쉬었다.
“마력은 양이 아니라 흐름으로 관리해야 한다는 말씀이십니까?”
“그래. 그리고 지금 이 저장고는 흐름이 지나치게 길다.”
엘리언이 손을 올리자 디버그 모드가 열렸다. 마력석은 긴 문장으로 갈라졌고 그 아래 수십 줄의 초록색 글자가 겹쳐 나타났다.
reserve.load();
// 위대한 선조들의 뜻을 기리며 안전한 마법을 유지한다.
// 혹시 모를 역류에 대비한 임시 보정식.
// 절대로 삭제하지 말 것.
초록색 문장은 실행되지 않는 주석이었다. 그런데 마력선은 끊기지 않았다. 저장고는 주문을 읽을 때마다 주석까지 훑고 있었다.
“대마법사님. 저 글자들이 마력입니까?”
“글자가 아니라 낭비다.”
주석 한 줄 옆에 작은 숫자가 붙어 있었다.
parse_cost: 0.03 mana
한 줄의 소모량은 작았다. 하지만 수백 년 동안 쌓인 주석은 연구실 전체를 덮을 만큼 많았다. 주문을 실행할 때마다 의미 없는 기록을 읽느라 마력이 새고 있었다.
주석 아래에는 회색으로 흐려진 분기문도 있었다.
if (old_barrier == true) { reinforce(); }
이미 다른 결계 루틴으로 교체된 문장이었다. 연결선은 끊겼지만 구문은 남아 있었다.
dead_reference: true
“죽은 코드다.”
“죽었다면 왜 남아 있습니까?”
“실행되지는 않지만 읽히고 있으니까.”
엘리언은 가장 작은 도식을 골랐다. 탁자 위에 1서클 조명진을 펼쳤다.
“레온. 삭제 전후의 마력 소모량과 유지 시간을 기록해라.”
그는 실행되지 않는 주석 네 줄만 골라 끊었다. 마지막 줄을 건드리는 순간 조명진이 크게 흔들렸다.
[Warning: unstable edit]
엘리언은 손을 떼지 않고 흔들린 선을 따라갔다. 주석 안에는 목표의 기본값을 불러오는 참조가 숨어 있었다.
// anchor is fixed to caster hand
색상은 초록이었지만 단순한 설명이 아니었다. 목표 고정에 필요한 구문이었다.
“색만 보고 지우면 안 되는군.”
엘리언은 끊어 낸 선을 다시 연결했다. 손등의 화상이 타올랐지만 조명진은 안정을 되찾았다.
“기능을 확인하고 삭제한다. 이름이 주석이어도 참조가 남아 있으면 건드리지 않는다.”
그는 실제로 실행되지 않는 세 줄만 제거했다. 조명구를 켜자 작은 빛이 탁자 위에 떠올랐다.
“소모량이 1.02에서 0.91로 내려갔습니다.”
“주문을 강하게 만든 게 아니다. 읽을 문장을 줄인 거다.”
엘리언은 남은 도식을 바라봤다. 조명진의 개선은 작았다. 하지만 5서클 화염구의 반복 실행에는 수많은 주석과 중복 확인이 붙어 있었다.
“북쪽 실험장으로 간다.”
해가 지기 전 실험장에 도착했다. 바위벽에는 불꽃 자국이 남아 있었고 깨진 결계석은 아직 교체되지 않았다. 레온은 남은 여덟 개의 결계석을 살폈다.
“마력 저장량은 일곱 개 반입니다. 하나는 균열이 낫지 않았습니다.”
“충분하다.”
엘리언은 바닥에 반복 도식을 펼쳤다.
for (i = 0; i < 100; i++) {
cast(fireball, ravine_wall);
}
도식 바깥은 초록색 주석으로 덮여 있었다.
// 위대한 화염의 힘을 안전하게 사용하기 위한 절차.
// 목표가 사라졌을 때를 대비해 주변 표적을 검색한다.
// 실패하면 처음부터 다시 시도한다.
// 이전 개발자의 메모: 이 부분은 반드시 보존할 것.
첫 번째 줄은 설명이었다. 두 번째 줄은 이미 하나로 고정한 목표 때문에 필요 없었다. 세 번째 줄은 실패한 주문을 다시 실행하는 위험한 루틴이었다.
네 번째 줄만 달랐다. 짙은 초록색 아래로 가느다란 붉은 선이 이어졌다.
그림자 속에서 가고일이 낮게 울었다.
“주인님. 저 선에서 낯선 냄새가 납니다. 제 몸 안쪽에 남은 것과 같습니다.”
엘리언은 사역마의 상태창을 떠올렸다.
Origin Node: Imperial_Network_Sector_04
그 주소의 의미는 아직 알지 못했다. 하지만 주석의 붉은 선이 같은 방향으로 뻗는 것은 확인할 수 있었다.
“네 번째 줄은 남긴다.”
엘리언은 두 번째 줄과 세 번째 줄을 끊었다. 마력선이 짧아지며 화염구 호출부의 색이 선명해졌다. 첫 번째 주석도 삭제했다.
그때 도식 중심에서 붉은 경고가 튀었다.
[Warning: reference count changed]
목표 검색 루틴을 지웠는데 외곽의 낡은 표적 목록은 남아 있었다. 배열의 내용은 비어 있었지만 매 호출마다 존재 여부를 확인하고 있었다.
엘리언은 참조선을 따라간 뒤에야 연결을 끊었다. 경고가 사라졌다.
“이것도 죽은 코드입니다.”
레온이 기록석을 세웠다.
“시작하셔도 됩니까?”
“하나 더 있다.”
화염구 호출문 안쪽에는 고정된 바위벽을 매번 확인하는 구문이 있었다.
check(target);
엘리언은 바위벽의 고정 룬에 손을 댔다. 은가루와 마력선이 하나의 표식으로 겹쳐졌다.
target.locked = true;
“목표를 먼저 잠근다. 그러면 매번 확인할 필요가 없다.”
그는 확인 구문을 삭제했다. 손등의 화상이 다시 벌어졌지만 이번 통증은 짧았다. 흐름이 줄어든 만큼 수정에 밀려오는 반발도 작았다.
“결계를 작동시켜라.”
레온이 손잡이를 돌렸다.
엘리언이 손가락을 내리자 화염구가 날아갔다. 한 발 두 발 세 발. 불꽃은 같은 궤도로 바위벽을 때렸고 반복문은 숫자를 올리며 다음 호출로 넘어갔다.
“열둘! 열셋!”
레온이 기록석에 숫자를 새겼다.
마력 저장고의 수위는 내려갔지만 이전처럼 빠르지 않았다. 스무 발을 넘겼는데도 결계석의 빛은 푸르게 유지됐다.
“스물다섯. 소모량이 예상보다 낮습니다.”
“계속 기록해라.”
화염구는 바위벽에 붉은 자국을 남겼다. 한 번의 호출로 백 발을 쏘는 위력은 그대로였다. 달라진 것은 마력이 지나가는 길이었다.
일흔 발을 넘겼을 때 가고일이 실험장 뒤편을 향해 고개를 돌렸다.
“바깥에서 선이 다가옵니다.”
가고일이 발톱으로 허공을 긁자 검은 선 하나가 나타났다. 선의 끝은 관측탑 아래쪽으로 향했다.
Imperial_Network_Sector_04
레온은 그 문자를 보지 못한 채 숫자를 세었다.
“여든여덟!”
붉은 선이 실험장의 목표 고리에 닿았다. 화염구 세 발의 궤도가 흔들렸다. 엘리언은 호출을 끊는 대신 목표 잠금값을 유지했다.
target.locked = true;
고정된 바위벽이 세 발의 불꽃을 받아 냈다. 결계는 무너지지 않았다.
“아흔아홉!”
마지막 화염구가 날아갔다. 바위벽 한가운데가 붉게 갈라졌다.
i = 100
반복문이 멈췄다.
레온은 기록석을 내려다봤다. 마력 소모량은 이전 기록의 정확한 100분의 1이었다.
“정말 백 분의 일입니다.”
엘리언은 숨을 고르며 도식을 바라봤다. 같은 화염구였고 같은 횟수였다. 달라진 것은 실행되지 않는 문장들을 걷어 낸 것뿐이었다.
“효율은 위력보다 먼저다.”
하지만 실험은 끝나지 않았다. 삭제하지 않은 네 번째 주석이 검은 문자로 갈라지며 안쪽의 기록을 드러냈다.
route -> Imperial_Network_Sector_04
source: unknown
permission: denied
엘리언의 눈빛이 차갑게 가라앉았다.
누군가 주문의 주석 속에 외부 경로를 숨겨 놓았다. 오래된 개발자의 기록인지 지금도 작동하는 통로인지는 알 수 없었다.
레온이 물었다.
“이번에도 지우실 겁니까?”
엘리언은 붉은 경로에 손을 댔다. 손끝에 통증이 번졌지만 삭제 명령은 입력하지 않았다.
“아니. 이건 낭비가 아니라 단서다.”
그는 경로를 기록지에 옮겨 적고 다시 봉인했다. 실험장 바깥의 맥박은 관측탑 아래에서 희미하게 이어졌다.
“레온.”
“예.”
“내일 새벽까지 제국령 관측 기록을 전부 가져와라.”
“제국령 말입니까?”
“탑 아래에서 낯선 선이 들어왔다. 시작점을 확인해야 한다.”
엘리언은 어두운 관측탑을 바라봤다.
마법진은 가벼워졌다. 그 안에 숨은 세계의 경로는 오히려 선명해졌다.
“다음에는 그 선이 어디서 오는지 추적한다.”