원문은 레딧에 있던거고 밑은 번역 돌린거



문제의 핵심은 ToME4가 세이브 파일을 스트리밍 ZIP 형식으로 저장한다는 점입니다. 이 방식은 Deflate 압축을 사용하며, 레벨이 바뀔 때마다 전체 월드와 그 안의 모든 오브젝트를 매번 다시 압축합니다.

구현 방식에 성능 문제를 일으키는 여러 원인이 있지만, 가장 큰 문제는 Deflate가 이제는 너무 오래된 알고리즘이라는 점입니다. 현재는 모든 면에서 우월한 **Zstandard(zstd)**가 있고, 압축률은 조금 낮더라도 CPU를 훨씬 적게 사용하는 LZ4 같은 대안도 있습니다.

기술적 한계와 구현의 문제
  • 커스텀 파일 시스템: 현재의 파일 시스템은 오래된 physfs, minizip, 그리고 단일 소스 파일 버전의 ZIP 알고리즘을 조합해 만든 커스텀 라이브러리입니다.

  • 업데이트의 어려움: Zlib-ng를 즉시 교체 가능한(drop-in) 런타임으로 사용해 성능을 어느 정도 개선할 수는 있습니다. 하지만 제가 2024년 말에 시도해 본 결과, 이를 Te4에 내장하여 컴파일하는 작업은 그야말로 악몽 같았습니다.

  • 압축 효율: 단순히 압축 방식을 Deflate에서 zstd로 바꾸기만 해도 (성능 저하의 주범인) 압축 속도가 10배 정도 향상될 수 있습니다. 참고로 zstd는 현재 .zip 형식의 공식 표준 중 하나입니다.

코드의 노후화

사실 작년에 이 코드의 성능을 고쳐보려고 ToME4 소스를 살펴봤습니다. 하지만 개발자인 DarkGod이 여러 프로젝트를 **포크(Fork)**해서 사용한 이후, 원본 프로젝트들에서 하위 호환성을 깨뜨리는 변경 사항이 너무 많이 쌓여서 코드의 상당 부분을 통째로 재작성해야 하는 수준이더군요.

코드가 한 20년까지는 아니더라도 15년 정도 된 것들인데, 그 점이 큰 비중을 차지합니다. 그가 사용한 많은 입출력(IO) 코드가 결국 원본 프로젝트에서 지원 중단(deprecated)되거나 완전히 제거된 데에는 다 이유가 있습니다.

개발 배경과 특정 사례

Te4의 IO 코드는 출시 당시 기준으로는 '충분히 괜찮은' 수준이었습니다. 베타 기간 동안 저장 성능을 개선하기 위한 업데이트가 여러 번 있었고, 실제로도 상당히 개선되었습니다. 1인 개발자가 출시 당시에 내놓은 결과물로서는 매우 뛰어난 작업이었지만, 그저 그 이후로 한 번도 업그레이드되지 않았을 뿐입니다.

  • 특정 던전 문제: 일부 던전은 생성된 이후부터 게임 전체의 저장 성능을 갉아먹습니다 (변종 샌드웜 던전이 가장 대표적입니다).

  • 직업별 차이: 포제서(Possessor) 클래스는 구조적으로 언제나 세이브와 로드 시간이 가장 느릴 수밖에 없습니다.



    요약 : 겜 방식이 구식이라 답없다. 샌드웜 알트존같은 특수 구역이나 포제서면 속도 더 느려진다
    tome5... 내야겠지?