2024.08.07 - [Spring] - [Spring] Spring DB : 애플리케이션 코드에 트랜잭션 적용

 

[Spring] Spring DB : 애플리케이션 코드에 트랜잭션 적용

트랜잭션이 없는 비즈니스 로직@RequiredArgsConstructor public class MemberServiceV1 { private final MemberRepositoryV1 memberRepository; public void accountTransfer(String fromId, String toId, int money) throws SQLException { Member fromMember

yjk490.tistory.com

MemberService

  • JDBC 구현 기술이 서비스 계층에 누수되는 문제
    • 트랜잭션을 적용하기 위해 JDBC 구현 기술이 서비스 계층에서 사용됨
      • Connection con = dataSource.getConnection();
    • 구현 기술을 변경해도 서비스 계층 코드의 변경은 없어야 하기 때문에 서비스 계층은 특정 기술에 종속되지 않아야 함
    • 이러한 이유로 데이터 접근 계층과 서비스 계층을 분리했으나, 트랜잭션을 적용하면서 결국 서비스 계층에도 JDBC 구현 기술의 누수가 발생함
  • 트랜잭션 동기화 문제
    • 같은 트랜잭션을 유지하기 위해 커넥션을 파라미터로 넘겨야 함
    • 이에 파생되는 문제로 동일한 기능도 트랜잭션 적용과 미적용 기능으로 분리해야 할 필요가 있음
  • 트랜잭션 적용 반복 문제
    • 트랜잭션 적용 코드를 보면 try, catch, finally 부분의 반복이 많음

MemberRepository

  • 예외 누수
    • 데이터 접근 계층의 JDBC 구현 기술 예외가 서비스 계층으로 전파
    • SQLException은 체크 예외이기 때문에 데이터 접근 계층을 호출한 서비스 계층에서 해당 예외를 잡아서 처리하거나 명시적으로 throws를 통해 다시 밖으로 던져야 함
    • SQLException은 JDBC 기술에 속하므로 향후 JPA나 다른 데이터 접근 기술로 변경하면 결국 서비스 계층 코드도 수정해야 함
  • JDBC 반복 문제
    • 지금까지 작성한 데이터 접근 계층 코드는 순수한 JDBC를 사용
    • 이로 인해 try, catch, finally 부분의 반복이 많음

+ Recent posts