본문 바로가기

Blog/Spring

스프링 프레임워크 입문 - PSA(Portable Service Abstraction)

 

  • 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를 사용할 수 있다.

트랜잭션을 실제 관계하는 그 구현체를 우리가 사용하는 기술에 따라 다르게 바꿔낄 수 있다.

코드를 변경하지 않은 채로!!