스택큐힙리스트

자바 스프링 개발 시작하기 - 4일차 예외 처리와 CSV 통계 실습 본문

개발

자바 스프링 개발 시작하기 - 4일차 예외 처리와 CSV 통계 실습

스택큐힙리스트 2025. 7. 10. 07:58
반응형

1️⃣ try-catch-finally 기본기

  • try 블록에서 위험 구문을 실행하고, catch 블록에서 구체적 예외를 잡아 사용자 친화적 메시지로 변환합니다.
  • finally 블록은 예외 발생 여부와 관계없이 실행돼 스트림·파일·DB 커넥션 같은 자원을 반드시 정리합니다.
  • Java 7 이상이라면 try-with-resources 가 더 안전하고 간결합니다. 내부적으로 AutoCloseable.close() 가 호출돼 사실상 finally 역할을 수행합니다.

2️⃣ 도메인에 맞춘 Custom Exception

“사용자에게 정확히 무엇이 잘못됐는지 알려주지 못하면 UX는 무너진다.”

public class InvalidCsvDataException extends RuntimeException {
    public InvalidCsvDataException(String message)          { super(message); }
    public InvalidCsvDataException(String message, Throwable cause) { super(message, cause); }
}
  • 장점
    1. 서비스 계층에서 의미 있는 예외명을 그대로 던져 가독성 & 디버깅 효율
    2. @ControllerAdvice 등으로 전역 처리할 때 타입별 응답 코드 설정이 쉬움
    3. 팀원·후임이 스택트레이스를 읽지 않고도 문제 원인을 빠르게 파악

3️⃣ CSV 파일 읽어 통계 내기 – 실전 코드

try (BufferedReader br = Files.newBufferedReader(Path.of("sales.csv"));
     CSVParser parser   = CSVFormat.DEFAULT
                                   .withFirstRecordAsHeader()
                                   .parse(br)) {

    double total = 0;
    int    count = 0;

    for (CSVRecord row : parser) {
        try {
            total += Double.parseDouble(row.get("price"));
            count++;
        } catch (NumberFormatException e) {
            throw new InvalidCsvDataException(
                "price 컬럼이 숫자가 아닙니다: " + row, e);
        }
    }
    System.out.printf("평균 가격: %.2f원%n", total / count);

} catch (IOException | InvalidCsvDataException e) {
    // 로깅 & 사용자 알림
    log.error("CSV 처리 실패", e);
}
  • 흐름 이해 포인트
    1. try-with-resources 덕에 BufferedReader 와 CSVParser 가 자동 닫힘
    2. 행 단위 파싱 중 데이터 오류가 나면 즉시 커스텀 예외로 감싸 전달
    3. 최상위 catch 에서 IO 예외도메인 예외를 한 번에 관리 → 코드 단순화
    4. 통계(합계·평균·최빈값 등) 로직을 별도 메서드로 분리하면 재사용성이 높아짐

📚 이번 실습으로 얻는 베스트 프랙티스

  • 예외 계층 설계 시 표준 Exception → 도메인 Custom Exception → 글로벌 핸들러 흐름을 고정하라.
  • 입출력 작업에는 try-with-resources & 널 처리(Optional, StringUtils)로 방어 코딩.
  • CSV 라이브러리는 Apache Commons CSV·OpenCSV 모두 OK. 프로젝트 빌드 도구(Maven/Gradle)에 맞춰 의존성만 추가하면 된다.
  • 통계 결과는 DecimalFormat 으로 자리수 맞춰 출력하면 바로 레포트에 붙여넣기 가능.
반응형
Comments