게임 기획의 공간

게임 기획과 강의 그리고 포트폴리오

게임 기획/시스템 기획 이론

9. 게임 시스템 기획 데이터 테이블 이론

니코틴휘날리며며 2024. 1. 23. 00:09

데이터 테이블 종류

시스템 기획이 인지 요소와 규칙을 정하는 것이라면 인지 요소를 시스템에서 제어할 수 있는 수단이 필요하다. 이러한 역할을 하는 것이 데이터 테이블이며, 게임 개발 환경에 따라 다양한 형태로 제공된다.
-.
데이터 테이블은 엑셀(Excel), 엑세스(Excel Access), 스크립트(Script), 전용툴 등 다양한 형태로 지원된다.
-.
데이터 테이블은 콘텐츠를 조정/관리하고 데이터 추가를 통한 콘텐츠 확장에 이용된다.
-.
개발 환경에 따라 시스템 기획자가 설계하지 않는 경우도 있다. 단 프로그램팀에게 맡겼을 경우 프로그래머 기준으로 테이블이 설계되어 사용성면에서 불편할 수 있다.

분류 Description
엑셀(Excel) 가장 일반 적으로 사용되는 테이블 형식으로 엑셀에서 지원하는 다양한 함수와 VBA의 활용이 가능한 장점이 있지만 데이터 오류(Human Error)에 취약하며 데이터 적용을 위해서는 별도의 변환 과정을 거쳐야 한다.
엑세스(Excel Access) 엑셀에서 지원하는 엑세스 기능을 이용한 데이터 테이블로 기존 테이블의 최대 문제점은 데이터 오류(Human Error)의 취약성을 보안하고 쿼리(데이터 요청)를 직접 사용할 수 있는 장점이 있지만 지정된 데이터만 입력할 수 있고 필요한 데이터 테이블 컬럼을 추가하거나 변경하기 어렵고 불편하다는 단점이 있다.
스크립트(Script) 루아(Lua), 루비(Ruby), 자바스크립트(JavaScript), 파이썬(Python)등의 스크립트 언어를 이용하여 데이터를 관리할 수 있는 형태이다. 스크립트에서 사용 가능한 문법을 이용하여 자유롭게 데이터 설정이 가능하지만 작업자의 역량에 따라 차이가 크게 발생하며 게임 내 구동시점에 디버깅이 어렵다는 단점이 있다. 단독으로 사용되기 보다는 데이터 테이블로 표현이 어려운 복잡한 시스템을 구성할 때 병용하기도 한다.
(ex :
몬스터 패턴, 퀘스트 패턴)
전용툴 개발 환경에 따라 제공되는 프로젝트 전용 데이터 셋팅용 툴로 프로젝트마다 그 형식이 다양하다. 매우 유용하기는 하지만 개발이 진행됨에 따라 유지보수 비용이 더 크게 발생하며, 툴의 작업 환경에 따라 생산성의 차이가 매우 크다.
-.
단 데이터 테이블 제외 연출, 애니메이션 제어 서버 이벤트 제어 등 외부 또는 내부에서 개발에 도움이 되는 기능은 툴로 제작된다.
-.
전용 툴은 웹 기반 형태부터 엔진 내부 기능을 활용하는 등 그 형태가 다양하다.

. 여기서 말하는 데이터 테이블은 외부에서 시스템 제어 가능한 데이터를 포괄적으로 뜻한다.

 

데이터 테이블은 왜 필요한가?

시스템 운영에 데이터 테이블은 프로젝트 개발 비용 및 관리 비용 감소를 위해 필요하지만. 데이터 테이블이 가지는 장점은 데이터의 확장성, 유연성, 사용성, 데이터 수정 및 분리의 장점을 가지고 있다.

 

■.  데이터 확장성
시스템 개발이 완료된 이후 데이터 추가를 통해 콘텐츠를 확장할 수 있는 기능으로 적은 비용으로 개발된 콘텐츠의 PLC를 유지할 수 있다.
-.
이러한 데이터 확장성은 테이블이 가져야 하는 매우 기본적인 기능이기 때문에 데이터 확장을 위한 작업이 너무 복잡하게 구성되지 않도록 설계 단계에서 고려되어야 한다.

<데이터 추가를 통해 콘텐츠 볼륨을 계속 확장할 수 있다면 PLC 유지에 큰 도움이 된다.>

만약 데이터 테이블을 이용하지 않는 경우 위와 같이 던전의 Lv을 추가하고자 할 때 각 던전의 Lv별 데이터가 다르기 때문에 이를 위해 1Lv부터 150Lv까지 동일한 코드 블록을 계속 추가하고 변경되는 값(Value)만 따로 수정해야 한다. 이처럼 데이터 확장을 위해 유사 코드를 계속 반복해서 추가하는 형태를 하드코딩 방식은 유지 보수 및 데이터 확장에 유리하지 않은 구조이다.

 

