어느 날, 일련의 데이터를 간단한 텍스트 파일로 저장하려고 알아보다 보니, CSV 란 녀석이 있다는 것을 알게 되었습니다.

근본이 없는 인간인지라 DB 로 저장할까 하다가, 얼마 되지도 않는 데이터를 DB 까지 쓰는 건 좀 그렇다 싶어서,

'간단한 방법들은 무엇이 있을까?' 하고 찾아보다 보니, CSV 라는 녀석이 있었습니다.

 

1. CSV 란?

 

CSV는 C-Comma, S-Seperated, V-Values or Variables 를 뜻하는 말로,

데이터를 Comma( , )  로 구분해서 사용하는 파일입니다.

흔히 구분자 - Delimiter - 를 Comma ( , )  로 사용하는 것입니다.

일부에선 Comma ( " , " ) 대신 Tab ( "\t" ) 을 사용하거나, 스페이스 ( " " ) 를 사용하기도 해서, Character-Seperated Values 라고 불리기도 합니다.

보통 MS-Excel 이나 맥의 Numbers 같은 스프레드 시트 프로그램에서 불러들여 읽고 쓸수 있습니다.

 

'일련의 데이터' 를 저장한다고 했는데, <번호>, <이름>, <점수> 와 같은 간단한 정보 50개 정도였습니다.

그 예제는 아래와 같습니다. 보시다시피, 한 줄이 하나의 레코드를 의미합니다.

 

1,홍길동,50
2,임꺽정,60
3,김삿갓,100

 

여기서, 한 가지 의문이 생길 수 있습니다.

만약, 구분자로 Comma( " , " ) 를 사용한다면, 데이터 안에 Comma( " , " ) 는 어떻게 표시하지?

- 이 때는 따옴표 ( " \" " )를 사용합니다. 예제는 아래와 같습니다.

 

1,"홍,길동",50
2,임꺽정,60
3,김삿갓,100

 

위와 같은 사례만 보아도, CSV 포맷이 데이터 오염에 취약한 편이라고 할 수 있겠습니다.

그럼에도, 이 파일 포맷이 여전히 애용되는 이유는 데이터의 크기가 작기 때문입니다.

그리고, 입력되는 데이터가 명확하다면, (예를 들어, 데이터 안에 CRLF, Comma( " , " ), Quote ( " \" " ) 가 없다면,)

Parser 를 구현하는 것은 매우 간단, 단순하여, 굳이 잘 만들어진 Library 를 찾지 않아도 됩니다.

 

 

2. 실사용

 

(1) JAVA Library

 

- Apache Commons CSV : https://commons.apache.org/proper/commons-csv/

- OpenCSV : http://opencsv.sourceforge.net/

- Super CSV : http://super-csv.github.io/super-csv/

 

뭐랄까 'Open' 이란 키워드가 붙어있으면, 더 믿음직해보여서 일단 한 번 사용해봤고,

github 에서 검색해서 나온 결과값으로 생각보다 괜찮아 보여서 사용해봤는데,

이 조그만 스펙을 가지고도 예외처리와 사용법을 익히다 보니,

의외로 라이브러리를 잘 안 찾게 되어, 뭐랄까 추천하기는 살짝 애매합니다.

그냥 프로젝트 스펙에 맞춰 적당한 방법 혹은 라이브러리를 사용하시는 것이 무난하리라 봅니다.

 

 

(2) CSV Editor

 

본래 목적은 Excel 같은 파일에서도 조금 쉽게 편집해서 데이터를 추가한 뒤,

이 파일을 코드로 별도의 작업을 하려던 것이었는데, 의외로 MS Excel 은 한글을 가져오는데 약간의 문제가 있었습니다.

그리고, MS Excel 은 csv 확장자 파일의 기본 구분자(seperator)가 탭("\t") 이기 때문에, 별도의 작업을 해주어야 했습니다.

뭐랄까 살짝 귀찮아지는...

 

그런 측면에서, 개발툴에서 제공하는 플러그인을 이용하는 것은 괜찮은 방법입니다.

 

intelliJ IDEA CSV Plugin 화면

 

intelliJ IDEA CSV Plugin 사용 화면 : Text Editor 옆에 탭으로 Table Editor 가 추가되어 있어 사용하기 편리, 행마다 다른 글씨색은 덤

 

 

3. 마치며

 

별도의 CSV 스펙으로 '#' 을 주석으로 처리합니다.

 

현재는 '#' 을 주석처리하는 코드를 만들기가 귀찮아서, Apache Commons CSV 를 사용하고 있습니다. ㅎㅇ -_-;;

 

 

 

'Software Develop' 카테고리의 다른 글

GitHub Copilot 신청 및 사용 후기  (0) 2021.11.01
Github Badge - 깃헙 뱃지, 그리고, SVG  (0) 2020.10.20
Code Kata  (0) 2020.04.23