0. 대표적인 어노테이션
이름 | 설명 |
@Controller | 해당 클래스가 Controller임을 나타내기 위한 어노테이션 |
@RequestMapping | 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션 |
@RequestParam | Controller 메소드의 파라미터와 웹요청 파라미터와 맵핑하기 위한 어노테이션 |
@ModelAttribute | Controller 메소드의 파라미터나 리턴값을 Model 객체와 바인딩하기 위한 어노테이션 |
@SessionAttributes | Model 객체를 세션에 저장하고 사용하기 위한 어노테이션 |
@RequestPart | Multipart 요청의 경우, 웹요청 파라미터와 맵핑가능한 어노테이션(egov 3.0, Spring 3.1.x부터 추가) |
@CommandMap | Controller메소드의 파라미터를 Map형태로 받을 때 웹요청 파라미터와 맵핑하기 위한 어노테이션(egov 3.0부터 추가) |
@ControllerAdvice | Controller를 보조하는 어노테이션으로 Controller에서 쓰이는 공통기능들을 모듈화하여 전역으로 쓰기 위한 어노테이션(egov 3.0, Spring 3.2.X부터 추가) |
1. @Controller
여기서 Controller는 화면(View)과 비즈니스 로직(Model)를 연결시켜주는 다리 역할을 한다.
쉽게 말해서 url로 접속을 할 때 /hello로 가줘 라고 요청을 보내게 되면 해당 주소를 인시갛여 어디로 갈지 분석하고 맞는 곳으로 연결시켜주는 역할을 한다.
2. @RequestMapping
특정 url 예를들어 /hello 라는 rul로 요청을 보내면 컨트롤러에서 어떤 방식으로 처리할지 정의를 한다. 이때 들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것이 @RequestMapping 이다.
간단한 예시로 데이터를 보내는 방식인 GET, POST, PUT, DELETE를 활용하는데에서 찾을 수 있다.
@Controller
public class Controller {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String helloGet(...) {
...
}
@RequestMapping(value = "/hello", method = RequestMethod.POST)
public String helloPost(...) {
...
}
@RequestMapping(value = "/hello", method = RequestMethod.PUT)
public String helloPut(...) {
...
}
@RequestMapping(value = "/hello", method = RequestMethod.DELETE)
public String helloDelete(...) {
...
}
}
서버에 요청하는 방식을 지정해서 보내는 메서드들을 생성하고 각각의 요청을 정의했지만 너무 장황한 느낌이 난다. 이것을 Requestmapping을 통해 바꾸면 아래와 같이 된다.
@RequestMapping(value = "/hello")
public class HelloController {
@GetMapping()
public String helloGet(...) {
...
}
@PostMapping()
public String helloPost(...) {
...
}
@PutMapping()
public String helloPut(...) {
...
}
@DeleteMapping()
public String helloDelete(...) {
...
}
}
요청받을 url을 최상단 RequestMapping에 인자로 넣어놓고 각각의 메서드에 요청방법을 가진 어노테이션으로 정의 해주면 된다. 다만 여러개의 url을 맵핑하고싶을때에는 RequesMapping을 사용하지 못한다. 이때는 @Getmapping을 사용하여 각각 맵핑해주어야한다.
2. @GetMapping
위에서 잠깐 말했듯이 똑같은 URL을 다른 요청 방법으로 접근 할 때에는 Requestmapping을 사용하면 깔끔하지만 만약 다른 url을 접속해야된다면? Requestmapping으로는 무리가 있다, 이때 각각의 다른 url들을 접근할 수 있는 어노테이션중에 @GetMapping이라는 어노테이션이 있다. 실제 내가 한 예제를 예시로 들어볼 것이다.
처음에는 hello라는 url에 접속하기위해 @Controller아래에 @Requestmapping("hello")를 선언했지만, 메서드가 늘어나니 Requestmapping로 연결하는데 어려움이 생겨서 GetMapping으로 분리한 모습이다.
만약 @RequestMapping을 무조건 사용해야겠다고 한다면 이렇게 변경할 수 있을 것이다. 중복되는 url을 Requestmapping으로 처리해주고 세부적인 url은 GetMapping으로 가져가주면 된다.
궁금한 부분이 생기면 찾아보고 토대로 제가 이해한 내용을 글로 정리하는 개인 공부 블로그입니다.
내용 중 틀린 부분은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