실패라고 하긴 뭐하지만 

DB Export 해야하는상황에서 익숙하게 작업할 수 있는 CSV를 이용 했는데 사용자자측 관점에서는 잘못 된 선택이 였던 것 같다.


 사용자들은 CSV 파일을 주로 엑셀로 여는데 이때 POI 등 기타 엑셀 라이브러리를 사용하는 것과 다르게 CSV 파일은  Cell 타입 컨트롤이 불가능하고

0으로 시작하는 숫자들 (우편번호) 등에서 맨 앞에 0이 생략 되고 12자리수 이상 숫자도 지수표현식으로 자동포매팅 되는데 이것도 복사붙여넣기하거나 엑셀로 다시 저장하면 원본 데이터를 잃고 보여지는대로 저장/복사된다.

 편법을 통해 문자열 처럼 다룰 수 있기는 하지만 사용자가 어떤 방식으로 다시 가공하고 업로드하는지를 알 수 없는 점을 고려해 엑셀로 다시 작업 하기로 함.



요약


문제 : 일반 사용자는 CSV 파일 형식에 익숙하지 않을 수 있고, 어떤 방식으로 가공하는지 알 수없다.

해결 : 우리나라에서 범용적인 엑셀을 이용하기로했다. CSV는 용도가 명확한 경우에만 사용하자.

DB 를 조회해서 CSV 파일로 다운로드하는 작업이 로컬에서는 동작하는데 운영서버에서는 한글이 깨진다.


확인 해본 결과 FileWriter 를 만들 때 케릭터셋을 지정해주지 않으면 디폴트 케릭터셋이 들어가고 이는 운영환경에 따라 달라질 수 있다.


// 원래 코드
new OutputStreamWriter(new BufferedOutputStream(response.getOutputStream()));
// 수정
new OutputStreamWriter(new BufferedOutputStream(response.getOutputStream()),Charset.forName("EUC-KR"));


euc-kr 을 이용한 이유는 utf-8 , utf-16 등 케릭터셋을 이용하면 ms-office로 csv 파일을 열때 한글이 깨진다. 

운영서버 기본 케릭터 셋이 utf 로 생각됨. 


요약


원인 : FileWriter 만들때 케릭터셋을 명시하지 않으면 기본 케릭터셋이 들어가고 이는 운영 환경마다 다르다.

해결 : 케릭터셋을 명시적으로 넣어주거나 운영환경과 개발환경 세팅을 똑같이 한다.

+ Recent posts