-
Java Web Game 개발 가이드(6)Java Web Game 개발 가이드 2010. 2. 3. 10:52
웹 게임 제작기법 2
제작기법 2번째에서는 1에서 거쳤던 거시적인 공간에 대한 추상화 과정의 경험을 토대로 세부적인 게임 구현부 수준의 자세한 추상화 과정을 진행해 보겠습니다. 공간과 시간에 대한 전반적인 구조가 잡혔다면 이제 소소한 게임의 즐거움인 영지 경영 RPG의 작물에 대한 구현에 대한 추상화 과정을 진행해 봅니다. 일단 영농 RPG의 경우 작물은 하나의 살아있는 생물이라는 생각과 그 건강을 지키는 것에서부터 생각 해보려 합니다.
- 각 작물은 내구성이 설정되어 있으며, 내구성은 지속적으로 시간마다 회복되나 회복 속도가 다르다.
- 자연재해 혹은 인재의 심도에 따른 내구도에 영향을 끼치며, 작물이 망가지는 정도이다.
- 내구도를 높이기 위한 나무, 철 재질의 옆 대를 세울 수 있다.
- 망가진 작물로 인해 소출이 하락하며, 내구도가 하락하면 병충해에 약해진다.
- 작물은 온도, 습도에 따른 발육 정도가 다르고, 발육상태, 발육 정도의 정보를 갖는다.
- 벼, 보리 등은 습하고 온도가 높아야 잘 자라며, 감자는 적당한 습도만 유지되어도 된다. 토마토는 너무 많은 비가 오면 썩어버린다.
- 발육을 빠르게 하는 비료를 사용하거나 육종 연구를 할 수 있다.
- 유기농 제품은 생산하기 매우 어렵지만 큰 이득을 가져다 준다.
- 신품종을 개발하면 희귀 성이 높아 높은 값을 받고, 육종을 하면 작물 자체의 능력치가 상승한다.
- 신품종은 경매에 붙일 수 있으며, 종자를 공급할 수 있는 권한이 생긴다.
- 육종 작물을 개발하면 교배를 하는 작물의 특성이 교배를 당하는 작물에게 전이 된다.
- 각 기후, 습도, 병충해 등의 이득을 위한 특성이 존재한다.
- 작물의 단위는 편의를 위해 Kg으로 통일한다. 가격의 책정은 이 단위 별로 한다.
- 가격 정책은 자율 시장경제에 맞기며, 물가의 폭등, 매점 매석 등을 국가에서 정도를 정하여 규제한다.
- 거래되는 장터는 암시장, 경매시장, 일반시장이 있다.
이런 작물에 대한 기본 정보들을 종합하고 작물을 판매, 저장, 매입 하는 방법도 존재할 수 있습니다. 다양한 종자의 정보와 육종정보, 신품종 정보 등에 대한 데이터가 구조화 되어야 합니다. 다음을 참고해 봅시다.
작물 데이터
기본적인 작물의 내구도, 이름, 학명, 설명, 제곱미터 당 생상량, 재배 가능한 토양, 필요한 영양 그룹 코드
작물 성장 영향 데이터
가뭄, 홍수, 벼멸구, 각종 질병, 메뚜기, 등등
기후 데이터
봄, 여름, 가을, 겨울, 초봄, 늦봄, 초여름, 늦여름 등등
작물 추가아이템 리스트
철봉, 끈, 전기 울타리, 나무 울타리 등등
사용자 작물 데이터
작물 주 id, 성장률, 내구도, 성장상태, 발육상태, 병충해 구분코드 등
작물 성장 영향 데이터
각종 비료, 물, 향상된 농법 리스트, 농기계, 스프링쿨러, 비닐 하우스
육종 가능 리스트
1세대 벼,2세대 벼, 1세대 감, 등 육종 시 태어날 작물
신품종 개량 리스트
향상된 꿀 사과, 땅콩호두 등등
시장 등록 아이템 리스트
시장종류 코드, 등록 수수료 율, 등록자, 판매가, 판매 상품 id, 수량, 판매 종료일, 등등
아이템 구매 히스토리
구매 상품 id, 구매일, 구매자 등
작물의 데이터가 추상화 되었습니다. 이 데이터를 계속 고심하여 데이터 베이스에 테이블 화 할 수 있을 것입니다.
꼼꼼히 다양한 부분에 관해 실제 화면을 상상하며 이런 과정을 겪어 왔다면 생각보다 상당히 많은 데이터가 필요함을 알 수 있을 것입니다. 이제 이런 데이터들을 토대로 실질 적인 데이터 베이스 테이블로 형상화 해야 합니다. 이 데이터 베이스에 대한 가시성과 이해도를 높여 줄 수 있는 프로그램은 ERWin 이라는 ERD 작성 프로그램이 있고, 엑셀을 이용한 테이블 정의서를 작성 할 수 있으며, 데이터 베이스 작업용 프로그램에서 제공하는 시각 툴이 있습니다.
수많은 데이터의 집합 관계와 기본 키, 외래 키 에 대한 구조화 작업은 쉽지 않습니다. 많은 경험을 가진 DBA라면 어떤 데이터의 추상화 과정에서 일어 날 수 있는 참조 오류를 잘 잡아내겠지만 경험이 없는 우리는 일단 부딪혀 보는 수 밖에 없겠지요. 한번 겁먹지 말고 엑셀에 위의 자료를 토대로 테이블 정의서를 작성해 봅니다.
<ERD를 이용한 데이터 테이블의 구조 표현>
테이블 정의서
ㅇㅇ사
프로젝트명
webgames
Table설명
회원정보
작성일
2010년 01월 21일
시스템명
웹게임
Table명
TBL_MEMBER
작성자
개발자
No
필드명
자료형
길이
key
null
Index
필드설명
1
MEMBER_ID
VARCHAR
50
PK
NOT NULL
Y
고객 ID
2
MEMBER_PW
VARCHAR
50
NOT NULL
Y
비밀번호
3
MEMBER_NICK
VARCHAR
50
PK
NOT NULL
Y
별명
4
HOME_PHONE
VARCHAR
15
집전화
5
CELL_PHONE
VARCHAR
15
휴대폰
6
CONN_DATE
DATETIME
홈페이지 접속일
7
IP_ADDR
VARCHAR
23
아이피
8
EMAIL
VARCHAR
255
이메일
13
REG_USR
VARCHAR
50
등록자
14
REG_DATE
DATETIME
등록일
15
UPT_USR
VARCHAR
50
수정자
16
UPT_DATE
DATETIME
수정일
<엑셀을 이용한 테이블 정의서>
위의 그림은 정규화된 데이터를 실 테이블로 작성한 것입니다. 작성에 어떤 규칙은 없습니다. 어떤 거대한 프로그램 이라도 결국 사람이 만들고 정의한 것이니 자신의 정확인 판단을 믿고 용량과 인덱스를 정하는 것입니다. 틀린다고 해도 수정하면 그만 이니까요. 아직은 설계 단계 인 것을 잊지 마세요.
위의 예는 회원 테이블을 정의 한 것입니다. 단지 예를 위해 생성한 것이라 우리가 전에 추상화한 개념이 적용되어 있지 않습니다. 이런 방법으로 여러 개의 시트를 추가해 가며 데이터 베이스를 정의한 엑셀을 만들어 둡니다. 이 문서는 개발 시 가장 빈번히 참조되고 이용될 것 이기 때문에 버전의 처리와 모든 누락사항 없는 문서로 만들어야 할 것입니다.
데이터 베이스의 추상화, 상세 구현 등에 대해서는 다루지 않겠습니다. 데이터 베이스의 테이블 생성, 인덱스, 쿼리 등의 사항은 해당 전문 서적을 참조 하시기 바랍니다. 다만 한 가지 당부 드릴 말은 경험이 적은 개발자가 택할 수 있는 테이블 생성 사상은 수평적인 구조로 테이블을 만들라는 것입니다. 경험이 많다면 생각지도 못한 데이터의 구성요소를 미리 예측 할 수 있습니다. 그러나 이런 예측하기 힘든 상황을 가정하여 경험이 적은 개발자가 너무 깊숙히 생각해 테이블을 생성할 경우 쉽게 아집에 빠져 버려 이러지도 저러지도 못하는 테이블 구조가 나와 버리기도 합니다. 다음 그림을 보면 그 상황을 이해 할 수 있습니다.
설마 회원 정보를 이렇게 정규화 할 일은 없겠지만 회원 테이블과 주소, 전화번호 테이블을 member_id를 키로 정규화 하였습니다. 그러나 오른쪽의 판매정보가 기능 추가되었을 경우 문제가 생기게 됩니다. 회원의 주소정보가 변하게 되면 판매정보 역시 변경 됩니다. 그러나 판매정보에는 예전에 판매한 판매처의 정보가 남아 있어야 할 경우 이 구조에서는 올바른 데이터를 도출 할 수 없게 됩니다. 데이터의 정규화가 오히려 기능 개선을 힘들게 한 경우 입니다. 오히려 아래와 같은 구조가 훨씬 편하게 데이터 관리를 할 수 있습니다.
예를 들기 위해 조금 엉뚱한 테이블 구조를 그린 듯 하지만 실제로 복잡한 테이블 구조로 인해 논리적인 어려움을 겪을 수 있습니다. 결국 실수를 줄일 수 있는 가장 좋은 방법은 아주 단순하고 쉽게 구성을 하는 것입니다. 여러분은 만들고자 하는 웹 게임에 지속적인 재미있는 기능들을 추가하고 싶겠지만 여러분은 이 기능을 어떻게 수 많은 기능들 사이에 아무런 오류 없이 끼워 넣을까 하는 고민에 빠질 것입니다. 그때마다 지옥 같은 논리 구조로 인해 고통스럽지 말아야 합니다.
위와 같이 최대한의 수평적인 논리 구조를 갖도록 데이터 베이스를 구성하면 새로이 추가되는 기능들을 수평적으로 늘려 나갈 수 있는 하나의 좋은 방법이 될 수 있습니다.
자. 여러분은 이제 원하는 게임을 만들기 위한 환경을 설정했고, 다양한 정보도 모았으며 테이블 정의서 까지 만들었습니다. 이제 여러분은 테이블 정의서를 토대로 데이터 베이스에 태이블을 생성할 수 있습니다. 이제 좀더 게임에 직접적으로 필요한 데이터에 관한 분석을 진행해 볼까 합니다.
여러분은 데이터 베이스를 구축하여 테이블까지 만들었지만 이것은 아무것도 들지 않은 깡통과 같은 상태 입니다. 이 깡통에 데이터를 채워 넣어 좀더 살아있는 웹을 만들기 위한 준비를 해야 합니다. 구현의 길은 아직도 멀기만 하다고 느껴지겠지만 유닛들, 건물들에 생명을 하나하나 불어넣는 이 작업은 꼭 필요합니다.
먼저 이 전장에서 수많은 데이터들(작물 데이터, 날씨 데이터, 건물 데이터 등등)이런 데이터를 이전에 진행 했던 장에서 잔뜩 모아 두었다는 것을 기억 하시나요? 이 글을 꾸준히 따라 오셨다면 아마 데이터 베이스에는 그 데이터를 차곡차곡 적재할 충분하고 적절한 공간이 마련되어 있을 것입니다. 저의 영농 RPG 게임 역시 여러 가지 순수정보에 관한 데이터를 저장할 테이블이 생성 되었습니다.
테이블 정의서
ㅇㅇ사
프로젝트명
webgames
Table설명
작물 정보
작성일
2010년 01월 21일
시스템명
웹게임
Table명
TBL_PLANT
작성자
개발자
No
필드명
자료형
길이
key
null
Index
필드설명
1
PLANT_CD
VARCHAR
10
PK
NOT NULL
Y
작물코드
2
DURABILITY
INT
내구도
3
NAT_HEAL
INT
내구도자연회복량
4
PLANT_NAME
VARCHAR
100
작물이름
5
DESCRIPTION
VARCHAR
500
작물설명
6
SCIENTIFIC_NAME
VARCHAR
100
작물 학명
7
LAND_EFFECT
VARCHAR
지형효과 코드
8
MIN_TEMPERATURE
FLOAT
재배 최저온도
9
MAX_TEMPERATURE
FLOAT
재배 최대온도
10
MIN_HUMIDITY
FLOAT
재배 최소습도
11
MAX_HUMIDITY
FLOAT
재배 최대습도
12
NUTRIENT1
VARCHAR
10
필수 양분코드1
13
NUTRIENT2
VARCHAR
10
필수 양분코드2
14
NUTRIENT3
VARCHAR
10
필수 양분코드3
15
OUTPUT_BASE
LONG
기본 생산량(1m*m)
16
BREED
VARCHAR
1
품종코드(B:기본,U:육종,N:신품종)
17
REG_USR
VARCHAR
50
등록자
18
REG_DATE
DATETIME
등록일
19
UPT_USR
VARCHAR
50
수정자
20
UPT_DATE
DATETIME
수정일
테이블 정의서
ㅇㅇ사
프로젝트명
webgames
Table설명
사용자
작물 정보작성일
2010년 01월 21일
시스템명
웹게임
Table명
TBL_USR_PLANT
작성자
개발자
No
필드명
자료형
길이
key
null
Index
필드설명
1
MEMBER_ID
VARCHAR
20
PK
NOT NULL
Y
회원ID
2
PLANT_CD
VARCHAR
10
PK
NOT NULL
Y
작물코드
3
PLANT_SEQ
VARCHAR
32
PK
NOT NULL
Y
작물 식별자
4
CUR_DURABILITY
INT
현재 내구도
5
STATUS
VARCHAR
1
현재 상태
6
BUY_PRICE
INT
100
작물이름
7
IS_SARCOMA
VARCHAR
1
육종가능구분값
8
ZONE_CD
VARCHAR
100
재배 구역코드
9
REG_USR
VARCHAR
50
등록자
10
REG_DATE
DATETIME
등록일
11
UPT_USR
VARCHAR
50
수정자
12
UPT_DATE
DATETIME
수정일
테이블 정의서
ㅇㅇ사
프로젝트명
webgames
Table설명
사용자 건물관리
작성일
2010년 01월 21일
시스템명
웹게임
Table명
TBL_USR_BUILDING
작성자
개발자
No
필드명
자료형
길이
key
null
Index
필드설명
1
MEMBER_ID
VARCHAR
50
PK
NOT NULL
Y
고객 ID
2
BUILDING_CD
VARCHAR
10
PK
NOT NULL
Y
건물 코드
3
BUILDING_SEQ
VARCHAR
32
PK
NOT NULL
Y
건물 식별자
4
DESTROY
VARCHAR
1
붕괴구분
5
MAX_HP
INT
최대 체력치
6
HP
INT
현재 체력 포인트
7
DESCRIPTION
VARCHAR
255
설명
8
REG_USR
VARCHAR
50
생성자
9
REG_DATE
DATETIME
생성일
10
UPT_USR
VARCHAR
50
수정자
11
UPT_DATE
DATETIME
수정일
테이블 정의서
ㅇㅇ사
프로젝트명
webgames
Table설명
사용자아이템
작성일
2010년 01월 21일
시스템명
웹게임
Table명
TBL_USR_ITEM
작성자
개발자
No
필드명
자료형
길이
key
null
Index
필드설명
1
ITEM_ID
VARCHAR
32
PK
NOT NULL
Y
아이템 식별자
2
MEMBER_ID
VARCHAR
10
Y
고객 ID
5
ITEM_CD
VARCHAR
10
아이템 코드
8
REG_USR
VARCHAR
50
생성자
9
REG_DATE
DATETIME
생성일
10
UPT_USR
VARCHAR
50
수정자
11
UPT_DATE
DATETIME
수정일
이 정도만 옮겨 보도록 하겠습니다. 각각의 정보들은 쿼리에서 조인을 이용해 다양하게 값을 묶거나 얻어올 수 있을 것입니다. 이렇게 모아진 테이블에 쿼리를 이용해 이전에 모아둔 순수 데이터를 INSERT 하세요.
이제까지 다룬 내용만 해도 상당히 전문가스러운 설계를 진행 할 수 있습니다. 웹 이라는 거대한 데이터 덩어리는 눈으로 보는 것 보다 훨씬더 많은 데이터들로 설계 되고 운영되며, 그 효율성을 깊이 생각하여 최적화 된 예술품 과도 같습니다. 여러분이 보고 있는 이 글이 적힌 매체가 존재하기 위해 사상할 수 있는 모든 데이터를 상상 할 수 있겠나요? 아마 여러분이 만들고 있는 웹 게임이 거의 완성이 되어 간다면 어떤 사물, 창조물, 데이터를 바라보는 시선이 조금은 개발자 같은 눈으로 변해 있다면 이 글은 반은 성공 한거라 믿습니다.'Java Web Game 개발 가이드' 카테고리의 다른 글
Java Web Game 개발 가이드(8) (0) 2010.02.03 Java Web Game 개발 가이드(7) (0) 2010.02.03 Java Web Game 개발 가이드(5) (0) 2010.02.03 Java Web Game 개발 가이드(4) (0) 2010.02.03 Java Web Game 개발 가이드(3) (0) 2010.01.23