안녕하세요, 20년차 자바 개발자 코딩하는곰입니다. 오늘은 실무에서 자주 마주치는 CSV 파일 처리에 대해 깊이 있게 다루어보려고 합니다. 데이터 교환의 표준 형식인 CSV는 다양한 시스템 간 데이터 이동에 필수적이죠. 이 글에서는 순수 자바 코드부터 유명 라이브러리 활용까지, 현업에서 바로 적용 가능한 다양한 방법을 상세히 소개드리겠습니다. 특히 대용량 처리 시 발생할 수 있는 성능 문제와 그 해결책도 함께 다룰 예정이니 끝까지 함께 해주세요!
가장 기본적인 방법부터 시작해보겠습니다. 자바 표준 라이브러리만으로 CSV 파일을 처리하는 방법은 크게 두 가지가 있습니다.
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class BasicCSVReader {public static void main(String[] args) {String filePath = "data.csv";try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {String line;while ((line = br.readLine()) != null) {String[] values = line.split(",");// 처리 로직System.out.println(Arrays.toString(values));}} catch (IOException e) {e.printStackTrace();}}}
이 방식은 간단하지만 몇 가지 주의점이 있습니다:
import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;public class BasicCSVWriter {public static void main(String[] args) {String filePath = "output.csv";String[] headers = {"이름", "나이", "직업"};String[][] data = {{"홍길동", "30", "개발자"},{"김철수", "25", "디자이너"}};try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) {// 헤더 작성bw.write(String.join(",", headers));bw.newLine();// 데이터 작성for (String[] row : data) {bw.write(String.join(",", row));bw.newLine();}} catch (IOException e) {e.printStackTrace();}}}
기본 방식의 장점은 별도의 라이브러리가 필요 없다는 것이지만, 복잡한 형식의 CSV를 처리하기에는 한계가 있습니다. 다음 장에서는 더 강력한 라이브러리를 소개드리겠습니다.
OpenCSV는 CSV 처리에 특화된 인기 라이브러리입니다. 의존성 추가가 필요하며, Maven 프로젝트라면 pom.xml에 다음을 추가합니다:
<dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>5.7.1</version></dependency>
import com.opencsv.CSVReader;import com.opencsv.exceptions.CsvException;import java.io.FileReader;import java.io.IOException;import java.util.List;public class OpenCSVReaderExample {public static void main(String[] args) {try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {List<String[]> allData = reader.readAll();for (String[] row : allData) {System.out.println(Arrays.toString(row));}} catch (IOException | CsvException e) {e.printStackTrace();}}}
OpenCSV의 장점:
import com.opencsv.CSVWriter;import java.io.FileWriter;import java.io.IOException;public class OpenCSVWriterExample {public static void main(String[] args) {try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) {// 헤더 작성writer.writeNext(new String[]{"이름", "나이", "직업"});// 데이터 작성writer.writeNext(new String[]{"홍길동", "30", "개발자"});writer.writeNext(new String[]{"김철수", "25", "디자이너"});} catch (IOException e) {e.printStackTrace();}}}
OpenCSV는 설정을 통해 구분자, 따옴표 처리 방식 등을 유연하게 변경할 수 있어 실무에서 매우 유용합니다.
스트레스 해소와 두뇌 훈련을 동시에 하고 싶다면, 편안한 분위기의 스도쿠 저니: 크립토 할아버지가 완벽한 선택입니다.
아파치에서 제공하는 Commons CSV는 또 다른 강력한 선택지입니다. Maven 의존성 추가:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.9.0</version></dependency>
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVParser;import org.apache.commons.csv.CSVRecord;import java.io.FileReader;import java.io.IOException;import java.io.Reader;public class CommonsCSVReader {public static void main(String[] args) {try (Reader reader = new FileReader("data.csv");CSVParser csvParser = new CSVFormat.Builder().setHeader().setSkipHeaderRecord(true).build().parse(reader)) {for (CSVRecord record : csvParser) {String name = record.get("이름");String age = record.get("나이");System.out.println(name + ", " + age);}} catch (IOException e) {e.printStackTrace();}}}
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;public class CommonsCSVWriter {public static void main(String[] args) {try (Writer writer = new FileWriter("output.csv");CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("이름", "나이", "직업"))) {csvPrinter.printRecord("홍길동", 30, "개발자");csvPrinter.printRecord("김철수", 25, "디자이너");csvPrinter.flush();} catch (IOException e) {e.printStackTrace();}}}
Commons CSV의 특징:
두뇌 건강을 위한 재미있는 퍼즐 게임을 찾고 있다면, 크립토 할아버지의 스토리와 함께하는 스도쿠 저니를 추천합니다.
오늘은 자바에서 CSV 파일을 처리하는 다양한 방법을 살펴보았습니다. 기본 IO부터 OpenCSV, Apache Commons CSV까지, 각 방법마다 장단점이 있으니 프로젝트 요구사항에 맞게 선택하시면 됩니다. 특히 대용량 파일을 다룰 때는 메모리 사용량과 성능을 반드시 고려해야 합니다. 더 궁금한 점이 있으면 댓글로 남겨주세요! 다음 시간에는 더 유용한 자바 실무 팁으로 찾아오겠습니다. 코딩하는곰이었습니다. 감사합니다!
🎭 문화와 예술을 가까이에서 느끼고 싶다면, 2025 전주세계소리축제를 참고해보세요.
