You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 유저 삭제 기능에서 CasCadeDeleteService와 DeleteService를 사용하고 있습니다.
두 기능은 예외 대신 경고 수준의 로그를 남기는 점을 제외하고는 동일한 로직을 가지고 있습니다.
처음에는 기존의 삭제 서비스 객체를 재사용하려고 했으나 문제가 발생하여 새로운 객체를 도입하게 되었습니다.
본문
유저 삭제 시에는 관련된 원서와 본인 인증 데이터도 함께 삭제해야 하지만, 유저 삭제 시점에 원서나 본인 인증 데이터가 존재하지 않을 수 있습니다.
기존 서비스는 삭제하려는 데이터가 없는 경우 예외를 발생시켰습니다.
그레사 try-catch를 사용해 예외 발생을 catch하여 해결하려고 하거나, nested transaction을 사용하려고 했지만,
Spring은 트랜잭션 중에 예외가 발생하고 메서드를 벗어난 경우 에러의 catch 여부와 상관없이 UnexpectedRollbackException 예외를 발생시킵니다. 또한 JPA는 nested transaction을 지원하지 않습니다.
개요
현재 유저 삭제 기능에서 CasCadeDeleteService와 DeleteService를 사용하고 있습니다.
두 기능은 예외 대신 경고 수준의 로그를 남기는 점을 제외하고는 동일한 로직을 가지고 있습니다.
처음에는 기존의 삭제 서비스 객체를 재사용하려고 했으나 문제가 발생하여 새로운 객체를 도입하게 되었습니다.
본문
유저 삭제 시에는 관련된 원서와 본인 인증 데이터도 함께 삭제해야 하지만, 유저 삭제 시점에 원서나 본인 인증 데이터가 존재하지 않을 수 있습니다.
기존 서비스는 삭제하려는 데이터가 없는 경우 예외를 발생시켰습니다.
그레사 try-catch를 사용해 예외 발생을 catch하여 해결하려고 하거나, nested transaction을 사용하려고 했지만,
Spring은 트랜잭션 중에 예외가 발생하고 메서드를 벗어난 경우 에러의 catch 여부와 상관없이
UnexpectedRollbackException
예외를 발생시킵니다. 또한 JPA는 nested transaction을 지원하지 않습니다.동일한 예외에 대한 더 자세한 설명은 배민 기술 블로그의 관련 글에서 확인할 수 있습니다.
따라서, 이러한 예외를 발생시키지 않으면서 CascadeDeleteOOOService와 DeleteOOOService를 통합해야 합니다.
The text was updated successfully, but these errors were encountered: