스프링 부트의 장점 3가지
스프링 부트의 주요 장점을 3가지 말하라면,
- IoC (Inversion of Control) : 제어의 역전
- DI (Dependency Injection) : 의존성 주입
- AOP (Aspect-Oriented Programming) : 관점 지향 프로그래밍
이 세 가지를 말할 수 있다.
여기서 IoC, DI는 알고 있으나, AOP는 처음 알게 되었다.AOP
AOP는 관점 지향 프로그래밍의 한 종류로, 주로 횡단 관심사(cross-cutting concerns)를 모듈화하는 데 사용된다.
횡단 관심사란 애플리케이션의 여러 부분에서 반복적으로 발생하는 문제나 기능을 말한다.
예를 들어, 로깅, 트랜잭션 관리, 보안 검사 등이 횡단 관심사 등이 있다.*"Aspect-Oriented Programming"의 약자.
이는 소프트웨어 공학에서 사용되는 프로그래밍 패러다임 중 하나로, 관점 지향 프로그래밍이라고 번역할 수 있다.AOP 주요 요소
- Aspect (관점)
AOP에서 관점은 횡단 관심사를 구현한 모듈이다.
예를 들어, "모든 메소드 호출 시 로깅을 추가한다"는 관점을 정의할 수 있다.
- Join Point (조인 포인트)
조인 포인트는 AOP가 적용될 수 있는 특정 위치나 시점을 말한다.
메소드 호출, 예외 발생, 객체 생성 등이 조인 포인트의 예가 될 수 있다.
- Advice (어드바이스)
어드바이스는 횡단 관심사의 구체적인 구현.
조인 포인트에서 실행될 코드 블록이며, 다섯 가지 유형이 있다
ex) Before, After returning, After throwing, After (finally), Around.
- Pointcut (포인트컷)
포인트컷은 어드바이스가 적용될 조인 포인트의 집합을 정의하는 방법이다.
포인트컷은 특정 메소드 패턴, 패키지 내 모든 클래스 등을 포함할 수 있다.
- Weaving (위빙)
위빙은 AOP 프레임워크가 어드바이스를 조인 포인트에 적용하여 실제 코드에 '엮는' 과정을 말한다.
스프링에서는 컴파일 타임, 클래스 로딩 시간, 런타임 중에 위빙을 수행할 수 있다.스프링 부트에서의 AOP 사용
스프링 부트는 AOP를 사용하여 여러 측면에서 애플리케이션을 개선할 수 있다
- 로깅 : 모든 메소드 호출 시 로그를 남기는 것과 같이 특정 기능을 모든 메소드에 자동으로 추가할 수 있다.
- 트랜잭션 : 관리 여러 메소드에 대해 자동으로 트랜잭션을 시작하고 종료할 수 있다.
- 보안 검사 : 특정 메소드나 클래스에 보안 검사를 자동으로 적용할 수 있다.
예시 코드 :
다음은 스프링 부트에서 AOP를 사용하여 메소드 호출 시간을 측정하는 간단한 예시이다
@Component @Aspect public class TimerAop { @Around("execution(public void com.kh.app03.board.dao.BoardDao.list() )") public void m01(ProceedingJoinPoint jp) throws Throwable{ long start = System.nanoTime(); jp.proceed(); long end = System.nanoTime(); long time = end - start; System.out.println("time : " + time); } }com.example.service 패키지의 모든 메소드 호출을 감시하고, 각 메소드가 실행된 시간을 측정하여 출력하다.
이러한 방식으로 AOP를 사용하면 애플리케이션의 여러 부분에서 일관된 방식으로 횡단 관심사를 처리할 수 있다.
- @Aspect : Aspect-Oriented Programming (AOP)을 구현하는 데 사용되는 어노테이션
- @Around : 스프링 프레임워크에서 AOP를 구현할 때 사용되는 어드바이스(advice) 종류 중 하나로, 메서드 실행 전후에 적용할 수 있는 조언(advice)을 정의할 수 있다.
- ProceedingJoinPoint : AspectJ와 스프링 AOP에서 사용되는 인터페이스로, @Around 어노테이션과 함께 Advice 메서드에서 사용된다. 이 인터페이스는 @Around Advice에서 대상 메서드의 호출을 제어하고 추가적인 로직을 삽입하는 데 중요한 역할을 한다.
Ex)
결론스프링 부트의 AOP는 코드의 재사용성과 유지보수성을 높이는 데 중요한 역할을 한다.
AOP를 사용하면 애플리케이션의 핵심 비즈니스 로직과는 별개의 관심사를 분리하여 모듈화하고, 코드의 중복을 줄이며, 코드의 가독성과 유지보수성을 개선할 수 있다.
정 ~ ~ ~ 말 유익해요