■. 데이터 유연성
다른 시스템과 연계하여 기능을 참조받아 사용(빌려 쓰는 것이라 생각하면 된다.)하게 되면 중복 기능 개발 비용이 감소하고 데이터를 보다 쉽게 관리할 수 있다. 데이터 참조 기능을 잘 활용하면 추가 개발 없이 콘텐츠를 확장할 수 있다.
-.
데이터 테이블이 유연하게 다른 시스템과 연계하기 위해서는 개별 시스템의 독립성이 보장되어야 한다.
-.
데이터 테이블의 독립성은 시스템과 시스템이 연결되기 위해서 각 시스템의 고유한 기능이 독립적으로 동작할 수 있도록 보장되어야 하며, 자신의 기능이 동작하기 위해 다른 기능의 영향을 받아서는 안된다. 이러한 독립성은 대부분의 코어 시스템에서 사용되기 때문에 전체 시스템 설계단계에서 고려되어야 한다.

<독립된 다른 기능을 조합하여 하나의 완성된 콘텐츠로 제공할 수 있는 기능을 사용할 수 있다.>

 

■.  데이터 수정
게임을 개발하는 동안 여러 번의 데이터 수정 이슈가 발생한다. 이를 프로그래머를 통해 수정해야 한다면 코드 수정 및 빌드 배포 프로세스를 따라야 하는데 한 번의 수정이면 다행이지만 여러 번의 수정이 필요할 경우 불필요한 개발 비용이 소비된다. 만약 이러한 데이터를 스스로 조작할 수 있다면 개발 비용이 크게 감소할 수 있다.
-.
데이터 테이블은 코드에 있어야 하는 정보를 외부에서 제어할 수 있도록 제공되는 기능이다. 결과적으로 데이터 수정/관리 이슈로부터 프로그래머와 기획자 모두 유용한 선택이다.

<코드를 통해 데이터가 관리될 경우 시스템 관리 비용이 크게 증가할 수밖에 없으며, 불편하다.>

 

■.  데이터 분리
프로그래밍 코드가 수정될 경우 빌드 배포 과정이 필요하다. 모바일 라이브 서비스의 경우 빌드로 인한 앱 버전이 변경되었을 때 스토어 검수 과정이 추가되어야 한다. 만약 문제 수정이 필요할 경우 이러한 프로세스를 따라야 한다면 이슈에 신속하게 대응하기 어렵다. 반면 데이터 테이블 수정과 패치를 통해 해결 가능하다면 신속한 이슈 대응 및 비용 절감에 대한 이점을 가질 수 있다.
-.
코드 수정을 통해 발견된 이슈는 수정이 되었다 하더라도 잠재적으로 다른 문제를 발생시킬 수 있다. 게임의 규모에 따라 코드가 복잡해지고 연계성이 강하기 때문에 수정 후 많은 테스트를 필요로 한다.
-.
이슈 수정만이 아니라 이미 개발된 시스템을
테이블 주석으로 처리하여 Off 상태로 업데이트 후 테이블 수정 만으로 콘텐츠 오픈이 가능하다. 수정이 불가능한 이슈일 경우 임시로 테이블 데이터를 주석 처리하여 콘텐츠 사용을 제한할 수 있다. 발생된 물론 유저에게는 좋지 않은 결정이지만 문제가 커지기 전에 임시로 제한 가능하다.
-.
빌드 과정은 클라이언트만 하는 것이 아닌 서버도 버전에 따라 빌드 과정을 거친다.

 

■.  데이터 사용성
엑셀을 이용한 데이터 테이블의 경우 사용하기가 매우 쉬우며, 엑셀이 가지고 있는 고유 기능(함수, VBA)를 활용할 수 있는 장점이 있다.
-.
데이터 테이블은 사용성을 고려하여 직관적으로 설계되어야 한다. 향후 더 자세한 설명을 하겠지만 지나친 유연성과 독립성으로 인한 데이터 변조 및 참조 기능을 사용하거나 인지 요소를 복잡하게 구성하지 않도록 주의해야 한다.


. 장점
-. 별도의 툴이 아닌 엑셀을 기반으로 데이터를 작성하기 때문에 접근성이 낮고 활용성이 높다.
-.
기존 엑셀에 사용 가능한 함수 및 VBA 등 고유 기능을 대부분 활용할 수 있다.
-. 셀단 위로
구분되어 있어 가독성이 매우 높으며, 검색, 계산 기능 활용이 가능하다.
-.
프로그램에서 읽기 쉬운 다른 파일로 변환하기 매우 쉽다.

<엑셀 파일로 구성된 테이블이 스크립트 같은 코드보다는 가독성과 사용성이 더 높다.>

