본문 바로가기
Programming/Java

[petclinic] PSA

by minux_s 2020. 11. 28.
728x90

PSA: portable service abstraction

우리가 보고있는 코드에 보다시피 우리는 서블릿 애플리케이션을 만들고 있음에도 불구하고 서블릿을 전혀 쓰고있지 않다.

-> OwnerCreateServlet 등을 만들어서 

 

public class OwnerCreateServlet extends HttpServlet{
     @Override
     protected void doGet(HttpServletRequest rep, HttpServletResponse resp) throws{
          super.doGet(req,resp);
     }

    @Override
     protected void doPost(HttpServletRequest rep, HttpServletResponse resp) throws{
          super.doPost(req,resp);
     }
}

이런 메소드 들을 overriding해서 doGet,doPost 등을 처리하고 서블릿을 web.xml이라는 파일에 매핑해서 특정한 요청이 들어올 때, 가령 owner/create 요청이 오면 get이면 doget, post면 dopost에서 처리

 

이런식으로 우리는 하지않고, mapping을 어떻게 하냐면 getmapping이라는 어노테이션을 사용해서 owner/new라는 get 요청이 들어오면 이 때 메소드가 실행. post면 PostMapping이 실행

따라서 이런 추상화 객체를 사용하면 더 편하게 코딩이 가능

 

스프링은 주로 다양한 기술의 service abstraction을 제공하는데, 가장 먼저 볼 건 스프링 mvc에 관련된 service abstraction을 본다.

@RequestMapping -> postmapping,getmapping

@Controller: 요청을 매핑할 수 있는 컨트롤러 역할을 수행하는 클래스가 된다. 이 클래스 안에다가 @GetMapping, @Postmapping으로 요청을 매핑한다. 요청을 매핑한다는 것은 뒤에 있는 URL에 해당하는 요청이 오면 이 요청을 이 메소드가 처리하게끔 한다.

 

기본적으로 스프링부트 기반의 애플리케이션을 실행하면 톰캣 기반으로 실행이 된다. 근데 이걸 코드를 거의 그대로 둔 상태로 완전히 다른 기술 스택으로 실행하는 것도 가능. webflux 

 

스프링 웹mvc는 controller, requestmapping 이런 어노테이션, 그리고 그 뒷단의 여러가지 복잡한 인터페이스, 기반 시설을 기반으로 servlet 또는 reactive로 코딩할 수 있다.

밑단의 서버도 톰캣, 제티, 네티, 언더토우 등으로 바꿔가며 사용 가능. 코드를 거의 변경하지 않고!

 

이렇게 스프링 웹 mvc가 PSA의 한 가지이다.

 

다음은 스프링 트랜젝션.

스프링 트랜젝션이 뭐냐면 원래 트랜젝션처리 하려면 (트랜젝션이란 데이터베이스에서 어떤 데이터를 주고받는다고 가정했을떄, A를 하고 B하고 C 까지 다 되어야 하나의 작업으로 완료해야하는 경우, A,B,C 중 하나라도 안되면 다 안되어야하는 경우. ALL OR NOTHING이라는 속성 중 하나.

 

JDBC에서 가장 기본적으로 트렌젝션하는 코드가.. 

 

dbConnection setAutoCommit(false);

 

SQL이 여러번 날아가도 커밋하지 않고 기다리다가 명시적으로 dbConnection.commit()이라고 하면 그때 커밋한다.

 

하지만 스프링의 트렌젝션의 처리는  @Transactional 이거 하나만 붙이면 된다.

 

이것도 역시 여러가지 다양한 기술로 바꿔서 쓸 수 있는 portable service abstraction이다,

일단 편리한 인터페이스 제공하기 때문에 service abstraction이고, portable이 붙는 이유는

jdbc를 사용하는 datasource transactionmanager를 쓸 수도 있고, 또는 hibernade나 JPA를 사용하는 경우 JPA TransactionManager를 사용할 수도 있다. 

 

추가로 스프링캐시? 라는 것도 있다.ehcache, javax.cache ...

캐시도 구현체가 여러가지 있는데 @Cacheable 어노테이션만 써주면 구현체는 신경쓰지 않아도 코드가 바뀌지 않는다.

 

 

728x90

'Programming > Java' 카테고리의 다른 글

[Spring Framework] IOC Container  (0) 2020.12.06
[Spring Framework] AutoWired  (0) 2020.12.06
[Spring Framework] 스프링 소개  (0) 2020.12.02
[petclinic] AOP 소개  (0) 2020.11.28
[petclinic] maven surfire 오류 해결 방법  (0) 2020.11.22

댓글