'ProjectAlice'에 해당되는 글 1건

  1. 2007/06/04 데이터 포멧으로 XML 이용하기 (1)

데이터 포멧으로 XML 이용하기

프로그래밍/개발 2007/06/04 14:08

저희 팀이 개발하고 있는 '실시간 3D 렌더링을 이용한 애니메이션 제작 환경' (이하 ProjectAlice) 에서는 애니메이션 데이터 포멧으로 XML 포멧을 사용하고 있습니다.

XML의 장점에 대해서는 굳이 설명드리지 않더라도 여러 매체를 통해서 소개되어 있기 때문에 따로 얘기는 하지 않겠고, 대신 ProjectAlice 에서 왜 XML을 쓰는지에 대해서만 간단히 얘기하도록 하겠습니다.


  1. 프로그램의 기능이 부족하다.
    이 부분은 차차 해결해 나가야 할 부분입니다만, 데이터 값을 수정하는 부분은 다분히 UI에 관련된 사항입니다.
    실제 내용물이 구현되는 것과 값을 수정할 수 있는 부분이 만들어지는 것은 별개의 사항이죠.
    보통은 코어부분을 먼저 개발하기 때문에, 데이터를 편집할 수 있는 UI는 아직 완성이 안되어있는 경우가 많습니다. (실제로 저희 프로젝트가 그렇습니다.)

    그럴 경우 보통은 데이터 구조 (구조체나 클래스)를 정하고 난 뒤, 소스 내에서 객체를 생성하고 임의의 값을 하드 코딩하여 엔진을 테스트 하는 경우가 다반사인데, 그럴경우 데이터 값을 변경시킬때마다 프로그램을 컴파일해야하는 상황이 발생합니다.
    요즘엔 컴퓨터가 빨라서 못할짓은 아니지만 그닥 좋은 방법은 아니라고 할 수 있겠죠.

    그것보다 조금 유용하고 정석적인 방법은 데이터 로더를 만들어서 외부 데이터를 읽어오는 방법입니다.
    오래전부터 C 코딩을 하셨던 분들은 보통 구조체를 fwrite(&구조체인스턴스, ..); 하는 방식으로 파일에 덤프하고 fread로 읽는데 익숙하실겁니다.
    편리한 방법이긴 하지만 그런식으로 값을 저장할 경우 프로그램에서 쓰기는 편하지만 지금같이 UI가 부족할 경우에는 완전 난감하죠.

    이럴때는 텍스트 포멧으로 저장하여 외부에 걸출한 텍스트 에디터들로 편집을 할 수 있도록 하는것이 정답입니다.
    값이 눈으로 보이기 때문에 손으로 고치기가 편하다는 장점이 있죠.

    유일한 단점은, 파서를 만들기가 귀찮다는 것입니다.

    그럴 때 쓸 수 있는 대안이 바로 XML 입니다.
    텍스트 포멧으로 만들어져 있고 수많은 파서가 존재하며 외부 프로그램과의 호환도 유리한 장점이 있지요.
  2. 시간이 지나고 프로그램의 기능이 좀 더 많아지면 속성값이 늘어나거나, 형식이 변한다.

    위에서 이야기 하였던 fwrite/fread 의 경우에는 구조체를 그대로 덤프하기 때문에 구조체에 변수가 추가된다거나 변수의 형식이 변할경우에 초난감한 사태가 발생합니다. (데이터 포멧 컨버터를 만들어야할지도)
    하지만 XML 은 태그의 속성을 손쉽게 변형할 수 있고 속성의 추가도 자유롭습니다. 만약 데이터의 형식이 변화하더라도 데이터파일에 미치는 영향을 최소화 할 수 있을 겁니다.
  3. 데이터가 깨졌을때 유리하다.

    이 부분은 모든 텍스트 포멧에 대한 장점인데, ProjectAlice 와 같이 초기 단계에 있는 프로젝트는 프로그램이 불완전한 관계로 데이터 파일을 날려먹을 수 있는 확률도 있습니다. 아니면 하드가 박살이 난다던가 하는 천재지변이 있을수도 있겠죠.
    그럴경우 바이너리 파일은 복구하기가 샤워실에서 털줍는일 만큼이나 괴로운 일이 되겠지만 텍스트 포멧은 human-readable 하기 때문에 에디터로 열어놓고 눈으로 확인 가능한 만큼은 살릴 수 있을 것입니다.

이러한 사유로 저의 ProjectAlice 는 XML을 데이터 포멧으로 이용하기 시작하였습니다.
아직까지는 별다른 탈 없이 잘 작동하고 있고, 데이터 포멧 하나만으로도 왠지 고급 프로그램이 된것 같은 느낌입니다.

원래는 저희 프로젝트의 데이터 예제와 태그 설명도 같이 올리려고 했지만 내용이 꽤 길어진 관계로 차후 포스팅 하도록 하겠습니다.

감사합니다~

크리에이티브 커먼즈 라이선스
Creative Commons License


Trackback 0 : Comment 1

Trackback Address :: http://blog.nworkers.net/trackback/155 관련글 쓰기

  1. 동우 2009/05/01 10:12 Modify/Delete Reply

    ㅋㅋ 덕분에 이 문제 해결 했답니다 ㅎㅎ 힌트가 되서요 아무튼 ㄳ 합니다 ㅠㅠ 정식으로 되어 있어야 하는 부분이 동적으로 되어 있었는데 다행입니다 ㅋㅋ 이제는 좀 안심 할수 있겠네요 ㅠㅠ 전 스푸핑 관련 때문에 골치 아파서 ㅋㅋ

Write a comment