24b0d121e09c28a8699fe8b115ef046f574a9d97aa


이 글은 개인의 판단이며, 정확한 판단이 아닐 수 있으니 내용을 참고하여 판단하는건 개인의 몫임. 비판이나 옹호하거나 하는 등의 목적이 아님.


들어가기 전 요약

1. AI 완전 의존 코딩은 아닐 확률이 높다.(클래스나 매서드에 사용된 틀린 영어 단어, Move1, Move2 등의 간결한 네이밍, 고유한 습관적 네이밍(잘 사용되지 않는))

2. Unity 6를 기반으로 하고 있음에도 알고리즘이 정교한 수학적 모델링이나 머신러닝 라이브러리를 활용하지 않고, if-else나 goto를 이용한 노가다로 구현함

3. 1인 개발은 맞는 것 같다. (TheBackend, Photon Engine 사용 및 TMPro.Examples 같은 예제가 그대로 들어간채 배포되어있음)

4. 멀티와 서버와 상호 소통하는 게임임에도 보안이나 방어, 난독화가 사실상 전무함

5. 2012년생이 게임을 개발했단 것 자체는 대단한 성취라 생각하나, 내부 로직의 퀄리티와 하이레벨 프레임워크에 완벽하게 의존한것을 보아 "IQ204의 천재가 만든 게임" 이라고 보면 아쉬운 점이 없진 않음. 그러나 개발중인 사전 체험판이라니 어느정도 이는 감안.





-- 본론

전체적인 분석은 ll2cppDumper와 Dnspy, ghidra를 이용함. 


1. 구조 및 설계

내부 구조는 전형적인 수평적 확장의 모습을 보임, OOP의 핵심인 추상화나 인터페이스를 통한 유연한 설계보다, 기능이 필요할때마다 기존 클래스를 복제후 수정하여 독립적으로 운영하는 방식으로 만들어짐


특히 클래스명이 Block1, Block2 ~ 와 Mode1, 2, 3 ~ 과 같이 클래스를 확장해 장기적 유지보수성보단 지금 당장의 기능 구현과 빠른 배포에 우선순위를 둔것으로 보임. 이는 팀 단위의 협업 결과물일 가능성은 절대적으로 낮으며, 1인 개발의 흔적으로 보임.


2. 코드 내 인적 지문

바이너리 전반에 고유한 명명 패턴과 반복적 오타, 영어 실력 부족은 개발자의 성향이 그대로 보임.

고유한 언어 습관으로 ~Super, ~Support, ~Puller 같은 독특한 접미사를 붙이는게 보임


Manger, Loob, Inturrupted, overrided등의 오타나 영어 실력 이슈가 그대로 남아 클래스의 이름으로 남아있음, 코드 리뷰 과정이 부재, 부족했거나 혹은 로직의 완결성을 우선시하는 1인 개발의 증거로 볼 수 있을듯 함.


3. 로직 구현

핵심 로직을 전체적으로 보았을때 하나같이 패턴은 “매우많은 노가다”와 “낮은 추상화” 임

요약에서도 말했듯 Unity 6를 사용함에도 내부 로직이 전부 방대한양의 if-else 조건문과 goto를 이용해 구현되어, 전부 수동적인 데이터 검증과 조건부 실행에 의존하고 있음. 최신 엔진을 사용함에도 오래된 로직 구현 방식을 사용하는걸 보아 인터넷에서 영문 자료나 최신 자료를 직접 찾아보았기보단, 한국어 자료나 오래된 코딩 자료, 블로그 등을 참고한것으로 보임.


4. 게임으로서의 평

단 한문장으로 정리 가능하다. “Done is better than perfect” 를 완벽하게 지킨 게임. 기능적 완성은 완료되어 유저가 플레이하는것에는 지장이 없는 상태임

그러나, 구조적 완성은 “Done is better than perfect” 에서 말하는 Done보다 낮은듯함, 아까 언급한 Block1, 2, 3식의 클래스 나열은 확장성을 사실상 포기한것으로 보임.


보안은 사실상 전무함, 리버스 엔지니어링이나 치팅이란게 존재하지 않는다 생각한 사람이 만들법한 구조임. BlockBlindTank, multiplierAttackNorm 등의 이름을 그대로 남겨두었으며, 클라이언트 의존성이 매우 과다함. 핵심 물리 연산이나 데미지 계산 로직 등 중요한 부분들이 전부 클라이언트에 의존하며, 서버는 클라이언트가 쏴준 결과값을 받아적는 구조로 추정됨.

리버싱을 처음 하는 사람조차 뜯어서 치팅을 할 수 있을법한, AssaultCube 보다 더욱 더 쉬울듯함.


인디 게임 시점에서의 종합적인 평가로는, 긍정적으로 보았을때 2012년생이 혼자 이정도 결과물을 냈다면 실행력과 높은 집념에 아주 높은 점수를 주고자 함

그러나, 부정적으로 보았을때 IQ204라는 말에 비해, 코딩의 지능적 설계가 아쉬웠다고 생각함, 지금의 코드는 단순 반복 노가다와 시간을 때려박아 만든 코드이며, 보안과 아키텍처를 무시한 개발은 결국 단발성 프로젝트로 끝날 수 밖에 없음. 

그러나, 이는 경험이 부족해서 발생할수도 있는 과정이기에, 이것만 보아서 “못했다” 라고 평할수는 없을 듯하며, 긍정적인 측면만 보고 만일 내 학생이라면 칭찬을 해줄 듯 함.