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
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
스프링과 문제 해결 - 트랜잭션
1️⃣ 문제점들
✅애플리케이션
✅ 순사한 서비스 계층
프레젠테이션 계층은 클라이언트가 접근하는 UI와 관련된 기술인 웹, 서블릿, HTTP 와 관련된 부분을 담당한다. 따라서 서비스 계층을 이런 UI와 관련된 기술로부터 보호해준다.데이터 접근 계층은 데이터를 저장하고 관리하는 기술을 담당해준다. 따라서 JDBC, JPA와 같은 구체적인 데이터 접근 기술로부터 서비스 계층을 보호해준다.✅ 문제점들
서비스 계층을 순수하게 유지하려면 어떻게 해야할까? 지금까지 개발한 MemberService 코드를 보자.
MemberServiceV1
사실 여기에도 남은 문제가 있다. (지금 단계에서 이 문제들은 이런게 있구나 참고만 하고 넘어가자)
SQLException이라는 JDBC 기술에 의존한다는 점이다.memberRepository에서 올라오는 예외이기 때문에memberRepository에서 해결해야 한다. 이 부분은 뒤에서 예외를 다룰 때 알아보자.MemberRepositoryV1이라는 구체 클래스에 직접 의존하고 있다.MemberRepository인터페이스를 도 입하면 향후MemberService의 코드의 변경 없이 다른 구현 기술로 손쉽게 변경할 수 있다.✅ 문제 정리
지금까지 우리가 개발한 애플리케이션의 문제점은 크게 3가지이다.
➡️ 트랜잭션 문제
JDBC 구현 기술이 서비스 계층에 누수되는 문제
트랜잭션 동기화 문제
트랜잭션 적용 반복 문제
➡️ 예외 누수
SQLException은 체크 예외이기 때문에 데이터 접근 계층을 호출한 서비스 계층에서 해당 예외를 잡아서 처리하거나 명시적으로throws를 통해서 다시 밖으로 던져야한다.SQLException은 JDBC 전용 기술이다. 향후 JPA나 다른 데이터 접근 기술을 사용하면, 그에 맞는 다른 예외로 변경해야 하고, 결국 서비스 코드도 수정해야 한다.➡️ JDBC 반복 문제
MemberRepository코드는 순수한 JDBC를 사용했다.이 코드들은 유사한 코드의 반복이 너무 많다.
try,catch,finally...PreparedStatement를 사용하고, 결과를 매핑하고... 실행하고, 커넥션과 리소스를 정리한다.🔗 출처
All reactions