Open Leehyoungwoo opened 1 month ago
@Controller
@Service
@Repository
@Service
를 적용@Entity
, @Table
등 JPA를 위해 사용하는 애노테이션 제거
@Entity
는 JPA를 사용하지 않으면 아무런 동작도 하지 않음
⇒ @Entity
가 JPA에 의존한다고 보지 않을 수 있음, 다른 데이터 기술에서 사용해도 괜찮음@Entity
를 사용하지 않고 싶다면, META-INF
하위에 XML 파일로 엔티티의 메타 정보를 추가하면 되기는 함PlatformTransactionManager
로 트랜잭션 (인프라) 서비스를 추상화를 해두었음데코레이터 패턴과 프록시 패턴의 차이는?
추가 정리할 것
서비스 추상화 (Service Abstraction)
서비스 - @Service
스프링에 대한 오해
스프링은 @Controller, @Service, @Repository만 기계적으로 찍어내는 개발 방법?스프링 애플리케이션 빈이 존재하는 계층 구조
서비스는 일반적인 용어라 쓰이는 곳에 따라 다른 의미를 가짐
서비스의 종류
애플리케이션 서비스 도입 - @Service
기술에 독립적인 애플리케이션 서비스
OrderService
Order
Order에서 JPA 메타데이터 분리
/META-INF/orm.xml
특정 기술(JPA)에 의존하지 않는 애플리케이션 서비스 만들기
트랜잭션 서비스 추상화 - PlatforeTransactionManager
Transaction은 데이터 기술에 따라 방법이 다르다
JDBC
JPA
MyBatis
Jooq
추상화
개별 트랜잭션 기술의 디테일에 의존하는 클라이언트
PlatformTransactionManager<<interface>>
JpaTransactionManager
,DataSourceTransactionManager
JDBC 데이터 엑세스 기술 - JdbcAsync/DataSourceTransactionManager
JdbcClient
DataSourceTransactionManager
트랜잭션 프록시
OrderService에서 기술 관련 코드 제거
트랜잭션 테스트
트랜잭션 프록시
데코레이터 패턴
프록시 패턴
데코레이터와 프록시는 유사함
트랜잭션 프록시
트랜잭션 프록시 적용
예시 코드
스프링이 만들어주는 트랜잭션 프록시
스프링의 프록시 AOP