본문 바로가기

Spring Boot

@Controller

Controller

웹 어플리케이션에서 컨트롤러(Controller)는 사용자의 HTTP 요청을 받아들이고, 이 요청을 처리하며, 그 결과에 따라 적절한 응답을 생성하는 컴포넌트입니다. 컨트롤러는 웹 어플리케이션의 중심적인 역할을 하며, 클라이언트(웹 브라우저, 모바일 앱 등)와 상호작용하여 사용자에게 웹 페이지, 데이터, 서비스 등을 제공합니다.

여러 가지 주요 역할과 특징을 갖는 웹 어플리케이션 컨트롤러에 대한 설명은 다음과 같습니다:

1. HTTP 요청 처리: 컨트롤러는 클라이언트의 HTTP 요청을 받아들이고 해당 요청을 처리합니다. 요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 URL 경로로 구성되며, 컨트롤러는 이 정보를 사용하여 어떤 작업을 수행할지 결정합니다.

2. 비즈니스 로직 호출: 컨트롤러는 비즈니스 로직을 호출하거나 서비스 객체와 상호작용하여 필요한 작업을 수행합니다. 이는 데이터베이스 조회, 업데이트, 외부 API 호출, 계산 등 다양한 작업을 포함할 수 있습니다.

3. 뷰 선택 및 모델 전달: 처리된 결과에 따라 적절한 뷰(View)를 선택하고, 데이터를 모델(Model)에 담아 뷰에 전달합니다. 뷰는 이 모델을 사용하여 웹 페이지나 데이터를 클라이언트에 표시합니다.

4. 리다이렉션 및 에러 처리: 컨트롤러는 요청을 다른 URL로 리다이렉션하거나, 예외 처리를 통해 오류 페이지로 리다이렉션할 수도 있습니다. 예를 들어, 인증 오류가 발생하면 로그인 페이지로 리다이렉션할 수 있습니다.

5. HTTP 응답 생성: 컨트롤러는 HTTP 응답을 생성하고 클라이언트에게 전송합니다. 이 응답에는 HTTP 상태 코드, 헤더, 본문 등이 포함됩니다.

6. 라우팅 및 URL 매핑: 웹 어플리케이션의 URL을 컨트롤러와 연결하기 위해 URL 매핑을 설정합니다. 컨트롤러는 요청된 URL 경로에 따라 적절한 메서드로 라우팅됩니다.

7. 스프링 프레임워크에서의 역할: 스프링 웹 애플리케이션에서는 @Controller 어노테이션을 사용하여 컨트롤러를 정의하며, 스프링 MVC 프레임워크에서 요청 처리를 지원합니다. 스프링은 DispatcherServlet을 사용하여 요청을 적절한 컨트롤러로 라우팅하고, 응답을 생성하기 위해 뷰를 관리합니다.

웹 어플리케이션에서 컨트롤러는 사용자와의 상호작용을 담당하며, 비즈니스 로직과 뷰를 통합하여 웹 페이지 및 서비스를 제공하는 핵심 요소 중 하나입니다.

 

@Controller

@Controller 어노테이션은 스프링 프레임워크에서 웹 애플리케이션의 컨트롤러 클래스를 정의할 때 사용되는 어노테이션입니다. 이 어노테이션은 해당 클래스가 웹 요청을 처리하는 컨트롤러 클래스임을 표시하며, 스프링에 의해 관리되고 웹 요청을 처리하는 데 사용됩니다.

다음은 @Controller 어노테이션에 대한 상세한 설명입니다:

1. 웹 애플리케이션 컨트롤러:
   @Controller 어노테이션이 적용된 클래스는 스프링 웹 애플리케이션의 컨트롤러 역할을 수행합니다. 이 클래스는 클라이언트(웹 브라우저, 모바일 앱 등)로부터의 HTTP 요청을 받아들이고, 해당 요청을 처리한 후 응답을 생성하여 클라이언트에게 반환합니다.

2. Spring MVC와의 통합:
   @Controller 어노테이션은 주로 스프링 MVC 프레임워크에서 사용됩니다. 스프링 MVC는 웹 애플리케이션의 구조를 지원하고, HTTP 요청과 응답을 처리하기 위한 다양한 기능을 제공합니다. @Controller 어노테이션을 사용하여 스프링 MVC가 이 컨트롤러 클래스를 인식하고 웹 요청을 해당 메서드로 라우팅하게 됩니다.

