[Spring Boot] 15. 디버깅 (Service)

김건우's avatar
Apr 01, 2025
[Spring Boot] 15. 디버깅 (Service)

1. @Transactional 삭제시

: 데이터베이스 변경 사항이 저장되지 않음

문제 코드

public void 상품등록(String name, int stock, int price) { // ❌ @Transactional 없음 storeRepository.save(name, stock, price); }

발생하는 오류

  • @Transactional이 없으면 트랜잭션이 자동으로 롤백될 수 있음.
  • 예를 들어, 상품삭제(id) 실행 중 예외 발생 시, 삭제 작업이 부분적으로만 적용될 가능성 있음.

오류 메시지

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query

2. storeRepository.save(name, stock, price); 삭제 시

: 상품이 등록되지 않음

문제 코드

@Transactional public void 상품등록(String name, int stock, int price) { // storeRepository.save(name, stock, price); (❌ 삭제됨) }

발생하는 오류

  • 상품등록()을 호출해도 실제로 데이터가 DB에 저장되지 않음.

오류 메시지

오류 메시지는 없지만, DB에 데이터가 저장되지 않는 문제 발생

3. storeRepository.findAll(); 삭제 시

: 상품 목록을 가져올 수 없음

문제 코드

@Transactional public void 상품등록(String name, int stock, int price) { // storeRepository.save(name, stock, price); (❌ 삭제됨) }

발생하는 오류

  • 상품 목록 API를 호출하면 항상 null이 반환됨.
  • 클라이언트가 빈 화면을 보거나, NullPointerException 발생 가능성 있음.

오류 메시지

java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "storeList" is null at com.metacoding.storev1.store.StoreController.list(StoreController.java:12)

4. if (store == null) throw new RuntimeException("상품없어"); 삭제 시

: 존재하지 않는 상품 삭제 시 오류 없음

문제 코드

public void 상품삭제(int id) { Store store = storeRepository.findByid(id); // if (store == null) throw new RuntimeException("상품없어"); (❌ 삭제됨) storeRepository.deleteById(id); }

발생하는 오류

  • 존재하지 않는 상품을 삭제하려고 할 때 오류 없이 진행됨.
  • 그러나 DB에서 null을 삭제하려 하면 DataIntegrityViolationException이 발생할 수도 있음.

오류 메시지

org.springframework.dao.DataIntegrityViolationException: could not execute statement

 
Share article

gunwoo