← 블로그 목록

데이터 주도 설계의 핵심은 데이터를 많이 두는 것이 아니라 경계를 잘 나누는 것이다

데이터 주도 설계는 모든 값을 JSON이나 테이블로 빼는 일이 아니다. 저장 형식과 도메인 모델 사이에 변환 계층을 두고, 자주 바뀌는 값과 시스템 개념을 구분하며, 데이터 변경이 핵심 로직까지 무차별적으로 퍼지지 않게 경계를 설계하는 일에 가깝다. 결국 중요한 것은 데이터의 양이 아니라 경계의 질이다.

데이터 주도 설계의 핵심은 데이터를 많이 두는 것이 아니라 경계를 잘 나누는 것이다

데이터 주도 설계의 핵심은 데이터를 많이 두는 것이 아니라 경계를 잘 나누는 것이다

게임이나 서비스 개발에서 데이터 주도 설계라는 말을 들으면 흔히 모든 설정을 JSON이나 테이블로 빼는 그림부터 떠올린다. 물론 하드코딩을 줄이고 콘텐츠 수정 비용을 낮추는 데는 이런 접근이 큰 도움이 된다. 하지만 여기서 한 걸음 더 잘못 가면 데이터를 바꾸기 쉽게 하려다 코드 전체가 데이터 형식에 끌려다니는 문제가 생긴다.

핵심은 데이터를 많이 쓰는 것이 아니라, 데이터의 변경이 어디까지 퍼질 수 있는지를 통제하는 것이다. 마틴 파울러가 정리한 도메인 모델, 데이터 매퍼, 자기 캡슐화 같은 패턴도 결국 이 문제를 다룬다. 저장 형식과 핵심 로직이 서로를 직접 흔들지 않게 하려는 것이다.

데이터화 자체는 목표가 아니라 변경 비용을 줄이기 위한 수단이다

데이터를 외부로 빼면 기획자와 디자이너가 빌드 없이 값을 바꾸거나 실험하기 쉬워진다. 적의 체력, 아이템 드롭률, 대사, UI 문구처럼 자주 바뀌는 요소에는 분명 유리하다. 문제는 자주 바뀌는 값시스템의 개념을 구분하지 않을 때 생긴다.

예를 들어 몬스터의 수치 데이터와 전투 규칙은 성격이 다르다. 수치는 자주 바뀔 수 있지만, 전투 규칙은 시스템 전체의 의미를 건드린다. 이 둘을 같은 방식으로 다루면 데이터 파일 하나가 사실상 코드를 대신하는 상태가 된다.

가장 흔한 실패는 저장 형식이 도메인 모델을 지배하는 경우다

데이터 주도 설계가 무너지는 순간은 대개 게임 로직이 파일 구조나 직렬화 형식에 직접 기대기 시작할 때다. JSON 필드명이 바뀌면 게임 오브젝트 생성자까지 바뀌고, 테이블 열 하나가 추가되면 여러 시스템이 동시에 흔들리는 식이다.

이 문제를 줄이려면 최소한 세 층을 의식해야 한다.

저장 형식이 변해도 변환 계층에서 흡수하고, 도메인 모델은 가능한 한 안정적으로 남는 구조가 이상적이다.

번역 계층이 있어야 데이터가 바뀌어도 코어가 덜 흔들린다

파울러의 데이터 매퍼 패턴은 도메인 객체를 저장 구조와 직접 결합시키지 않으려는 접근이다. 게임 개발에서도 비슷한 원리가 통한다. 몬스터 데이터를 읽을 때 파일을 직접 파싱해 도메인 오브젝트가 모든 세부 형식을 아는 대신, 별도의 로더나 팩토리, 어댑터가 중간에서 번역하도록 두는 편이 안전하다.

이 구조의 장점은 세 가지다.

반대로 이 계층이 없으면 나중에 데이터 한 줄 바꿨는데 왜 전투, UI, 저장, 툴이 다 깨지지 같은 일이 벌어진다.

데이터가 많아질수록 검증과 관측이 더 중요해진다

데이터 주도 설계의 또 다른 함정은 코드 리뷰는 해도 데이터 리뷰는 대충 하는 문화다. 하지만 실제 라이브 서비스에서는 오히려 데이터 실수가 더 자주 문제를 만든다. 드롭 테이블, 상점 가격, 스폰 주기, 이벤트 보상은 코드보다 더 자주 바뀌고, 그래서 더 자주 사고를 낸다.

그래서 데이터 중심 시스템에는 보통 이런 장치가 필요하다.

데이터를 외부로 뺐다면 이제 누가, 언제, 무엇을 바꿨고, 그 변화가 어디에 영향을 주는지도 함께 보여줄 수 있어야 한다.

마치며

데이터 주도 설계는 하드코딩을 없애는 운동이 아니다. 변화가 잦은 부분을 분리하되, 그 변화가 핵심 로직까지 무차별적으로 퍼지지 않게 하는 설계 방식이다. 결국 중요한 것은 데이터의 양이 아니라 경계의 질이다.

데이터를 늘리는 것보다 먼저 해야 할 일은 이것이다. 무엇이 자주 바뀌는 값이고, 무엇이 시스템의 개념인가. 이 선이 분명해질수록 데이터 주도 설계는 힘을 발휘하고, 그 선이 흐릴수록 시스템은 파일 형식에 끌려다니게 된다.

참고 자료

← 목록으로
Related

함께 읽으면 좋은 글

게임 개발객체지향조합
게임 개발에서 상속보다 조합이 자주 선택되는 이유

게임 객체는 이동·물리·AI·네트워크처럼 여러 시스템의 교차점에 놓이기 때문에 깊은 상속 계층은 금방 무거워진다. 그래서 컴포넌트 중심 조합이 자주 선택되는 것이지, 상속이 틀려서가 아니다. 안정적인 공통 규약에는 상속이 여전히 유용하며, 핵심은 ‘상속이냐 조합이냐’의 신념 싸움이 아니라 변경 비용이 가장 낮아지는 지점을 보는 일이라는 점을 정리한다.

소프트웨어 공학시스템 설계프로젝트 관리
대규모 소프트웨어 개발은 코드 양보다 조정 비용과 구조 설계가 더 어렵다

큰 시스템이 어려운 이유는 코드 양 그 자체보다 모듈 사이의 관계 수와 사람 사이의 조정 비용, 그리고 보이지 않는 복잡성에 있다. 프레드 브룩스의 통찰처럼 인원을 더 넣는다고 일정이 줄지 않고, 문서와 경계가 없으면 시스템은 금세 개인 의존형이 된다. 대규모 개발의 진짜 실력이 기능 구현보다 운영 현실을 견디는 구조를 만드는 데서 드러난다는 점을 정리한다.

게임 개발MMO커뮤니티 관리
온라인 게임과 커뮤니티는 자유와 통제 중 하나를 고르지 않고 둘의 설계를 같이 한다

온라인 게임과 커뮤니티가 자유와 통제 중 하나만 강조하면 양쪽 다 잃기 쉽다. 오스트롬의 공유지 논의와 Minecraft·Reddit·WoW 커뮤니티 연구가 보여 주듯, 지속 가능한 공간은 자율을 없애서 유지되지 않고 명시적 규칙과 신고·검토 도구, 단계적 제재를 함께 설계할 때 유지된다. 자유가 오래 버티게 만드는 제도화된 자율의 원리를 정리한다.