본문 바로가기

Blog/WYSIWYG Tool 개발

MVC 패턴을 적용한 WYSIWYG 방식의 편집 Tool 개발[5/5]

8. 저장 단계 (데이터, Asset 파일 가공 후 저장)

목적 : 편집된 상태의 데이터와 사용된 Asset 파일들을 모아 다시 불러들일 수 있는 형태로 보관한다.

앞서 우리는 "열기" 과정을 살펴 보았다. 어찌 보면 저장이라는 것은 다시 열기 위해 존재하는 행위일 것이다. 따라서 저장 단계의 모든 과정은 "다시 열기" 위한 과정을 위해 여러 요소들(주로 파일이겠죠)을 미리 준비해 놓는 단계임을 염두에 두어야 한다.
우선 "열기" 단계의 과정을 다시 살펴보자 저장 단계에 대해서도 살짝 언급되어 있다.

원본 파일 경로 확인 à 임시폴더 생성 à 임시 폴더에 원본 압축 풀기 à 작업(임시 폴더 내 파일 사용) à 저장 à Asset 폴더 정리 (사용 안된 파일, 새로 추가된 파일 가감) à XML + Asset 폴더 압축 à 원본파일 갱신

위 과정은 열기 과정과 저장 과정으로 구분 된다. 저장 과정 만을 따로 살펴보겠다.

저장 à Asset 폴더 정리 (사용 안된 파일, 새로 추가된 파일 가감) à XML + Asset 폴더 압축 à 원본파일 갱신

새로 생성한 임시폴더(작업 폴더)에는 여러 가지 사용되지 않는 파일들이 쌓여 있을 수가 있다. 예를 들면 사용자가 스테이지에 이미지를 불러왔다면 임시 폴더에는 유일한 ID로 rename 된 이미지 복사본이 생겨났을 것이다. 다시 사용자는 이 불러온 이미지가 마음에 들지 않았는지 스테이지에서 삭제하였다. 이 때 임시폴더에서도 좀 전의 복사본 파일을 삭제할 수도 있겠지만 만약 툴에서 copy & paste 기능을 지원해줘야 한다면 이 복사본의 파일 하나를 지우기 위해선 가비지 컬렉터의 레퍼런스 카운팅과 비슷한 기능을 구현해야 할 수도 있다. 왜 이미지를 불러오는데 BiteArray 데이터를 쓰지 않느냐고 물을 수도 있겠지만 여기서는 파일단위로 관리하는 방법을 택했다. 별 이유는 없다.

방법이야 여러 가지가 있겠지만 이런 저런 이유로 저장 시점에는 필요한 파일들만 간추려 저장하고 프로그램 "종료" 시 또는 "새 문서 열기"와 같은 명령이 실행 될때 임시폴더를 몽땅 지워 버리는게 가장 속편한 방법이라 생각한다. 물론 프로그램을 종료하기 전까지는 무한정 파일이 쌓일 수도 있겠지만…

여기서 가장 중요한 점은 저장하기 과정에서 데이터의 누락이 있어선 안 된다는 점이다. 경우에 따라서는 XML (컴파일에 쓰일) 데이터 이외에 프로그램 실행에 필요한 데이터가 추가로 필요할 수도 있다. 이런 모든 파일들을 하나의 압축파일로 만들어 "저장" 한다. 다시 한번 말하지만 이런 데이터와 파일들은 "열기" 편하도록 기록되고 관리되어야 한다.

9.컴파일 단계

목적 : 편집이 완료된 상태를 SWF 파일로 만든다.

위에서 만들어진 XML 파일과 Asset 파일을 합쳐 SWF 파일을 만든다. 결과물의 성격에 따라 간단한 액션 코드에서 부터 좀더 복잡하고 많은 기능이 구현되어 있는 여러 클래스 파일이나 라이브러리 등의 파일들도 함께 컴파일 시킬 수도 있다. XML파일에는 Asset 파일에 대한 ID를 함께 기록하도록 하여 함께 컴파일 될 코드에서 동적으로 참조 할 수 있도록 해야 한다. 이렇게 함께 컴파일 될 코드에 따라 결과물이 플래시 메뉴가 될 수도 또는 이미지 갤러리가 될 수도 있다. 다시 말하자면 만들고자 하는 편집 툴은 스킨 편집의 기능만을 가지고 있기 때문에 함께 컴파일 될 코드의 성격에 따라 플래시 메뉴 제작 툴도 이미지 갤러리 툴도 될 수 있는 것이다. SWF 컴파일러는 다음을 참고한다.

어떤 컴파일러를 선택하느냐에 따라 툴에서 생성할 XML 데이터의 형태가 어느 정도 결정될 것이다. 예를 들면 Flex SDK의 컴파일러를 사용한다면 생성될 XML 데이터는 MXML 형식이 가장 낳을 것이다.

10.닫기 또는 종료

목적 : 프로그램의 초기화 또는 종료한다. 프로그램에 사용된 리소스를 정리한다.

닫기(또는 종료) 과정에서는 사용자가 편집중인 데이터를 저장했는지 여부를 물어보아야 한다. 만약 비정상 종료되는 상황일지라도 최대한 이전 작업을 복구할 수 있는 방법을 제공해 주어야 한다. 우리는 임시 폴더를 생성해서 쓰기로 하였으므로 비정상 종료에 대비하여 이 폴더에 데이터만을 백업 해 둘 수도 있다. 정상 종료 과정이라면 이 임시 폴더를 모두 지웠겠지만 비 정상 종료라면 다음 프로그램을 시작할 때 이 임시폴더가 이미 생성돼 있을 것이므로 사용자에게 복구 여부를 물은 후 열기 과정을 거치면 되겠다.

맺음말

이상으로 프로그램에 필요한 가장 기초적인 기능에 대해 살펴 보았다. 사실 하나의 Application을 제작한다는 것은 대단한 인내와 끈기가 필요하고 거기에 높은 완성도를 위해선 장인정신까지도 필요로 한다. 위에서 제시한 각 단계를 구현하는 것 하나하나가 상당한 집중력을 요하는 작업이라 할 수 있다. 뭔가 복잡해지고 꼬여간다는 느낌이 오면 한번쯤은 다른 방법을 생각해 보는 것도 좋을 것 같다. 위 내용들은 전적으로 내 생각일 뿐이므로 좀더 간단하고 참신한 방법이 있을 거라고 확신한다.