Portable Service Abstraction (PSA)
- 추상화된 계층을 사용하여 편리하게 구현할 수 있다. (Service Abstraction)
- 코드를 수정하지 않고 전혀 다른 기술 스택을 사용할 수 있다. (Portable)
Service Abstraction
- Spring으로 Servlet Applicaiton을 만들고 있지만 서블릿 코드를 전혀 쓰지 않음
- 서블릿 프로그래밍? HttpServlet 상속 클래스에서 Http Request 처리 -> web.xml 맵핑
- Spring에선? Mapping Annotation만 사용하면 내부는 서블릿 기반 작동
Portable
- 코드를 건들지 않고 다른 기술로 바꿀 수 있다.
- ex. 현재 Tomcact으로 실행중 -> Webflux로 손쉽게 교체가능
- webflux : 서블릿 구조X / CPU개수만큼 스레드로 요청받으면서 가용성을 높임
스프링MVC에 적용된 Service Abstraction
- @Controller 안의 Mapping Annotation (@GetMapping, @PostMapping, ...)
- Mapping Annotation은 name, value, path, params, headers 등의 속성
- 요청에 대한 정보를 보유
- 이에 맵핑되는 요청일 때만 해당 메소드가 처리
- 해당 메소드는 view name 반환
- resources/templates 안의 경로 따라감
- 해당 뷰 템플릿에서 전달된 model 속 객체 사용가능!
- @Transactional
- 어노테이션만 붙이면 자세한 JDBC 코드를 작성하지 않아도 트랜젝션 처리
- Hibernate나 JPA를 사용할 경우 구현체를 바꿀 수 있다. 코드를 변경하지 않은 채로!
- @Cacheable
- cache solution을 변경하게 되더라도 비즈니스 로직은 변경되지 않는다. (캐싱 설정만 수정)
- ex. memcached -> redis
'학습 > Spring' 카테고리의 다른 글
[spring] 스프링부트 프로젝트 초기 세팅 시 빌드 툴의 이해 (maven, gradle) (0) | 2020.03.25 |
---|---|
[spring] 스프링부트 프로젝트 초기 생성 및 구조 (gradle) (0) | 2020.03.23 |
[spring] 핵심2_Aspect Oriented Programming (0) | 2020.03.21 |
[spring] 핵심1_Inversion Of Control / Bean / Dependency Injection (0) | 2020.03.21 |
[spring] @RequestParam과 @PathVariable (0) | 2020.02.15 |
댓글