1. PSA란?
PSA는 Portable Service Abstraction의 약자이며, 환경의 변화와 관계없이 일관된 기술로의 접근 환경을 제공하는 추상화 구조이다. PSA가 적용된 코드는 나의 코드를 그대로 유지한 채 다른 기술로 간편하게 바꿀 수 있도록 확장성이 좋고, 기술에 특화되어 있지 않는 코드를 의미한다.
Spring은 Spring Web MVC, Spring Transaction, Spring Cache 등의 다양한 PSA를 제공한다.
서블릿을 사용하여 개발한다면 아래와 같은 순서로 진행된다.
1) HttpServlet을 상속받아 서블릿 객체를 만든다.
2) doGet(), doPost() 등을 오버라이딩하여 get, post 요청을 처리할 메소드를 생성한다.
3) 이러한 서블릿을 web.xml에 맵핑하여 특정 요청이 들어올 때 해당 메소드를 실행시킬 수 있도록 한다.
예제에서 서블릿 애플리케이션을 만들고 있음에도 불구하고 서블릿을 전혀 쓰지 않는다.
@GetMapping, @PostMapping 이라는 어노테이션을 사용하고, 어노테이션에 url을 입력한다.
그럼 내부적으로 서블릿 기반 코드가 동작하게 된다.
위와 같이 추상화 계층을 사용하면 더 편하게 코딩할 수 있다.
또한 코드를 거의 변경하지 않고 여러가지 기술을 다른 걸로 바꿀수 있다. 어노테이션, 인터페이스 등을 서블릿으로도 코딩할 수 있고, 리액티브로 코딩할 수도 있다. 서버를 Tomcat, Jetty, Netty, Undertow 등으로 바꿔가며 쓸 수 도 있기 때문에 portable 서비스라고 부른다.
2. Spring MVC
스프링이 제공하는 Spring Web MVC는 추상화 계층의 하나이다. 서블릿을 low level로 사용하지 않아도 되기 때문이다. 즉 HttpServlet을 직접 쓰지 않아도 되고 맵핑도 훨씬 간편하게 할 수 있다.
Controller
@Controller 어노테이션을 사용하면 요청을 맵핑하는 컨트롤러 역할을 수행하는 클래스가 된다. 컨트롤러 클래스 안에서 @GetMapping, @PostMapping 으로 요청을 맵핑하면 url, 요청에 따라 해당 메소드가 일을 처리한다.
View
맵핑된 각 메소드는 view 이름을 리턴하게 되고, 요청이 끝나면 해당 페이지로 이동하게 된다.
Model
리턴할 때 데이터를 model에 담아 전달한다.
우리는 스프링 웹 MVC를 사용하여 서블릿 애플리케이션을 간편하게 개발할 수 있다.
3. Spring Transaction
트랜잭션은 DB에서 쿼리를 날릴 때 하나의 세트 작업이다. All or Nothing이라는 속성이 있는데, 하나라도 잘못되면 모든 작업을 취소해야한다는 의미이다.
보통 소스에서 트랜잭션 처리를 하려면 실질적인 쿼리 소스 전 후로 추가 작업이 필요하며, 이는 굉장히 로우 레벨로 처리하는 소스이다.
try {
~~
dbConnection.setAutoCommit(false);
~query~
dbConnection.commit();
} catch (SQLExceptino e) {
dbConnection.rollback();
}
스프링이 제공해주는 추상화계층 레벨은 @Transactional 이라는 어노테이션이다. 이 어노테이션이 붙어있는 메소드는 트랜잭션 처리가 되기 때문에 우리가 명시적으로 커밋 관련 소스를 작성하지 않아도 된다.
기존 코드를 변경하지 않은 채로 트랜잭션을 관리하는 구현체를 사용하는 기술에 따라 다르게 바꿔 사용할 수 있는데, 이것도 portable service abstraction이라고 볼 수 있다. (ex : JpaTransacionManager, DatasourceTransactionManager, HibernateTransactionManager..)
이 포스팅은 예제로 배우는 스프링 입문 (개정판) 강의를 수강하며 작성되었습니다.
[지금 무료] 예제로 배우는 스프링 입문 (개정판) 강의 - 인프런
이 강좌는 스프링 프레임워크에 입문하는 분들을 위한 강좌입니다.Spring - PetClinic이라는 스프링 공식 예제 프로젝트의 코드를 보며, 다음의 스프링의 핵심 기능을 쉽고 빠르게 이해할 수 있습니
www.inflearn.com
'Spring Framework' 카테고리의 다른 글
[스프링 입문] 스프링 웹 개발 기초 (0) | 2024.01.19 |
---|---|
[스프링 입문] 강의 소개 및 프로젝트 환경 설정 (0) | 2024.01.17 |
[예제로 배우는 스프링 입문] 스프링 AOP (0) | 2023.12.16 |
[예제로 배우는 스프링 입문] 스프링 IoC (0) | 2023.12.12 |
프로젝트 설정 (0) | 2023.12.11 |