반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 보안
- 웹개발
- 자료구조
- I'm Sorry
- 빅데이터
- 인공지능
- 프로그래밍언어
- 머신러닝
- 네트워크
- 데이터베이스
- 데이터분석
- 클라우드컴퓨팅
- 사이버보안
- Yes
- 데이터과학
- 버전관리
- 자바스크립트
- 데이터구조
- 컴퓨터과학
- 파이썬
- 프로그래밍
- 소프트웨어공학
- 소프트웨어
- 컴퓨터비전
- 딥러닝
- 네트워크보안
- springboot
- 알고리즘
- 컴퓨터공학
- 디자인패턴
Archives
- Today
- Total
스택큐힙리스트
자바 스프링 개발 시작하기 - 4일차 예외 처리와 CSV 통계 실습 본문
반응형
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); }
}
- 장점
- 서비스 계층에서 의미 있는 예외명을 그대로 던져 가독성 & 디버깅 효율↑
- @ControllerAdvice 등으로 전역 처리할 때 타입별 응답 코드 설정이 쉬움
- 팀원·후임이 스택트레이스를 읽지 않고도 문제 원인을 빠르게 파악
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);
}
- 흐름 이해 포인트
- try-with-resources 덕에 BufferedReader 와 CSVParser 가 자동 닫힘
- 행 단위 파싱 중 데이터 오류가 나면 즉시 커스텀 예외로 감싸 전달
- 최상위 catch 에서 IO 예외와 도메인 예외를 한 번에 관리 → 코드 단순화
- 통계(합계·평균·최빈값 등) 로직을 별도 메서드로 분리하면 재사용성이 높아짐
📚 이번 실습으로 얻는 베스트 프랙티스
- 예외 계층 설계 시 표준 Exception → 도메인 Custom Exception → 글로벌 핸들러 흐름을 고정하라.
- 입출력 작업에는 try-with-resources & 널 처리(Optional, StringUtils)로 방어 코딩.
- CSV 라이브러리는 Apache Commons CSV·OpenCSV 모두 OK. 프로젝트 빌드 도구(Maven/Gradle)에 맞춰 의존성만 추가하면 된다.
- 통계 결과는 DecimalFormat 으로 자리수 맞춰 출력하면 바로 레포트에 붙여넣기 가능.
반응형
'개발' 카테고리의 다른 글
@ControllerAdvice 전역 예외 처리 – REST API에서 메시지·HTTP Status 자동 매핑 (1) | 2025.07.10 |
---|---|
실전 포스트모템, 이렇게 쓰면 끝! (2) | 2025.07.10 |
백프레셔 한 방에 끝! 대기 큐 설계·구현 실습 가이드 (3) | 2025.07.10 |
MTTD·MTTR 완전정복: 장애 대응 속도를 2배 끌어올리는 법 (0) | 2025.07.09 |
수평 확장 vs DB 확장, 어디에 투자할까? (0) | 2025.07.09 |
Comments