-
코드잇 백엔드 스프린트 - 8주차 위클리-페이퍼: Spring 기초개발/활동 2025. 3. 31. 09:14반응형
1. Spring에서 AOP(Aspect Oriented Programming)가 필요한 이유와 실제 애플리케이션 개발 사례
AOP란?
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)는 공통 관심사(Cross-cutting Concern) 를 분리하여 모듈화할 수 있는 프로그래밍 패러다임입니다. 이는 OOP(Object Oriented Programming)가 해결하기 어려운 흩어진 코드(scattered code) 와 얽힌 관심사(tangled concerns) 문제를 해결하는 데 중점을 둡니다.
왜 필요한가?
- 중복 코드 제거: 로깅, 트랜잭션 처리, 보안, 성능 측정 등 공통 기능을 여러 클래스에 반복 작성할 필요가 없음
- 관심사의 분리: 핵심 비즈니스 로직과 공통 기능을 분리하여 코드의 가독성과 유지보수성을 향상시킴
- 유연한 확장성: 필요 시 특정 기능만 수정하거나 확장 가능
실제 적용 사례: 로깅 및 실행 시간 측정
@Aspect @Component public class LoggingAspect { @Around("execution(* com.example.service..*(..))") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); Object proceed = joinPoint.proceed(); long executionTime = System.currentTimeMillis() - start; System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms"); return proceed; } }- 위 예시는 com.example.service 하위의 모든 메서드 실행 시간을 측정하여 로그로 출력
- 비즈니스 로직을 건드리지 않고 공통 기능을 적용함으로써 깔끔한 아키텍처 유지
2. Spring MVC에서 클라이언트의 요청 처리 흐름과 @Controller vs @RestController 차이점
클라이언트 요청 처리 흐름 (Spring MVC)
- 클라이언트 요청
- DispatcherServlet: 프론트 컨트롤러로서 모든 요청을 받아 처리
- HandlerMapping: 요청 URL에 맞는 컨트롤러 매핑
- Controller(@Controller 또는 @RestController): 실제 비즈니스 로직 수행
- ViewResolver 또는 HTTP Response 생성
- 클라이언트에게 응답 반환
@Controller
- 주로 HTML 뷰(View) 를 반환할 때 사용
- 반환값은 ViewResolver를 통해 JSP, Thymeleaf 등으로 매핑됨
@Controller public class WebController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("name", "Spring!"); return "hello"; // hello.html 또는 hello.jsp } }@RestController
- REST API 개발에 사용
- 반환값은 View가 아닌 HTTP Body 에 직접 데이터(JSON 등)를 담아 전송
- 내부적으로 @Controller + @ResponseBody 조합
@RestController public class ApiController { @GetMapping("/api/hello") public String hello() { return "Hello, REST!"; } }
주요 차이점 요약
구분 @Controller @RestController
목적 웹 페이지 반환 JSON 등 데이터 반환 반환 View 이름 HTTP Body 내용 대상 서버 렌더링 뷰 RESTful API 내부 구성 기본 Controller Controller + ResponseBody
정리하자면, AOP는 공통 기능을 비즈니스 로직과 분리하여 개발 효율성을 높이고, @Controller와 @RestController는 각각 HTML View와 JSON 데이터를 반환하기 위해 명확히 구분하여 사용하는 것이 Spring MVC 개발에서 핵심입니다.
반응형'개발 > 활동' 카테고리의 다른 글
코드잇 백엔드 스프린트 - 9주차 위클리-페이퍼: Rest Full API (0) 2025.04.07 코드잇 백엔드 스프린트 - 7주차 위클리-페이퍼 WAS (0) 2025.03.24 코드잇 백엔드 스프린트 - 6주차 위클리-페이퍼 : 프레임워크와 라이브러리의 차이점 (0) 2025.03.16 코드잇 백엔드 스프린트 - 6주차 위클리-페이퍼 : Spring Framework의 탄생 배경과 해결하고자 했던 문제점 (0) 2025.03.16 코드잇 백엔드 스프린트 - 5주차 위클리 페이퍼 : HashSet 와 O(n)과 O(log n)의 성능 차이 (0) 2025.03.09