. 단점
-. 엑셀을 사용하기 때문에 많은 양의 데이터를 사용하게 될 경우 파일이 매우 무겁고 느려진다.
-.
불특정 다수가 작업할 경우 함수, VBA 등으로 인한 파일 에러 발생의 위험성이 있다.
-.
작업된 데이터는 프로그램에서 사용할 수 있는 다른 파일로의 변환 과정을 거쳐야 한다. (**. xlmx은 그대로 사용하기도 하지만 대부분 내부에서 사용 가능한 별도의 바이너리(Binary) 파일로 변환해서 사용.)
※. 데이터 보호를 위한 암호화 작업은 데이터 변화와는 무관하게 진행되는 별도 프로세스이다.

<엑셀 파일은 대부분 별도의 변환 과정을 거친 후 시스템에 적용된다.>

데이터 테이블 형태

데이터 테이블은 프로젝트에 따라 양식의 차이가 다소 있지만 대부분 컬럼, 데이터 타입, 사용자, 데이터 값을 가지는 형태로 구성된다.
. 데이터 테이블은 여러 형태를 가지고 있지만 가장 범용적으로 사용되는 엑셀(Excel)을 기준으로 설명한다.

. 데이터 테이블 형태 예시

No Name Description
1 테이블 컬럼
(
Column)
-. 시스템 기획에서 구성한 인지요소(Factor)
-.
시스템을 제어하는 기능 이름으로 영문으로 작성
-.
시스템에서 제어해야 하는 기능에 대한 명칭
2 데이터 타입
(Data Type)
-. 입력해야 하는 데이터에 따라 규정된 타입을 사용
-.
해당 타입에 맞는 데이터를 입력해야 한다.
3 사용자 -. 데이터 컬럼을 클라&서버 중 사용 대상 설정
-.
프로그램에서 사용 / 비사용 컬럼 구분용
4 데이터 값
(Value)
-. 시스템을 제어하기 위한 데이터 값(Value)
-.
데이터 타입 규칙에 따라 작성되어야 한다.
-.
필요 데이터 양식에 따라 작성 방식 변화

<데이터 테이블은 컬럼, 타입, 사용자, 데이터 값으로 양식을 따르면 대부분 비슷한 형태로 구성된다.>

 

변수에 대한 개념 이해

데이터 테이블 설계를 이해 위해 프로그래밍 언어에서 사용하는 변수(Variable)에 대한 개념을 먼저 이해한다면 시스템 인지요소(Factor)를 이용한 데이터 테이블 컬럼 작성에 도움이 된다.

여기서 변수란(Variable) 비어 있는 이름이 붙어있는 상자와 같다. 이러한 상자에 물건(Data Value)을 넣어서 보관할 수 있고 원할 경우 상자 이름을 찾아 안의 내용물을 꺼내 사용할 수 있다.

<변수에 값을 저장하고 원할 때 언제든지 값을 다시 꺼내어 올 수 있다.>

 

이러한 개념을 데이터 테이블에 적용할 수 있다. 변수(Variable)의 경우 시스템 인지요소(Factor)를 통해 지정된 Data TableColumn이 된다. 그리고 변수에 대입되는 데이터(Value)Data Table데이터 값(Value)이 되어 테이블 컬럼에 라인에 등록된다. 이렇게 테이블에 저장된 값을 데이터 테이블 컬럼의 이름을 변수로 사용하고 등록된 값을 호출하여 사용할 수 있는 개념이며, 외부 파일(System Data Table)을 통해 값을 수정할 수 있도록 만들어진 데이터 파일이다.

개념적으로 설명하자면 캐릭터의 Unique ID(고유 ID) 값이 1004 Actor의 공격력 정보가 필요하다고 가정했을 때 데이터 테이블을 통해 Unique ID 대상의 공격력 정보를 호출할 수 있다.

<캐릭터 공격력을 호출하기 위해 변수를 선언하고 테이블과 컬럼을 참조하여 공격력 값을 호출한다.>

물론 실제 게임 내 데이터 컬럼을 참조하기 위해 위와 같은 형태로 코드를 작성하지 않는다. 여기서 설명하고자 하는 부분은 CharacterAttackPower이라는 변수는 Actor Data TableAttackPower 컬럼의 값을 참조하다는 것과 Actor Data TableAttackPower 정보는 프로그램 코드 수정 없이 외부 파일인 데이터 테이블을 이용하여 수정할 수 있다는 점이다. 데이터 테이블을 만들기 위해서는 변수와 같은 개념을 이해할 필요가 있다.

 

데이터 타입 종류

