반응형

DAO와 트랜잭션 관리: 결합도 낮추고 단일 책임 원칙 지키기
1. DAO와 서비스 계층의 결합도 낮추기
DAO(Data Access Object)는 데이터베이스와의 상호작용을 담당하지만, 기술 변화(예: JDBC → Hibernate)가 생기면 서비스 계층 코드에도 영향을 줄 수 있습니다. 이를 방지하려면:
- 인터페이스 활용: DAO에 인터페이스를 정의해 구현체를 분리.
- DI(의존성 주입): Spring 같은 DI 프레임워크를 사용해 DAO 구현체를 동적으로 주입.
- 결과: 서비스 계층은 DAO의 구체적인 기술에 의존하지 않게 되어 결합도가 낮아짐.
2. 트랜잭션과 비즈니스 로직
- 트랜잭션 필요성: DAO를 사용하는 비즈니스 로직은 데이터 무결성을 보장하기 위해 단위 작업(트랜잭션)이 필요.
- 트랜잭션 경계설정: 트랜잭션의 시작과 종료를 지정하는 작업. 주로 비즈니스 로직 내에서 수행됨.
- 문제점: 트랜잭션 객체를 DAO에 파라미터로 전달하면 코드가 복잡해지고 비효율적.
- 해결책: Spring의 트랜잭션 동기화 기법을 활용해 트랜잭션 관리를 간소화.
3. 트랜잭션 API와 변경 문제
- 자바의 트랜잭션 API는 다양(JTA, JDBC 등)하며, 서버 환경에 따라 사용 방식이 달라짐.
- 문제: 트랜잭션 방법이 바뀌면 경계설정 코드도 수정해야 하고, 비즈니스 로직까지 영향을 받음.
- 결과: 단일 책임 원칙(SRP) 위배 + DAO 기술에 강한 결합 발생.
4. Spring의 트랜잭션 서비스 추상화
- 해결책: Spring이 제공하는 서비스 추상화 사용.
- 서비스 추상화란?: 로우레벨 트랜잭션 기술(JDBC, Hibernate 등)이나 API 변화에 상관없이 일관된 API를 제공하는 추상화 계층.
- 장점: 트랜잭션 경계설정 코드가 비즈니스 로직에 영향을 주지 않음.
- 확장성: JavaMail처럼 테스트하기 어려운 기술에도 적용 가능.
5. 테스트와 서비스 추상화
- 가치: 서비스 추상화는 테스트 작성을 쉽게 만들어줌.
- 테스트 대역: 테스트 대상이 의존하는 오브젝트를 대체하는 오브젝트.
- 역할: 테스트 대상이 원활히 동작하도록 돕고, 간접 정보 제공.
- 목 오브젝트(Mock Object): 테스트 대역 중 전달받은 정보를 검증할 수 있게 설계된 것.
** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.
이곳 저곳에서 구글링한 것과 강의 들은 내용이 정리가 되었습니다.
그림들은 그림밑에 출처표시를 해놓았습니다.
문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **
반응형
'public void static main > Book' 카테고리의 다른 글
[토비의스프링] 7장-스프링 핵심 기술의 응용 (1) | 2025.02.28 |
---|---|
[토비의스프링] 6장-AOP (0) | 2025.02.26 |
[토비의스프링] 3장-템플릿 (0) | 2025.02.21 |
[토비의스프링] 2장-테스트 (1) | 2025.01.29 |
[Elasticsearch Bible] 1장 소개 ~ 2장 동작과 구조 (1) | 2025.01.29 |
댓글