/// LAB · NOTE 03

다 만들고 나서 걷어냈다

설계 문서를 쓰고, 세 단계로 나눠 구현하고, 시험 마흔여덟 개를 통과시켰다. 그리고 직접 해 보고 되돌렸다.

2026-08-22 · 천하 작업 기록

턴제 전략 게임에 실시간 전투를 넣어 보려 했다. 턴을 넘길 때마다 전투가 숫자로만 결판나는 게 아쉬웠고, 시간이 흐르는 동안 명령을 내리고 필요하면 멈추는 방식이 더 재미있을 것 같았다.

결과부터 말하면 다 만들고 걷어냈다. 그 과정에서 배운 것이 기능 자체보다 값졌다.

제대로 시작했다

되돌아보면 시작은 흠잡을 데가 없었다. 설계 문서를 먼저 썼고, 그 문서의 첫 절은 내가 한 요구를 축약하지 않고 번호 붙여 옮긴 것이었다. 그 아래에 "한 문장으로:" 요약을 붙였다. 요구와 해석을 나란히 둔 것이다.

그다음이 핵심 원칙 여섯 개. 그중 하나가 나중에 이 이야기의 결말을 좌우한다 — 뒤에서 다시 나온다.

구현은 세 단계로 쪼갰고, 문서에 진행 표를 두어 단계마다 이렇게 적었다.

M1  …  적용 (2026-08-21 · 시험 test_policy.py 16개)
M2  …  적용 (…)
M3  …  적용 (…)

단계마다 시험 파일 이름과 개수를 함께 적는다. "됐다"가 아니라 "무엇으로 확인했다"를 적는 것이다. 세 단계를 합쳐 시험 마흔여덟 개가 붙었고 전부 통과했다.

그런데 해 보니

데이터 처리가 많아서 그런지 느리고 조작이 잘 안되고 하는 문제가 있어 실시간이 우리 시스템에 맞는지 다시 한번 고민이 필요할것 같네 — 설계 문서의 철회 절에 남은 원문

시험은 다 통과했지만 게임이 재미없어졌다. 이건 시험이 잡을 수 있는 종류가 아니다. 시험은 "명령이 제 시각에 처리되는가"를 묻고, 나는 "이거 답답한데"를 느낀다. 둘은 다른 층에 있다.

원인은 분명했다. 이 게임의 속은 턴 단위로 한 번에 계산하는 엔진이다. 그 위에 연속된 시간처럼 보이는 껍데기를 씌운 것이라, 부대와 도시가 많아질수록 껍데기를 유지하는 값이 커졌다.

문서에 적은 결론

"연속 시간의 환상을 씌우는 비용이 재미보다 크다. 환상을 걷고 정직한 턴으로 돌아간다."

지우지 않고, 개정으로 남겼다

여기서 한 선택이 이 글의 요점이다. 설계 문서를 지우지 않았다. 대신 맨 뒤에 "개정 — 턴제 회귀"라는 절을 새로 열었다.

그 절에는 세 가지가 들어갔다.

왜 이렇게까지 하나. 몇 달 뒤에 같은 생각을 또 한다. "실시간으로 하면 재미있지 않을까?" 그때 문서에 "해 봤고, 이런 이유로 걷었다"가 없으면 처음부터 다시 만든다. 나도 그렇고, AI는 더 그렇다 — 막힌 길이 적혀 있지 않으면 가장 그럴듯한 그 길을 다시 제안한다.

깔끔하게 걷을 수 있었던 이유

되돌리는 데 며칠이 걸리지 않았다. 앞에서 미뤄 둔 핵심 원칙 하나 때문이다.

설정이 비어 있으면 원래 동작으로 돌아간다.

새 기능을 처음부터 이렇게 만들었다. 실시간 설정을 아무것도 켜지 않으면 기존 턴제 경로가 그대로 돈다. 새 갈래를 덧붙이기만 하고 기존 갈래를 고치지 않은 것이다.

그래서 걷어낼 때 기존 코드를 되돌릴 일이 없었다. 끄면 원래대로였으니까.

더 재미있는 일도 있었다. 나중에 관전 기능을 붙일 때 이 성질이 값을 했다. 착수 전에 영향 분석을 해 보니 결론이 이랬다 —

분석 결과

한 줄도 새로 쓰지 않는다. 관전은 "모든 설정이 비어 있는 상태"와 똑같아진다.

이미 있는 구조가 그 성질을 갖고 있었기 때문이다. 분석의 가장 좋은 결과는 안 만들어도 된다는 답이다.


AI와 일하면 버리는 값이 병목이 된다

예전에는 만드는 것이 비쌌다. 그래서 신중하게 고르고, 고른 다음에는 웬만하면 끝까지 갔다. 절반쯤 만든 것을 버리는 건 큰 손실이었다.

AI와 일하면 그 균형이 뒤집힌다. 설계 문서를 쓰고 세 단계로 구현하고 시험 마흔여덟 개를 붙이는 일이 며칠이면 된다. 만드는 값이 싸진 것이다.

그러면 병목이 옮겨 온다. 버리는 값으로.

만들기 쉬우니 더 많이 시도하게 되고, 시도가 많으면 버릴 것도 많아진다. 그런데 버리는 게 어려우면 — 기존 코드를 뜯어 고쳐 놓았거나, 왜 만들었는지가 안 적혀 있거나, 어디까지 퍼졌는지 모르면 — 버리지 못해서 안고 간다. 그게 쌓이면 손을 못 대는 코드가 된다.

그래서

새 기능을 시작할 때 "이걸 걷어낸다면 어떻게 걷나"를 먼저 정한다. 끄면 원래대로 돌아가게 만들고, 왜 만들었는지를 적어 두고, 걷어냈으면 걷어낸 이유까지 남긴다.

실시간 전투는 지금 게임에 없다. 대신 그 시도에서 나온 것 몇 가지는 남아 있고, "왜 없는지"가 문서에 적혀 있다. 마흔여덟 개의 시험은 지워졌지만 판단 하나가 남았다. 나쁘지 않은 거래였다고 생각한다.

← 글 목록 ← 이전 · 문서가 아니라 대상을 재라 다음 · 내 말을 그대로 적어 둔다 →