외부에서 편집할 수 있는 데이터 테이블이라 하더라도 각 컬럼의 정보를 호출할 때 코드의 변수에 호출하는 정보의 타입(속성)을 알 수 있어야 한다.
테이블 컬럼에 등록되는 데이터 값(Value)은 작성방식에 따라 지정된 데이터 타입(Data Type)을 지정해야 한다. 코드상에서 데이터 값(Value)을 처리하기 위해 메모리의 크기 및 데이터를 호출할 때 확보해야 하는 메모리 그리고 호출된 값이 어떠한 형태인지를 확인하기 위해 필요하다.
-.
코드상에서 데이터를 처리할 때는 기본적으로 작성되는 데이터 값(Value)의 속성을 정의해야 한다.
-.
프로그램에서 한정된 메모리 내 데이터를 보다 효과적으로 저장하고 데이터를 추적하여 참조하기 위해서는 메모리의 크기를 알아야 하는데 데이터를 참조하는 과정에서 얼마의 메모리 공간을 읽어 들어야 하는지 알기 위해 필요하다.
-.
메모리 공간을 확보하고 값을 사용할 때 지정된 데이터 값(Value)은 2진수 형태로 저장되어 있다. 2진수 형태만으로는 대상이 어떠한 값인지 정확하게 알 수 없기 때문에 데이터 값(Value)이 어떠한 형태인지 지정해 주어야 한다. (ex : 2진수 0100 0001은 숫자 65일 수도 있고 영문 A일수도 있다. 데이터 타입이 지정되지 않으면 대상이 어떠한 값을 뜻하는지 알 수 없다.)

. Data Type List(자료형)

Data Type Byte Data Value Range Description
Int 4 -2,147,483,648 to 2,147,483,647 정수만 사용 가능하면 양수 / 음수를 지원한다.
Uint 4 0 to 4,294,967,295 정수만 사용 가능하며 양사만 지원한다.
Char 1 -128 to 127 Int와 동일하지만 메모리를 적게 사용한다.
Float 4 3.4E +/- 38 (7 digits) 소수점 이하 자리를 사용할 수 있다.
Double 8 1.7E +/- 308 (15 digits) int보다 더 큰 범위의 숫자를 사용할 수 있다.
String 28 TXT 문자(TXT)를 사용할 수 있다.

 

지금 설명한 데이터 타입(Data Type)은 대표적으로 사용하는 항목들이다. 프로그램 언어에서는 더 다양하고 데이터 타입들 지원하지만 대표적인 항목만 이해하고 있으면 일단 충분하다. 단 프로젝트의 상황에 따라 데이터 타입의 양식이 다를 수 있기 때문에 실제 사용해야 하는 데이터 타입들은 프로젝트 내부 규칙을 확인해야 한다.

 

또한 숫자 또는 문자를 사용하는 데이터 타입 이외 다른 형태의 데이터를 지원하는 타입이 있다. 이러한 타입들은 시스템 인지요소의 특성에 맞춰 필요한 양식을 사용할 수 있다.

 

. Data Type List(자료형)

Data Type Byte Data Value Range Description
Enum varies - 미리 지정된 값을 사용할 수 있다.
{자료형}[ ] - - 자료형에 Data Type를 지정 1개 이상의 값을 사용할 수 있다.
Bool 1 False or True Input에 따라 False(0) 또는 True(1)을 반환한다.

 

■.  Enum : 이넘 타입
지정된 값을 사용할 수 있으며, 시스템 인지요소(Factor)에서 특정 값의 지정이 필요할 경우 사용한다. 지정된 값만 사용할 수 있기 때문에 실수가 적으며, 코드 관리 및 가독성이 편한 장점이 있다.

 

■.  {자료형}[ ] : 배열 타입
컬럼에서 하나 이상의 값을 사용해야 할 경우 사용하며 데이터 값(Value)은 “ , “로 구분한다. 데이터 컬럼 수량을 늘리고 싶지 않거나 유사한 데이터를 하나 이상 사용해야 할 경우 사용한다.

 

■.  Bool : 부울 타입
내부 값이 0 또는 1로 사용되며 True or False의 결과를 가지는 시스템의 데이터 컬럼에 사용된다. 예를 들어 [장착 가능한 아이템 조건] = Item Data Table [Equipment] Column의 값이 0이면 장착 불가 1이면 장착 가능과 같이 두 개 중 하나의 결과를 가져야 하는 시스템 데이터 컬럼에 사용한다.

<각 데이터 타입에 따라 System Data Table Column의 사용 방식이 다르다.>

 

지정된 데이터 타입에 따라 데이터 값(Value)을 작성하는 것이 맞지만 상황에 따라 입력되어야 하는 데이터 값(Value)에 대한 시스템 규칙을 함께 제공해야 하는 경우도 있다. 단일 형태의 데이터 값(Value)을 사용하지 않는 경우 가장 유사한 데이터 타입(Data Type)을 사용하면 된다.

 


여러분들의 구독과 공감(♥)은 저에게 큰 힘이 됩니다.

질문이 있으시면 방명록에 글을 남겨주세요.