Spring - Controller
Controller
애플리케이션의 역할을 모델,뷰,컨트롤러로 나누어, 이들사이 상호작용을 통제하는 아키텍쳐 패턴이다.
1. 모델(Model)은 비즈니스 규칙을 표현한다.
2. 뷰(View)는 프레젠테이션을 표현한다.
3. 컨트롤러(Controller)는 위 두가지(모델,뷰)를 분리하기 위하여 양측 사이에 배치된 인터페이스이다.
Controller의 역할과 개념, 생성 방법을 알아보자
Controller의 역할
Controller는 주로 사용자의 요청을 처리 한 후 지정된 뷰에 모델 객체를 넘겨주는 역할을 수행한다.
뷰(View)와 모델(Model)을 연결시키는 다리 역할을 한다고 생각하면 될 것 같다.
먼저 컨트롤러를 생성하기 전에 생각해야 하는 부분은 무엇이 있을까?
제일 먼저 ‘클라이언트로부터 발생할 요청에는 어떤 것들이 있을까’를 고민해 보는 것이다.
이 말을 서버 애플리케이션 입장에서 생각하면 ‘클라이언트 요청을 처리할 서버 애플리케이션의 기능으로 뭐가 필요할까’와 같다.
Controller의 생성
스프링 프레임워크에서 컨트롤러는 @Controller 어노테이션을 추가하여 사용한다.
@Controller 어노테이션은 어노테이션이 적용된 클래스를 컨트롤러(Controller)임을 나타내고, 자동으로 bean이 등록되어 @Controller 어노테이션이 적용된 클래스를 컨트롤러(Controller)로 사용할 수 있다.
package com.codestates.member;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // (1)
@RequestMapping("/v1/members") // (2)
public class MemberController {
}
위 예시코드는 컨트롤러의 생성예시다.
(1),(2)을 확인해보자
먼저 @RestConroller는 위에서 설명한 @Controller + @ResponseBody라는 어노테이션의 조합이라고 생각하면된다.
@Controller와 @RestConroller의 차이점은
@Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 찾는 것이고,
@RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송한다는 것이다.
(1) @RestController
- Spring MVC에서는 특정 클래스에 @RestController를 추가하면 해당 클래스가 REST API의 리소스(자원, Resource)를 처리하기 위한 API 엔드포인트로 동작함을 정의한다.
- 또한 @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록해준다.
(2) @RequestMapping
@RequestMapping 은 클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드(Handler Method)를 매핑해 주는 역할을 한다.