본문 바로가기

Study/Spring

Spring에서 사용하는 Controller 종류와 정의

728x90

I. Controller의 종류와 정의

- Controller란?

 Spring의 Controller는 MVC 패턴에서 View와 Model의 사이의 중간자 역활을 하며, 클라이언트 요청을 처리하는 비지니스 로직을 실행하거나 서비스 계층과 상호작용 한다.

 

(추가로 정리해야할 정의 요소들)

MVC 패턴(링크기재)

https://doltae.tistory.com/443

 

Spring MVC 패턴

I. Spring MVC란?· Model-View-Controller 아키텍처 패턴을 기반으로 한 Spring Framework의 웹 애플리케이션 개발 모듈이다.· 애플리케이션의 각 관심사를 명확히 분리하여 유연하고 유지보수하기 쉬운 코드

doltae.tistory.com

 

클라이언트 요청(링크기재)

https://doltae.tistory.com/444

 

클라이언트 요청이란?

클라이언트 요청은 브라우저, 모바일 앱,다른 서버 등 다양한 클라이언트가 서버에 HTTP 프로토콜을 사용해 정보를 요청하는 행위입니다. 이 요청은 HTTP 메서드 (GET, POST, PUT, DELETE 등)와 함께 특정

doltae.tistory.com

 

서비스 계층(링크기재)

https://doltae.tistory.com/445

 

서비스 계층이란?

서비스 계층은 애플리케이션의 비즈니스 로직을 처리하는 핵심 계층으로, 컨트롤러와 데이터 접근 계층(DAO/Repository) 사이에서 중간 역할을 한다.

doltae.tistory.com

 

II. Controller의 주요 Annotation

- @Controller

1. Spring MVC에서 사용되는 기본 컨트롤러 어노테이션

2. 주로  HTML, View를 반환할 때 사용한다.

3. 반환 값은 기본적으로 View 이름으로 간주한다.

(사용예제)

@Controller
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "hello"; // 뷰 이름 반환 (hello.jsp 또는 hello.html)
    }
}

 

A. @Controller는 어디에 사용합니까?

· 주로 HTML 뷰를 반환하거나  템플릿 엔진(JSP, Thymeleaf 등)을 통해 UI를 렌더링하는데 사용한다.

 

A. 해당 컨트롤러는 Spring 내부에서 어떻게 동작합니까?

1. 컴포넌트 스캔

· @Controller로 선언된 클래스는 Spring의 컴포넌트 스캔을 통해 Bean으로 등록된다.

· 등록된 컨트롤러 클래스는 HandlerMapping과 연관되어 특정 요청 URL을 처리한다.

 

2. 요청 매핑 

· 클래스나 메서드에 정의된 @RequestMapping 및 세부 매핑 어노테이션(@GetMapping, @PostMapping 등)을 기반으로 요청을 매핑한다.

· 요청이 들어오면 DispatcherServlet이 요청 URL에 따라 적절한 컨트롤러와 메서드를 찾는다.

 

3. 핸들러 실행

· 요청을 처리한 후, 컨트롤러 메서드는 뷰 이름(String)을 반환하거나 Model 객체를 뷰에 전달한다.

· 반환된 뷰 이름은 ViewResolver를 통해 실제 뷰 파일(JSP, HTML 등)로 매핑된다.

 

4. 뷰 렌더링

· Model에 추가된 데이터를 기반으로 템플릿 엔진이 뷰를 렌더링하고, 최종적으로 클라이언트에게 HTML 응답을 반환한다.

 

(코드 예제)

@Controller
public class MyController {
    @GetMapping("/home")
    public String home(Model model) {
        model.addAttribute("message", "Welcome to Home Page");
        return "home"; // "home.html" 또는 "home.jsp"로 매핑
    }
}

 

 

(추가로 정리해야할 요소들)

동작 과정을 그림으로 간단하게 그린 플로우 차트, Bean, HandlerMapping, DispatcherServlet, ViewResolver

 

- @RestController

1. @Controller와 @ResponseBody를 결합한 어노테이션.

2. HTTP 응답 본문에 데이터를 반환하는 데 사용된다.(주로 JSON 또는 XML)

3. RESTful API를 개발할 때 주로 사용한다.

@RestController
public class MyRestController {
    @GetMapping("/api/data")
    public String getData() {
        return "Hello, World!"; // 응답 본문 반환
    }
}

 

(추가로 정리해야할 정의 요소들)

RESTful API, JSON, XML, @ResponseBody

 

A. @RestController는 어디에 사용됩니까?

주로 RESTful 웹 서비스를 구현할 때 사용되는데, 반환값이 HTTP 응답 본문(Response Body)에 직접 매핑된다.

 

A. 해당 컨트롤러는 Spring 내부에서 어떻게 동작합니까?

1. 컴포넌트 스캔

· Spring의 컴포넌트 스캔을 통해 Bean으로 등록된다.

 

2. 요청 매핑

· @RequestMapping, @GetMapping, @PostMapoing 등의 요청 매핑 어노테이션이 사용된다.

· 요청 URL에 따라 DispatcherServlet이 적절한 컨트롤러 메서드를 찾는다.

 

3. 핸들로 실행

· 메서드의 반환 값은 ViewResolver를 거치지 않고, HttpMessageConverter를 통해 JSON, XML, 또는 텍스트 형태로 변환된다.

· 기본적으로 Jackson 라이브러리를 사용하여 객체를 JSON으로 변환한다.

 

4. 응답 반환

· 변환된 데이터는 HTTP 응답 본문으로 전송한다.

· 클라이언트는 JSON 또는 XML 형식의 데이트를 받는다.

 

(코드 예제)

@RestController
public class MyRestController {
    @GetMapping("/api/greeting")
    public Map<String, String> greeting() {
        return Map.of("message", "Hello, World!"); // JSON으로 변환
    }
}

 

(추가로 정리해야할 요소들)

동작 과정을 그림으로 간단하게 그린 플로우 차트, HttpMessageConverter, Jackson 라이브러리, HTTP

III. Controller와 @RestController의 주요 차이점

특성 @Controller @RestController
목적 HTML 뷰 반환 및 템플릿 렌더링 JSON, XML, 또는 문자열 데이터 반환
자동 포함 어노테이션 없음 @ResponseBody
응답 데이터 처리 방식 ViewResolver를 통해 템플릿 엔진을 호출 HttpMessageConverter를 통해 데이터 변환
용도 전통적인 웹 애플리케이션 RESTful API 개발

 

IIII. 과제 답변해보기.

A. @Controller랑 @RestController는 Spring 내부에서 어떻게 동작하는지 설명해봐.

A. 둘의 차이점을 설명해봐.

728x90

'Study > Spring' 카테고리의 다른 글

클라이언트 요청이란?  (0) 2025.01.22
Spring MVC 패턴  (1) 2025.01.22