어느 날, 일련의 데이터를 간단한 텍스트 파일로 저장하려고 알아보다 보니, 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") 이기 때문에, 별도의 작업을 해주어야 했습니다.
뭐랄까 살짝 귀찮아지는...
그런 측면에서, 개발툴에서 제공하는 플러그인을 이용하는 것은 괜찮은 방법입니다.
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 |