본문바로가기

PR

신시웨이의 최신 소식과 다양한 IT/보안 정보를 제공합니다.



Jackson 라이브러리를 사용하면 자바 객체에 담긴 내용을 Json 뿐만 아니라 CSV(Comma-Separated Values)로도 전환 할 수 있습니다. CSV는 엑셀로 파일을 바로 열어보려는 요구에서 주로 사용 되는데 자바 객체에 담긴 내용을 CSV로 전환하고 파일로 저장하는 방법을 알아 보고자 합니다.



pom.xml

jackson-databind, jackson-dataformat-csv를 추가한다.

그러나 jackson-databind에는 jackson-core, jackson-annotation 의존성이 있어, jackson-databind 만 있어도 된다.




자바 객체에서 CSV 파일 생성


CSV 형식은 데이터베이스 테이블처럼 열(Column)과 행(Row)으로 표현된다. 자바 객체를 리스트로(java.util.List)로 전달하면, 데이터를 담고 있는 변수로 컬럼을 구성하고 리스트로 들어오는 데이터를 행 단위로 써 내려가는 식이다.


Java Object(VO)


변수 위에 @JsonProperty("제목")으로 CSV Header에 해당하는 컬럼명을 별도 지정할 수 있다. @JsonPropertyOrder로 컬럼의 순서도 바꿀 수 있다. @Getter @Setter도 달아준다.





CsvMapper, CsvSchema


JSON에서 ObjectMapper를 사용한 것 처럼, CSV는 CsvMapper를 사용한다. CsvSchema로 원하는 형식을 잡아준다.





파일 생성


파일을 준비하고 ObjectWriter로 리스트 데이터로 파일을 작성한다.






CsvMapper에서 바로 파일로 내려쓰는 방법도 있지만, OutputStreamWriter에서 인코딩(MS949)을 설정하여야 UTF-8로 저장해 둔 한글을 엑셀에서 정상적으로 볼 수 있다.

`.writeAll(responseVoList)` 스키마에 넘겼던 객체의 리스트 인스턴스를 넘겨주면 끝이지만, 파일이 아닌 문자열로 받고 싶다면, JSON처럼 writeValueAsString을 쓸 수도 있다

`csvMapper.writer(csvSchema).writeValueAsString(responseDtoList);`



적용





글. SIGN팀 | 류대석