3. 메서드와 요청 매핑:
   @Controller 어노테이션은 해당 클래스 내부의 메서드에 다른 요청 경로(@RequestMapping, @GetMapping, @PostMapping 등)와 함께 사용됩니다. 이를 통해 특정 URL에 대한 요청을 처리할 메서드를 정의할 수 있으며, 메서드는 해당 요청을 처리하고 응답을 생성합니다.

4. 스프링 빈 관리:
   @Controller 어노테이션을 사용하면 해당 클래스가 스프링 컨테이너에서 관리되는 빈(Bean)으로 등록됩니다. 따라서 스프링 컨테이너는 @Controller 어노테이션이 적용된 클래스의 인스턴스를 생성하고 관리하므로 의존성 주입(Dependency Injection) 등 스프링의 다양한 기능을 활용할 수 있습니다.

5. 예제:
   아래는 @Controller 어노테이션을 사용한 간단한 스프링 컨트롤러 클래스의 예제입니다.

 import org.springframework.stereotype.Controller;
   import org.springframework.web.bind.annotation.RequestMapping;
   import org.springframework.web.bind.annotation.RequestMethod;

   @Controller
   public class MyController {

       @RequestMapping(value = "/hello", method = RequestMethod.GET)
       public String hello() {
           return "helloPage"; // 뷰 이름을 반환
       }
   }


   위의 코드에서 @Controller 어노테이션을 사용하여 MyController 클래스를 스프링 컨트롤러로 지정하고, /hello 경로로 들어오는 GET 요청을 처리하는 hello() 메서드를 정의하고 있습니다. 이 메서드는 helloPage라는 뷰 이름을 반환하므로 해당 뷰 페이지가 클라이언트에게 표시됩니다.

@Controller 어노테이션은 스프링 웹 애플리케이션에서 컨트롤러 클래스를 구현하는 데 사용되며, 웹 요청과 응답을 처리하기 위한 핵심 역할을 수행합니다.

 

@RequestMapping

org.springframework.web.bind.annotation.RequestMapping은 스프링 프레임워크에서 웹 request을 컨트롤러 메서드와 매핑하기 위한 어노테이션입니다. 이 어노테이션은 다양한 메서드 시그니처를 가진 컨트롤러 클래스의 메서드를 웹 요청과 매핑하는 데 사용됩니다.

기본적으로 @RequestMapping 어노테이션은 클래스 수준과 메서드 수준에서 모두 사용할 수 있으며, 이를 통해 요청을 처리하는 데 더 큰 유연성을 제공합니다.

클래스 수준에서 사용할 경우 해당 클래스의 모든 메서드에 공통적으로 적용되며, 메서드 수준에서 사용할 경우 특정 메서드에만 적용됩니다. 메서드 수준에서 사용하는 경우, HTTP 메서드와 URL 패턴을 지정하여 요청과 메서드를 매핑할 수 있습니다.

일반적으로 HTTP 요청 메서드(GET, POST, PUT, DELETE 등) 및 URL 경로를 지정하여 @RequestMapping 어노테이션을 사용하며, 컨트롤러 클래스의 메서드는 이 요청과 일치하는 경우에 실행됩니다.

@RequestMapping 어노테이션은 스프링 MVC 및 스프링 WebFlux에서 지원되며, 두 모듈에서 사용 가능한 핸들러 메서드 인수 및 반환 유형의 정확한 목록은 해당 모듈의 참조 문서를 참조해야 합니다.

또한, 특정한 HTTP 메서드에 대한 매핑을 위해서는 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping과 같은 HTTP 메서드별 어노테이션을 사용하는 것이 권장됩니다.

마지막으로, 컨트롤러 인터페이스를 사용할 때는 @RequestMapping 어노테이션 및 관련 매핑 어노테이션을 구현 클래스가 아닌 인터페이스에 적용하는 것이 중요하며, 이렇게 하면 AOP 프록시 등의 기능을 올바르게 사용할 수 있습니다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {

    // 기본 URL 경로인 "/"에 대한 GET 요청을 처리하는 메서드
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String homePage() {
        return "index"; // "index"는 뷰 이름을 나타냄 (Thymeleaf, JSP 등의 템플릿 엔진을 사용할 경우)
    }

    // "/hello" 경로에 대한 GET 요청을 처리하고 응답 데이터를 직접 반환
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    @ResponseBody
    public String hello() {
        return "Hello, World!";
    }
}

'Spring Boot' 카테고리의 다른 글

Auto Configuration  (0) 2024.04.10
Lombok  (0) 2024.04.10
SLF4J  (0) 2024.04.10
@Autowired  (0) 2024.04.10
Stereotype Annotation  (0) 2024.04.09