[ Spring AOP와 로그 기록 ]
목차
- Spring AOP (Aspect-Oriented Programming)
- 1-1 정의
- 1-2 역할 및 이점
- 1-3 주요 구성 요소
- 1-4 예시 코드
- 로그 기록
- 2-1 정의
- 2-2 역할 및 이점
- 2-3 로그 기록 구현
- 2-4 예시 코드
- 사용자 ID 가져오기
- 3-1 정의
- 3-2 역할 및 이점
- 3-3 구현 예시
- 결론
1. Spring AOP (Aspect-Oriented Programming)
1-1. 정의
AOP는 관점 지향 프로그래밍으로, 공통 기능을 모듈화하여 비즈니스 로직과 분리하는 프로그래밍 패러다임이다. 이를 통해 코드의 응집성을 높이고 유지보수성을 향상시킬 수 있다.
1-2. 역할 및 이점
- 코드 중복 제거: 반복적으로 사용되는 기능을 어드바이스(advice)로 정의하여 중복 코드를 줄인다.
- 관심사 분리: 비즈니스 로직과 공통 기능을 분리하여 명확성을 높인다.
- 유연성: 메서드 호출 전후 등 다양한 지점에 적용 가능하여 기능 추가 및 변경이 용이하다.
1-3. 주요 구성 요소
- Aspect: 공통 관심사를 모듈화한 것.
- Join Point: AOP가 적용될 수 있는 지점.
- Advice: Join Point에서 수행할 작업.
- Pointcut: Advice가 적용될 Join Point를 지정하는 표현식.
1-4. 예시 코드
@Aspect
@Component
public class LoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
@Around("@annotation(org.example.expert.domain.common.annotation.Logging)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long executionTime = System.currentTimeMillis() - start;
logger.info("Executed {} in {} ms", joinPoint.getSignature(), executionTime);
return proceed;
}
}
2. 로그 기록
2-1. 정의
로그 기록은 애플리케이션에서 발생하는 이벤트나 상태 정보를 기록하는 과정이다.
2-2. 역할 및 이점
- 문제 진단: 오류나 예외의 원인을 빠르게 파악할 수 있게 한다.
- 모니터링: 애플리케이션의 성능과 사용자 행동을 기록하여 실시간 분석이 가능하다.
- 의사 결정 지원: 로그 데이터를 기반으로 비즈니스 결정을 내릴 수 있다.
2-3. 로그 기록 구현
- 사용자의 ID, 요청 URL, 요청 시각, 요청 바디 등 다양한 정보를 기록하여 문제 발생 시 유용한 정보를 확보한다.
2-4. 예시 코드
@Around("@annotation(org.example.expert.domain.common.annotation.Logging)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long userId = getCurrentUserId(); // 사용자 ID 가져오기
String url = request.getRequestURI();
long start = System.currentTimeMillis();
try {
return joinPoint.proceed();
} finally {
long executionTime = System.currentTimeMillis() - start;
logger.info("User ID: {} - Executed {} in {} ms", userId, url, executionTime);
}
}
3. 사용자 ID 가져오기
3-1. 정의
사용자 ID를 가져오는 것은 인증된 사용자의 정보를 획득하여 기능을 수행하는 데 필수적이다.
3-2. 역할 및 이점
- 인증 및 권한 관리: 사용자 ID를 통해 인증 상태와 권한을 확인할 수 있다.
- 개인화된 경험 제공: 사용자 정보를 기반으로 맞춤형 서비스를 제공한다.
3-3. 구현 예시
private long getCurrentUserId() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.isAuthenticated()) {
User user = (User) authentication.getPrincipal(); // UserDetails 구현체가 User인 경우
return user.getId(); // 사용자 ID 반환
}
throw new RuntimeException("User not authenticated"); // 인증되지 않은 경우 예외 처리
}
4. 결론
AOP와 로그 기록 기능 구현은 코드 재사용성과 관리 효율성을 높이며, 문제 해결 시 중요한 정보를 제공하는 데 기여한다. AOP를 통해 비즈니스 로직과 공통 기능을 분리하고, 로그 기록 기능을 통해 시스템의 동작을 효과적으로 모니터링하고 분석할 수 있게 되었다. 이러한 기술들은 현대 소프트웨어 개발에서 필수적인 요소로 자리 잡고 있다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] MDC와 TraceId를 활용한 멀티스레드 환경에서의 로그 추적 (0) | 2024.12.29 |
---|---|
[Spring] Spring 인증 / 인가 심화 (0) | 2024.11.11 |
[Spring] 단위 테스트, JUnit, 테스트 코드 (2) | 2024.10.29 |
[Spring] RestTemplate (2) | 2024.10.14 |
[Spring] AOP, 트랜잭션, @Transactional (0) | 2024.10.14 |