횡단 관심사 (Cross-Cutting Concern)
횡단 관심사는 시스템의 여러 부분에 걸쳐 나타나는 기능 또는 관심사이다.
즉, "시스템의 여러 모듈에서 공통으로 필요로 하는 것"이다.
예를 들어, 로깅, 보안, 트랜잭션 관리, 예외 처리, 성능 모니터링 등이 횡단 관심사에 해당한다.
이러한 기능들은 시스템의 여러 부분에서 필요로 하기 때문에 코드 중복을 야기할 수 있다.
애스펙트 (Aspect)
애스펙트는 횡단 관심사를 모듈화한 것이다.
즉, 특정 횡단 관심사를 캡슐화하여 별도의 모듈로 만든 것이 애스펙트이다.
애스펙트는 두 가지 주요 구성 요소로 이루어져있다.
- 부가 기능: 실제로 횡단 관심사를 구현한 코드
- 포인트컷: 부가 기능이 적용될 지점
애스펙트는 특정 횡단 관심사에 필요한 로직과 이 로직이 적용될 곳을 결합한 것이다.
따라서, 애스펙트는 횡단 관심사를 구현하는 수단이다. 횡단 관심사는 문제 영역이고, 애스펙트는 그 문제를 해결하기 위한 코드 구성 요소라고 볼 수 있다. 예를 들어, "로깅"은 횡단 관심사이고, "로깅 애스펙트"는 그 횡단 관심사를 구현한 구체적인 코드이다.
애스펙트가 필요한 이유
애스펙트없이 횡단 관심사를 구현하려면 어떻게 될까?
예를 들어, 로깅 기능을 컨트롤러, 서비스, 리포지토리 계층에서 모두 사용하는 상황을 가정해보자.
애스펙트가 없다면, 로깅 기능을 구현한 코드를 각 계층의 클래스마다 삽입해야 한다. 이렇게 하면 다음과 같은 문제점이 발생한다.
- 코드 중복: 부가 기능(로깅 기능)을 각 클래스마다 구현해야 하므로, 동일한 코드가 여러 곳에 중복된다.
- 반복 작업: 부가 기능을 적용할 때마다 반복적으로 코드를 추가해야한다.
- 유지 보수의 어려움: 만약 로깅 기능에 수정 사항이 발생하면, 이를 사용하는 모든 곳을 찾아가 일일이 수정해야한다.
이러한 문제점들을 해결하기 위해 "횡단 관심사를 구현한 코드"와 "그 관심사가 적용될 지점"을 캡슐화한 애스펙트라는 개념이 도입된 것이다. 애스펙트를 사용하면, 부가 기능을 한 곳에서 정의하고 이를 다양한 지점에 적용할 수 있어 코드 중복을 줄이고, 유지 보수를 용이하게 할 수 있다.
'Spring' 카테고리의 다른 글
@NotNull과 nullable = false, 뭐가 다를까? ✍️ (1) | 2025.02.28 |
---|---|
핸들러 "어댑터"를 쓰는 이유 (0) | 2024.07.05 |
스프링 MVC 요청 / 응답 흐름과 매핑 로직 (0) | 2024.07.04 |
HttpHeaders, HttpEntity, ResponseEntity, RequestEntity (0) | 2024.06.18 |
스프링 부트 자동 설정 (AutoConfiguration.imports) 과 DispatcherServlet (0) | 2024.05.23 |
서블릿에서 JSP, 이어서 MVC 패턴이 사용되기까지 (0) | 2024.05.20 |