1. Spring에서 AOP가 필요한 이유와 이를 활용한 실제 애플리케이션 개발 사례
AOP는 비즈니스 로직과 공통 로직을 분리하기 위해 필요하다.
왜 필요한가?
만약 모든 메서드가 실행 시간을 측정해야 한다면, AOP가 없을 경우 모든 메서드의 시작과 끝에 시간 측정 코드를 직접 넣어야 한다. 이는 코드 중복을 야기하고, 정작 중요한 비즈니스 로직을 파악하기 어렵게 만든다. AOP는 시간 측정이라는 관점을 따로 떼어내어 관리함으로서 비즈니스 로직을 순수하게 유지해준다.
실제 애플리케이션 개발 사례
- 로깅(Logging): 어떤 메서드가 호출되었고 어떤 파라미터가 들어왔는지 모든 서비스 레이어에 일괄 적용할 때 사용한다
- 트랙잭션 관리(@Transactional): DB 작업 중 에러 발생 시 롤백하는 로직을 직접 구현하지 않아도, 어노테이션 하나로 AOP가 처리해준다.
- 보안/인증: 사용자 권한 체크 로직을 컨트롤러 진입 전 AOP 레벨에서 처리한다.
- 성능 모니터링: 시스템의 병목 구간을 찾기 위해 특정 패키지의 실행 시간을 측정할 때 활용한다.
2. Sping MVC 요청 처리 흐름 (@Controller vs @RestController)
Spring MVC에서 클라이언트의 요청은 DispatcherServlet을 거쳐 처리된다. 두 컨트롤러의 핵심 차이는 "응답을 어떻게 반환하느냐"에 있다!!
공통흐름
- 클라이언트 요청: HTTP 요청이 들어오면 DispatcherServlet이 이를 받는다.
- 핸들러 매핑: HandlerMapping을 통해 요청 URL에 맞는 컨트롤러를 찾는다.
- 핸들러 어댑터: 찾은 컨트롤러를 실행할 수 있는 어댑터를 통해 메서드를 호출한다.
@Controller (View 기반)
전통적인 Spring MVC 방식으로, 주로 HTML 화면을 응답할 때 사용한다.
- 처리 과정:
- 컨트롤러가 비즈니스 로직을 수행한 후, 논리적인 View 이름이나 ModelAndView 객체를 반환한다.
- ViewResolver가 이 이름을 받아 실제 물리적인 경로로 매핑한다.
- View 객체가 렌더링되어 클라이언트에게 HTML을 전달한다
특징: 화면 전체를 다시 그리는 페이지 이동 방식에 적합하다. (타임리프, JSP 등과 결합)
@RestController (Data 기반)
최근 RestAPI 개발이나 프론트엔드(리액트, Vue, 플러터) 와 통신할 때 사용한다. @Controller + @ResponseBody가 합쳐진 형태이다.
-처리과정:
- 컨트롤러가 객체를 반환한다.
- HttpMessageConverter가 동작해 객체를 JSON 또는 XML 형식의 데이터로 변환한다.
- View를 거치지 않고 HTTP 응답 바디에 직접 데이터를 담아 보낸다.
특징: 데이터만 주고 받기 때문에 모바일 앱이나 비동기 통신에 필수적이다.
'Weekly Paper' 카테고리의 다른 글
| Weekly Paper #9 (0) | 2026.03.23 |
|---|---|
| Weekly Paper #7 (0) | 2026.02.27 |
| Weekly Paper#5 (0) | 2026.02.02 |
| Weekly Paper#3 (0) | 2026.01.19 |
| Weekly Paper#2 (0) | 2026.01.12 |