250x250
Notice
Recent Posts
Recent Comments
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
- 오블완
- 프로그래머스
- java
- 오버라이딩
- 예외와 트랜잭션 커밋
- 서블릿
- 스프링
- 김영한
- @configuration
- 티스토리챌린지
- 싱글톤
- fielderror
- 프록시
- html form
- 참조변수
- 코딩테스트
- 코드트리조별과제
- 인터페이스
- 백준
- http 메시지 컨버터
- 테스트코드
- HttpServletResponse
- equals()
- 코드트리
- 스프링컨테이너
- 추상클래스
- DI
- objecterror
- 의존관계
- 다익스트라
Archives
- Today
- Total
minOS
예외와 트랜잭션 커밋,롤백-활용 본문
728x90
비즈니스 예외란?
비즈니스 로직을 다루다 보면 "비즈니스 예외"라는 개념이 등장한다.단순한 시스템 오류와는 다른 개념인데, 정확히 어떤 의미일까?
간단한 주문 예제를 통해 쉽게 이해해보자.
주문 처리 흐름
온라인 쇼핑몰에서 고객이 상품을 주문하면 다음과 같은 과정이 진행된다.
정상적인 주문 처리
주문 후 결제가 성공하면주문 데이터를 저장하고결제 상태를 "완료"로 변경한다.
시스템 예외 (예상하지 못한 오류)
주문 과정에서 복구 불가능한 예외 발생 (예: DB 장애, 네트워크 오류 등)전체 데이터를 롤백하고 주문을 취소한다.
비즈니스 예외 (업무 규칙에 따른 예외)
결제 잔고가 부족하면주문 데이터를 그대로 저장하지만결제 상태를 "대기"로 설정고객에게 잔고 부족을 알리고 별도의 계좌로 입금하도록 안내
비즈니스 예외의 핵심
비즈니스 예외는 시스템 예외처럼 롤백하지 않는다.그 이유는 해결 가능한 문제이기 때문이다.
고객이 잔액을 충전하면 결제를 다시 진행할 수 있다.업무 규칙을 반영한 예외 처리라고 이해하면 쉽다.
import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Slf4j @RequiredArgsConstructor public class OrderService { private final OrderRepository orderRepository; //JPA는 트랜잭션 커밋 시점에 Order 데이터를 DB에 반영한다. @Transactional public void order(Order order) throws NotEnoughMoneyException { log.info("order 호출"); orderRepository.save(order); log.info("결제 프로세스 진입"); if (order.getUsername().equals("예외")) { log.info("시스템 예외"); throw new RuntimeException("시스템 예외"); } else if (order.getUsername().equals("잔고 부족")) { log.info("잔고 부족 비지니스 예외 발생"); order.setPayStatus("대기"); throw new NotEnoughMoneyException("잔고가 부족합니다"); } else { //정상 승인 log.info("정상 승인"); order.setPayStatus("완료"); } log.info("결제 프로세스 완료"); } }
정상적인 주문 처리 테스트
시스템 예외 (예상하지 못한 오류) 테스트
비즈니스 예외 (업무 규칙에 따른 예외) 테스트
728x90
'TIL > 김영한의 스프링 DB 2편' 카테고리의 다른 글
| 예외와 트랜잭션 커밋,롤백-기본 (0) | 2025.03.03 |
|---|---|
| 트랜잭션 AOP 주의사항 - 프록시 내부 호출 (0) | 2025.03.02 |


