on
스프링 PSA
예제로 배우는 스프링 입문 (개정판)의 내용을 정리하는 포스트
스프링 PSA
PSA??
PSA는 Protable Service Abstraction의 약자로 스프링이 제공하는 것으로 Spring Triangle의 한 요소이다.
지금까지 Servlet Application을 만들고 있지만 Servlet을 전혀 사용하지 않았다. Servlet 개발 경험이 있다면 다음과 같은 코드를 볼 수 있었을 것이다.
package org.springframework.samples.petclinic.owner;
import javax.servlet.ServletException;
import javax.servlet.HttpServlet;
import javax.servlet.HttpServletRequest;
import javax.servlet.HttpServletResponse;
import java.io.IOException;
// /owner/create
public class OwnerCreateServlet extends HttpServlet {
// GET
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
super.doGet(req, resp);
}
// POST
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
super.doPost(req, resp);
}
}
Servlet을 이용했다면 /owner/create
라는 URL을 통해서 GET이라는 HTTP 메서드로 들어오면 doGet
이, POST라는 HTTP 메서드로 들어오면 doPost
가 호출되었을 것이다. 원래라면 이런 식으로 Servlet을 만들고 Mapping을 해야한다.
우리가 사용하는 예제를 보면 조금 다르다.
OwnerController.java
...
@GetMapping("/owners/new")
public String initCreationForm(Map<String, Object> model) {
...
}
@PostMapping("/owners/new")
public String processCreationForm(@Valid Owner owner, BindingResult result) {
...
}
...
다음과 같이 @GetMapping
, @PostMapping
이라는 annotation을 사용해서 요청을 받으면 메소드를 실행한다. 추상화된 객체로 코딩을 했지만, 실제로 그 아래에서는 Servlet으로 동작하고 있다.
스프링 웹 MVC
스프링 웹 MVC(Model View Controller)라는 추상화 계층을 살펴보자. 스프링 웹 MVC도 스프링 PSA 중 하나이다.
@Controller
라는 annotation을 사용하면 요청을 Mapping 할 수 있는 컨트롤러 역할을 수행하는 클래스가 된다. 내부에 @GetMapping
이나 @PostMapping
을 사용하여 요청을 Mapping 할 수 있다. Mapping을 한다는 것은 URL에 해당하는 요청이 들어왔을 때 해당 메소드가 그 요청을 처리하게끔 하는 것이다.
스프링 트랜잭션
트랜잭션은 쉽게 말해서 다 같이 되거나 아니면 다 같이 안되는 것을 말한다. 스프링에서는 @Transcational
이라는 annotation을 제공하기 때문에 @Transcational
만 추가하면 트랙잭션 처리를 알아서 해준다.
Reference
Comments
SPRING 의 다른 글
-
스프링 타입 컨터버 24 Jun 2022
-
API 예외 처리 17 Jun 2022
-
예외 처리와 오류 페이지 12 Jun 2022
-
로그인 처리 - 인터셉터 08 Jun 2022
-
로그인 처리 - 필터 06 Jun 2022
-
로그인 처리 - 쿠키, 세션 31 May 2022
-
Bean Validation 22 May 2022
-
검증 22 May 2022
-
메시지, 국제화 21 May 2022
-
타임리프 - 스프링 통합과 폼 19 May 2022
-
타임리프 - 기본 기능 10 May 2022
-
스프링 MVC 기본 기능 - 웹 페이지 만들기 02 May 2022
-
스프링 MVC 기본 기능 - HTTP 응답 30 Apr 2022
-
스프링 MVC 기본 기능 - HTTP 요청 24 Apr 2022
-
스프링 MVC 기본 기능 - 요청 매핑 19 Apr 2022
-
스프링 MVC 기본 기능 19 Apr 2022
-
스프링 MVC 구조 이해 14 Apr 2022
-
MVC 프레임워크 만들기 - V4, V5 12 Apr 2022
-
MVC 프레임워크 만들기 - V1, V2, V3 09 Apr 2022
-
서블릿, JSP, MVC 패턴 05 Apr 2022
-
서블릿 29 Mar 2022
-
웹 애플리케이션 이해 24 Mar 2022
-
스프링 웹 계층이란? 05 Nov 2021
-
스프링 시큐리티 공식문서 번역 27 Sep 2021
-
스프링 AOP 총정리 : 개념, 프록시 기반 AOP, @AOP 27 Apr 2021
-
SpEL (스프링 Expression Language) 25 Apr 2021
-
데이터 바인딩 추상화 : Converter와 Formatter 21 Apr 2021
-
데이터 바인딩 추상화 : PropertyEditor 12 Apr 2021
-
Validation 추상화 10 Apr 2021
-
Resource 추상화 08 Apr 2021
-
IoC 컨테이너 9부 07 Apr 2021
-
IoC 컨테이너 8부 06 Apr 2021
-
IoC 컨테이너 7부 02 Apr 2021
-
IoC 컨테이너 6부 29 Mar 2021
-
IoC 컨테이너 5부 27 Mar 2021
-
IoC 컨테이너 4부 23 Mar 2021
-
IoC 컨테이너 3부 20 Mar 2021
-
IoC 컨테이너 2부 18 Mar 2021
-
IoC 컨테이너 1부 12 Mar 2021
-
스프링 PSA 07 Jan 2021
-
스프링 @AOP 실습 07 Jan 2021
-
프록시 패턴 06 Jan 2021
-
스프링 AOP 04 Jan 2021
-
의존성 주입(Dependency Injection) 04 Jan 2021
-
스프링 빈(Bean) 02 Jan 2021
-
스프링 IoC 컨테이너 01 Jan 2021
-
스프링 IoC 01 Jan 2021