CSV, Comma Separated Values

데이터 기반의 웹 애플리케이션에서 데이터를 제공하는 방식은 다양합니다. 개발자들이 REST API를 통해 클라이언트와 서버 간의 데이터를 전달할 때 JSON 형식으로 주고받는 것을 선호하는 것과 별개로 시스템을 이용하는 일반 사용자들은 주로 사용하는 엑셀 프로그램에서 읽을 수 있는 XLS 또는 XLSX로 제공하기를 선호합니다.

개발자들은 엑셀 프로그램에서 사용할 수 있는 XLS 또는 XLSX 파일 형식으로 데이터를 제공하는 것을 좋아하지 않습니다. 엑셀 프로그램이 데이터를 활용하기 위한 많은 기능을 제공하여 편리한 방법이기는 하지만 자바에서 엑셀 파일 형식으로 저장하기 위해서 사용하는 Apach POI와 같은 라이브러리에서 엑셀 파일 형식에 따른 제약이나 성능 이슈가 있기 때문입니다. 엑셀 파일 형식에서 가장 기본적인 제약사항은 단일 시트에 대한 최대 행수 제한입니다. 그리고 엑셀 파일에 데이터를 기록하는 방식에 따라 서버에 부하가 발생할 수 있습니다.

현재 조직에서 개발하는 시스템은 시계열 데이터를 수집하고 이를 활용할 수 있는 기능을 제공하므로 고객이 등록한 시계열 데이터를 다운로드할 수 있는 방법도 제공하고 있습니다. 이 요건은 시계열 데이터를 집계하여 정제된 데이터를 제공하는 것이 아니므로 고객이 보유하는 에너지 자원 및 데이터 항목만큼 파일에 포함되어야하는 데이터의 건수가 기하급수적으로 늘어날 수 있으며 그에 대한 규모를 예상하기 힘듭니다. 아무리 자바 애플리케이션에서 SXSSF로 스트리밍 방식으로 엑셀 파일에 데이터를 기록하거나 어떠한 동작을 최소화하도록 코드를 최적화한다고해도 처리해야하는 데이터 건수가 많음으로 발생하는 소요 시간 및 애플리케이션 부하에 대한 이슈는 해결되지 않습니다.

이러한 대용량 데이터를 다운로드하는 요건에 대해서는 불필요한 작업을 최소하하는 방안이 중요합니다. 시계열 데이터에 대해 빠른 성능을 보여주는 시계열 데이터베이스에서 애플리케이션으로 전달되는 데이터의 양을 최대한 줄일 수 있도록 해야합니다. 시계열 데이터 특성 상 같은 시간대에 대한 데이터 항목들을 열로 표현할 수 있도록 테이블을 피봇하는 방법이 있으므로 이를 활용하면 엑셀 파일에 기록해야하는 데이터행 수를 줄일 수 있습니다.

피봇 테이블을 도입하더라도 엑셀 파일이 읽을 수 있는 바이너리 파일을 만드는 것이므로 일반적인 텍스트 파일을 기록하는 작업보다 많은 부하가 발생합니다. CSV는 RFC 4180 표준으로 되어있는 데이터 형식으로 테이블 형식으로 되어있는 데이터를 표현하기에 적합한 방법입니다. 표준으로 정의되어있기에 대부분의 스프레드시트 프로그램에서는 CSV 파일에 포함된 데이터를 불러올 수 있는 기능을 제공합니다. 시스템에서 사용하는 시계열 데이터베이스에서 테이블을 CSV로 변환할 수 있는 방법도 제공하고 있으므로 애플리케이션에서 데이터를 가공하는 별도의 작업을 하지 않고 고객에게 데이터를 전달할 수 있습니다.

시스템의 파일 다운로드 표준은 CSV이고 XLS 및 XLSX로도 다운로드할 수 있도록 인터페이스는 제공합니다만 실제로 소요되는 시간을 비교하면 극단적으로 CSV의 다운로드에 소요되는 시간이 적은 것을 확인할 수 있었습니다.