Spring

@Mapping 어노테이션

J휘 2024. 10. 31. 12:00

@RequestMapping

: 클라이언트의 요청(url)에 맞는 클래스나 메서드를 연결시켜주는 @어노테이션

 

사용 예)

@RequestMapping("list.bo")
public String selectList() {
	//코드
}

list.bo가 호출 됐을 때 해당 메서드를 실행하도록 맵핑하는 것

+ 해당 메서드가 @Controller로 지정되어있다면 메서드가 String을 반환했을 때 반환 값은 view이름으로 인식됨.

+ @RestController로 지정되어있으면, Rest API요청에 대한 응답(JSON)을 반환한다.

 

ex) URL 다중설정

@RequestMapping("list.bo","detail.bo")
public String selectList() {
	//코드
}

이렇게 URL을 여러개 설정도 가능함

 

그런데 mapping을 해주는 어노테이션이 @RequestMapping말고도 더 있는데 

@GetMapping@PostMapping이 있다 ( 더 있지만 우선 이 2개만 다룸)


@RequestMapping가 제공해주고 있는 기능

안 쓸 경우 직접 해야하는 것 ( = Java사용 시 )

1. 서블릿 맵핑

//JAVA
@WebServlet(name = "list.bo", urlPatterns = { "list.bo" })

//SPRING
@Controller
@RequestMapping("/shoppingPurchase")

 

 

2. POST / GET 요청처리

//JAVA
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    // GET 요청 처리 로직
}

//SPRING
@PostMapping("list.bo")
public String purchaseProduct(...) {
    // POST 요청 처리 로직
    return "viewName";
}

 

3. 파라미터 수집

//JAVA
int productNo = Integer.parseInt(request.getParameter("productNo"));

//SPRING
public String purchaseProduct(int productNo) {
}

 

4. request.setAttribute와 getRequestDispatcher로 포워딩

//JAVA
request.setAttribute("userId", userId);
request.getRequestDispatcher("views/shopping/list.jsp").forward(request, response);

//SPRING
model.addAttribute("userId", userId);
return "views/shopping/list"; // 자동으로 JSP 포워딩

 

 


 

@GetMapping

:Spring MVC에서 HTTP GET요청을 처리할 때 사용되는 어노테이션

주로 데이터를 조회할 때 사용되고 리소스를 가져오는 역할을 수행하며

다음 어노테이션와 같은 기능을 한다

@RequestMapping(method = RequestMethod.GET) 

RequestMapping어노테이션을 단축시킨 어노테이션인 것

GetMapping의 특징

  1. HTTP GET 요청처리: GET방식으로 전달된 요청만 처리하기 때문에 URL과 요청메서드를 통해 어떤 데이터를 가져오려고 하는지 쉽게 파악가능함
  2. URL파라미터 사용: GET요청은 URL에 쿼리 파라미터를 포함할 수 있어서 데이터 필터링이나 페이징처리에 자주 사용됨
  3. 조회 작업에 사용: GET은 서버의 리소스를 단순히 조회하는 작업을 위해 사용되기 때문에 서버상태에 영향을 미치지 않게 설계하는게 일반적임

@PostMapping

:Spring MVC에서 HTTP Post요청을 처리할 때 사용되는 어노테이션

주로 서버에 데이터를 생성하거나 전송할 때 사용함 클라이언트에서 서버로 새로운 데이터를 보내고 서버는 이 데이터를 저장/처리함

마찬가지로 @RequestMapping(method = RequestMethod.Post) 과 같은 기능을 한다

@RequestMapping을 단축시킨 어노테이션

 

PostMapping의 특징

  1. post방식으로 전달된 요청만 처리하기 때문에 url과 요청메서드를 통해 데이터 생성작업임을 알 수 있음
  2. 데이터를 본문에 담아서 보내기 때문에 클라이언트에서 대용량 데이터나 보안이 필요한 데이터를 보낼 때 좋다
  3. 서버의 상태변경: 서버에 데이터를 추가/변경하는 작업을 수행하기 때문에 서버의 상태를 변경시킴

# 대신해주는 기능의 경우 앞서 설명한 RequestMapping의 경우와 같다.


Q. 그럼 @RequestMapping이 있는데 굳이 @Get/Post Mapping을 사용해야하는거지?

(RequestMapping은 method를 생략하면 요청받은 request httpMethod에 맞게 get/post 둘 다 처리해줌)

RequestMapping이 GET / POST의 기능을 모두 가지고 있는데도 불구하고 get/post를 사용하는 이유는66

 

1. 코드의 명확성과 유지보수

@RequestMapping은 GET, POST 등의 메서드를 한 메서드에서 다루려 할 때 사용할 수 있지만, 코드가 복잡해질 수 있음

@GetMapping, @PostMapping을 사용하면 메서드를 명확히 구분시켜 작성할 수 있어서 코드의 유지보수가 쉬워짐

 

2. 사용 용도 구별

post / get 은 사용 용도가 다름 get은 조회, post는 서버의 상태를 변경시킴

equestMapping으로 작성한다면 post요청만 받아야 할 때에도 get요청까지 받아버린다

 

나중에 추가로 서술할 예정인데 스프링부트에서는 확실하게 용도를 나눠서 사용한다고 한다. 이건 배울때 추가로 포스팅할 예정