게임 개발을 하다 보면 수식 파싱이나 CSV 파일 임포트 등 다양한 도구가 필요합니다. 과거에는 검증된 라이브러리를 찾아 적용하는 것이 일반적이었지만, 요즘은 제 니즈에 딱 맞는 코드를 직접 작성하는 경우가 많아졌습니다.
핵심은 다른 사람이 작성한 시스템을 이해하고 확장하는 데 드는 비용이, 처음부터 새 코드를 작성하는 것보다 훨씬 크다는 점입니다. 요구 사항이 명확해지면 LLM은 이러한 니치 툴(niche tool)을 훌륭하게 만들어줍니다. 또한, 작성된 코드에 대한 설명까지 요청할 수 있기 때문에, 단순히 라이브러리를 사용하는 것보다 해당 기술을 더 깊이 이해할 수 있게 되죠.
아래는 제가 경험한 몇 가지 사례입니다.
1. 수식 파싱하기
예를 들어, 10 * 1.2^(max(level - 1, 0))
와 같은 수식을 파싱하여 level
이라는 파라미터를 받아 실행할 람다 함수로 만드는 기능이 필요했습니다. ChatGPT를 통해 DynamicExpresso나 Roslyn과 같은 도구를 알게 되었지만, 범용 도구들이어서 제 용도에 완벽하게 맞지 않았습니다.
결국, 아래와 같은 프롬프트를 사용해 초안을 도출하고, 몇 차례의 이터레이션을 거쳐 원하는 기능을 추가하여 만족할 만한 결과를 얻을 수 있었습니다.
C#에서 다음과 같은 수식을 파싱하고,
level
이라는 파라미터를 받아 실행할 수 있는 Lambda를 만드는 함수를 작성해줘.min(1, 2) + 10 * 1.04^level - 5
입력으로는 어떠한 유효한 수식이라도 올 수 있어. 우선은 기본적인 사칙 연산, min/max, 그리고 거듭제곱 연산만 처리할 수 있게 해줘.
별도의 라이브러리는 사용하지 말고, C#의 내장 기능만 사용해서 작성해.
2. CSV -> ScriptableObject
게임에서 사용하는 데이터 양이 많아지면서 스프레드시트로 관리할 필요를 느꼈습니다. 관련 도구를 찾아보니 QuickSheet와 같은 도구가 있었지만, 복잡한 파싱에는 한계가 있었습니다.
제가 만든 게임 데이터 시트에서는 한 셀에 여러 줄의 데이터가 들어 있는 경우, 각 행별로 파싱할 필요가 있었고, 또 게임을 개발하는 과정에서 구조를 종종 바꾸게 될 가능성이 높다보니 원하는 기능을 직접 구현하는 게 좋겠다는 결론이 나왔습니다.
마찬가지로 프롬프트를 작성하고 피드백을 반복하는 이터레이션 과정을 통해, 최종적으로 원하는 기능을 갖춘 결과물을 얻을 수 있었습니다.
1st Iteration: Unity에서 csv 형태의 데이터를 읽어서 각 행을 Scriptable Object로 만드는 기능이 필요해.
2nd Iteration: 코드를 좀 더 구체적으로 작성해볼 수 있을까? 그리고 각 부분에 대한 설명을 별도로 해줘.
3rd Iteration: 내 데이터에서는 각 셀이 쉼표나 줄글을 포함할 수 있어. 이런 경우 데이터가 예시로 아래와 같은 데이터에 대해서도 CSV 파싱이 올바르게 작동하도록 수정할 수 있을까?
CORE #2,core_2,1,"5k DP, 300 Stability, 2 ""heuristics""","PP + 40, DP Limit + 990000, Stability Limit +500",Compiler Optimization >= 3,"Garbage Collection >= 1, Static Analysis >= 1, Memory Compression >= 3",,
- 쉼표나 새로운 줄이 포함되어 있는 경우, 해당 셀은 쌍따옴표(")로 감싸짐.
- 쌍따옴표로 감싸진 셀에 " 텍스트가 존재하는 경우, " 두 개를 사용해 escape.
최근 이 글을 읽으면서 상당 부분 공감을 했고 또한 개인적 사례들을 여럿 경험하면서 앞으로 ‘특정 작업을 잘하는 기깔나는 소프트웨어’의 경쟁 우위를 크게 낮출 것이라는 생각이 들었습니다. 마치 스마트폰이 등장하면서 고성능 카메라나 폴라로이드 카메라 등 특수한 목적으로 사용되는 카메라를 제외하고는 자취를 감춘 것과 비슷한 현상입니다.
아주 뛰어나거나, 규모가 커서 복잡하거나, 목적 자체가 본질적이거나, 혹은 높은 품질을 가지고 있지 않은 라이브러리들은 '경쟁 우위'를 잃고 사라질 가능성이 있습니다.
작성된 코드가 문제가 될 가능성이 있기 때문에 현재는 작성된 코드를 이해하고 수정하는 데 시간을 어느 정도 할애하지만, LLM과 에이전트의 빠른 발전으로 인해 언젠가는 깊이 배울 필요가 없게 될 수도 있습니다.
코드를 작성하는 것을 즐기는 소프트웨어 개발자로서는 안타까운 일이지만, 게임 개발에서는 “어떻게 만드는지”보다는 “재미있는 게임”을 만드는 것이 더욱 중요하지요. 뭐 비단 게임 개발뿐만 아니라 제품을 만드는 행위가 다 그럴테지만요.
How보다는 Why와 What에 집중해야겠다는 생각이 강하게 들었고, 최근에는 좋은 결과물을 뽑기 위해서 좋은 프롬프트를 작성하는 것에 대한 고민을 많이 하고 있습니다. 과정에서 생각을 논리정연하게 정리하고, 그것을 글로 풀어내는 능력이 정말 중요하다고 느꼈어요. 책을 읽거나 이런 글을 쓰는 것이 분명 큰 도움이 될 것이라고 믿습니다.