AOP필요성과 @Controller, @RestController의 차이점

썬쑨·2025년 3월 30일

Spring

목록 보기
4/12
post-thumbnail

AOP가 필요한 이유

AOP(Aspect Oriented Programming)는 핵심 비즈니스 로직과 공통 기능(횡단 관심사)을 분리하여 코드의 중복을 줄이고 유지보수성을 높이기 위해 필요하다.

✅ AOP 적용이 필요한 주요 사례

  • 트랜잭션 관리(Transaction Management): 여러 서비스에서 트랜잭션 처리를 일관되게 적용할 때
  • 보안(Security, 인증 & 권한 관리): 특정 메서드나 API 접근을 제어해야 할 때
  • 예외 처리(Exception Handling): 예외 발생 시 공통적인 로직을 처리할 때

이러한 기능들을 각각의 클래스에서 직접 구현하면 코드 중복이 발생하고 유지보수가 어려워지므로, AOP를 사용하여 공통 로직을 분리할 수 있다.

Spring MVC에서 @Controller와 @RestController의 차이점 및 요청 처리 흐름

1. @Controller vs @RestController 차이점

  • @Controller: Spring MVC에서 웹 애플리케이션의 컨트롤러 역할을 하는 클래스에 부여하는 어노테이션이다. 이 어노테이션이 적용된 클래스는 주로 HTML과 같은 뷰(View)를 반환하는 역할을 한다. 컨트롤러 메서드의 반환 값은 뷰 이름(String)으로 해석되며, Spring의 ViewResolver가 이를 처리하여 해당하는 뷰를 렌더링한다.
    따라서, 웹 애플리케이션에서 JSP, Thymeleaf 같은 템플릿 엔진을 활용할 때 주로 사용된다.
@Controller
public class HomeController {

    @GetMapping("/home")
    public String home(Model model) {
        model.addAttribute("message", "Hello");
        return "home"; // home.html 또는 home.jsp 뷰 반환
    }
}
  • @RestController: @Controller와 달리, RESTful API를 개발할 때 사용하는 컨트롤러이다.
    이 어노테이션이 적용된 클래스는 데이터(JSON, XML)를 HTTP 응답 본문(Response Body)으로 직접 반환한다. 내부적으로 @RestController는 @Controller + @ResponseBody를 포함하고 있기 때문에, 별도로 @ResponseBody를 명시하지 않아도 메서드의 반환 값이 JSON이나 XML로 변환되어 클라이언트에게 전달된다.
@RestController
public class ApiController {

    @GetMapping("/api/message")
    public Map<String, String> getMessage() {
        Map<String, String> response = new HashMap<>();
        response.put("message", "Hello");
        return response; // JSON으로 변환되어 반환됨
    }
}

2. 요청 처리 흐름 비교

✅ @Controller의 요청 처리 흐름
1. 클라이언트가 HTTP 요청을 보냄
2. DispatcherServlet이 요청을 받아 적절한 컨트롤러 메서드를 실행
3. 컨트롤러 메서드가 뷰 이름(String)을 반환하면 ViewResolver가 뷰를 찾음
4. HTML 렌더링 후 응답 반환

✅ @RestController의 요청 처리 흐름
1. 클라이언트가 API 요청(ex: JSON 요청)을 보냄
2, DispatcherServlet이 요청을 받아 컨트롤러 메서드 실행
3. 컨트롤러 메서드의 반환 값이 JSON 또는 XML 데이터로 변환됨
4. HTTP 응답으로 JSON 데이터 전송

profile
천천히 굴러갑니다!

0개의 댓글