웹 애플리케이션을 구축할 때 MVC 아키텍처를 기반으로 구축한다는 건 누구도 부정할 수 없을 것이다.
내가 생각하기에 필수적으로 알아야하는 요소들을 정리해 보고자 한다.
해당 포스트에선 컨트롤러에 대해 설명하고자 한다.
컨트롤러(Controller)는 MVC 아키텍처에서 사용자의 요청을 처리하고 응답을 생성하는 역할을 담당한다.
웹 애플리케이션으로 설명하자면, 다음과 같다.
1. 클라이언트의 HTTP 요청을 받아서 처리
2. 그에 따른 응답을 반환
컨트롤러의 주요 특징은 다음과 같다.
1. 요청 매핑(Request Mapping)
2. 요청 처리(Request Handling)
3. 모델(Model) 전달
4. 뷰(View) 선택
5. HTTP 응답 생성
하나씩 자세히 설명해 보겠다.
컨트롤러는 특정 URL 경로로 들어오는 HTTP 요청을 처리하기 위해 요청 매핑을 정의한다.
스프링에서는 @RequestMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등의 애너테이션을 사용하여 컨트롤러 메서드에 요청 매핑을 지정할 수 있다.
컨트롤러 메서드는 클라이언트의 요청을 처리하고 적절한 비즈니스 로직을 수행한다.
요청에 따라 데이터베이스 조회, 외부 API 호출, 파일 업로드 등의 작업을 수행함.
컨트롤러는 클라이언트로 응답을 보낼 때 데이터를 함께 전달하는데,
이를 위해 모델 객체를 생성하고 컨트롤러 메서드의 매개변수로 받아서 데이터를 설정하고 뷰에 전달한다.
컨트롤러는 클라이언트에게 반환될 뷰를 선택한다.
보통은 뷰 이름을 반환하고, 스프링의 뷰 리졸버(View Resolver)가 이를 해석하여 실제 뷰를 찾아 클라이언트에게 반환함.
컨트롤러는 클라이언트에게 반환될 HTTP 응답을 생성한다.
이를 위해 응답의 상태 코드, 헤더, 본문 등을 설정하고 반환하는데, 이에 대한 건 다른 포스트에서 자세히 다루겠다.
컨트롤러에 대해 알았다면 이제 실질적으로 어떻게 쓰는 지 알아보겠다.
컨트롤러를 사용할 클래스에 @Controller 을 붙이면 스프링 컨텍스트에 빈으로 등록이 되고 클라이언트에서 요청을 보낼 시 해당 요청에 맞는 응답을 보내줄 수 있다.
@Controller는 주로 View를 반환하기 위해 사용한다.
하지만 해당 포스트는 웹 애플리케이션이 중점이다.
즉, RESTful 웹 서비스를 구축할 때 주로 사용한다는 의미다.
쉽게 말해서 데이터를 HTTP응답과 함께 JSON 또는 XML 형식인 객체로 응답한다는 소리다.
@RestController는 그럴 때 사용한다.