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 구현 기술의 누수가 발생함
- 트랜잭션을 적용하기 위해 JDBC 구현 기술이 서비스 계층에서 사용됨
- 트랜잭션 동기화 문제
- 같은 트랜잭션을 유지하기 위해 커넥션을 파라미터로 넘겨야 함
- 이에 파생되는 문제로 동일한 기능도 트랜잭션 적용과 미적용 기능으로 분리해야 할 필요가 있음
- 트랜잭션 적용 반복 문제
- 트랜잭션 적용 코드를 보면
try, catch, finally부분의 반복이 많음
- 트랜잭션 적용 코드를 보면
MemberRepository
- 예외 누수
- 데이터 접근 계층의 JDBC 구현 기술 예외가 서비스 계층으로 전파
SQLException은 체크 예외이기 때문에 데이터 접근 계층을 호출한 서비스 계층에서 해당 예외를 잡아서 처리하거나 명시적으로throws를 통해 다시 밖으로 던져야 함SQLException은 JDBC 기술에 속하므로 향후 JPA나 다른 데이터 접근 기술로 변경하면 결국 서비스 계층 코드도 수정해야 함
- JDBC 반복 문제
- 지금까지 작성한 데이터 접근 계층 코드는 순수한 JDBC를 사용
- 이로 인해
try, catch, finally부분의 반복이 많음
'Spring' 카테고리의 다른 글
| [Spring] Spring DB : Spring 트랜잭션 적용 - 트랜잭션 매니저 (0) | 2024.08.29 |
|---|---|
| [Spring] Spring DB : Spring 트랜잭션 적용 - 트랜잭션 추상화와 리소스 동기화 (0) | 2024.08.18 |
| [Spring] Spring DB : 애플리케이션 코드에 트랜잭션 적용 (0) | 2024.08.07 |
| [Spring] Spring DB : 데이터베이스 연결 구조와 DB 세션 (0) | 2024.08.05 |
| [Spring] Spring DB : 트랜잭션 이해 (0) | 2024.08.05 |