💐 Spring/Spring 핵심 기술

PSA( Portable Service Abstract )

2020. 6. 7. 00:02
반응형

PSA 란 ? 잘 만든 인터페이스

 

 

나의 코드

확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드

 

 

 

나의 코드

+++++++++

잘 만든 인터페이스(PSA)

++++++++++++++++

확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드

 

 

 

 

스프링 트랜잭션

 

 

@Transactional 이라는 annotation을 처리하는 Aspect 가 있다.

그 Aspect에서는 *PlatformTransactionManager 라는 인터페이스를 사용해서 코딩을 해놨다.

* 잘 만든 인터페이스(PSA) 의 예

 

그렇기 때문에 PlatformTransactionManager 의 여러 구현체들이 바뀌더라도, 트랜잭션의 Aspect 코드는 바뀌지가 않는다.

 

 

여기서는 Repository 라는 interface를 구현하고 있는데 , 이 프로젝트는 Spring JPA Data 를 사용하고 있기 때문에, 

SpringBoot의 자동설정에 의해서 JpaTransactionManager 가 기본으로 빈으로 등록되어있는 상태이다.

 

 

 

@Transactional을 처리하는 @Aspact는 PlatformTransactionManager 인터페이스를 사용해서

구현체가 JpaTransactionManager -> DataSourceTransactionManager 으로 바뀌어도 

그 Transactional을 처리하는 Aspect 코드는 바뀌지가 않는다.

 

 

 

스프링 캐시

 

@EnableCaching가 활성화가 되면  @Cachenable | @CacheEvict | ..... 등의 annotation을 사용할수 있는데,

사용하려면 CacheManager가 있어야한다. (이 부분은 트랜잭션과 동일하다.)

이 annotation을 처리하는 Aspect가 어딘가에 있는데 그 Aspect는 분명히 TransactionManager를 사용한다.

 

위에 코드를 보면 @Bean이 하나 있고 그 안에 JCacheMAnagerCustomizer가 있다? -> 여기선 JCacheManager를 사용한다는 말이다.

 

만약 EhCacheManagerCustomizer로 바꾼다고 하면 EhCaheManger를 쓰게 될거고, 그럼에도 불구하고 처리하는 Aspect의 코드는 바뀌지 않는다.

 

 

 

 

스프링 웹 MVC

 

 

이 코드는 @Controller 와 @GetMapping 을 사용해서 웹 MVC를 구현하고 있다.

@LogExecutionTime
	@GetMapping("/owners/new") //이런 요청이 들어오면 아래의 메소드들이 실행됨.
	public String initCreationForm(Map<String, Object> model) {
		Owner owner = new Owner();
		model.put("owner", owner);
		return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
	}

그리고 return View에 해당하는 view를 보여준다.

 

 

근데 이 코드가 survlet 일수도 있고, Reactive 일수도 있다.

 

대부분의 코드는 추상화가 되었기 때문에 survlet에서 Reactive로 바꿀수가 있다.

이것이 PSA의 가장 큰 목표고 장점이다.

반응형
저작자표시 (새창열림)
'💐 Spring/Spring 핵심 기술' 카테고리의 다른 글
  • 4. IoC 컨테이너 4부 : @Component와 컴포넌트 스캔
  • 빈을 등록하고 의존성 주입하는 방법
  • AOP (Aspect-Oriented Programming)
  • IoC (Inversion of Control) , DI (Dependency Injection)
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (262)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (3)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

최근 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
PSA( Portable Service Abstract )
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.