-
PSA(Portable Service Abstraction)
우리는 서블릿 애플리케이션을 만들고 있음에도 서블릿을 전혀 쓰지 않고 있다.
서블릿의 형태는 doGet() doPost() 메소드가 있고 web.xml에 맵핑을 하는 형태인데, 안 쓰고 있다는 뜻이다.
우리는 GetMapping 애노테이션을 붙여서 요청에 따라 메소드를 실행하는 형태임
이보다 아래 계층은 서블릿 기반으로 코드가 동작함
따라서 이러한 추상화 계층을 사용하면 우리는 좀 더 편하게 코딩을 할 수 있음
-
스프링 웹 MVC
스프링 웹 mvc가 제공하는 추상화 계층, PSA 중에 하나
@Controller
컨트롤러 역할을 수행하는 클래스가 된다.
겟, 포스트 매핑으로 요청을 맵핑한다.(요청에 따라 해당되는 서비스로 가줌)
스프링 웹 mvc를 사용해서 서블릿 애플리케이션을 간편하게 개발할 수 있는데는 스프링이 제공해주는 여러 가지 기능들을 이용할 수 있으므로
@Controller, @RequestMappling .....
여러 복잡한 인터페이스, 기반 시설을 기반으로 우리는 Servlet, Reactive로 코딩을 할 수도 있다.
또 서버를 마음대로 톰캣, 제티, 네티, 언더도우로 바꿔가며 쓸 수도 있다.
추상화 계층을 이용하면
코드를 거의 변경하지 않고
-
스프링 트랜잭션 (PlatformTransactionManager)
트랜잭션은 어떤 작업의 모든 과정이 완료되어야 모든 작업이 되고, 하나라도 제대로 처리되지 않으면 모든 작업이 무효화됨
트랜잭션의 전체적 흐름으로는 (로우 레벨일 경우, 이 모든 과정 코드로 작성)
dbConnection.setAutoCommit(false);를 해주면
자동적으로 커밋이 되는 것을 하지 않고 모든 과정이 완료된 후 명시적으로 커밋을 하면 커밋이 되도록 한다.
그리고 여러 과정 중 에러가 하나라도 발생할 시 예외 처리단계로 가며 dbConnection.rollback();을 해서 돌려버린다.
스프링이 제공해주는 추상화 계층 레벨은 이 트랜잭셔널이라는 애노테이션만 붙이면 이 애노테이션이 붙어있는 메소드는 트랜잭션 처리가 자동적으로 되기 때문에 우리가 명시적으로 그런 코딩을 하지 않아도 됨. 개편한거지
이 기능도 역시 여러 다양한 기술로 바꿔서 쓸 수 있는 portable service abstraction 중에 하나이다.
jdbc를 사용하는 데이터 소스 트랜잭션 매니져를 쓸 수도 있고, 하이버네이트나 jpa 사용하는 경우에 JpaTransactionManger를 사용할 수 있다.
트랜잭션을 실제 관계하는 그 구현체를 우리가 사용하는 기술에 따라 다르게 바꿔낄 수 있다.
코드를 변경하지 않은 채로!!
'Blog > Spring' 카테고리의 다른 글
08.03 - 웹 개발의 이해 (0) | 2020.08.03 |
---|---|
08.03 - 웹 프로그래밍을 위한 언어 (0) | 2020.08.03 |
스프링 프레임워크 입문 - AOP 적용 예제 (0) | 2020.04.19 |
스프링 프레임워크 입문 - 프록시 패턴 (0) | 2020.04.19 |
스프링 프레임워크 입문 - AOP(Aspect Oriented Programming) (0) | 2020.04.19 |