AOP

Stupefyee's avatar
Nov 21, 2024
AOP

AOP(Aspect-Oriented Programming) 개요

1. AOP란?

  • 코드에서 공통적으로 반복되는 부분(횡단 관심사)을 분리.
  • 주요 로직(핵심 로직)과 부가 작업(부가 로직)을 나누는 프로그래밍 기법.
  • 코드 중복을 줄이고 유지보수를 쉽게 만듦.

2. AOP 구성 요소

  1. 핵심 로직: 실제로 중요한 작업.
      • 예: 회사 미팅, 자기, 운동하기.
  1. 부가 로직: 반복되며, 핵심 로직에 붙는 작업.
      • 예: 옷을 입는 행위.
  1. 횡단 관심사: 여러 곳에서 공통적으로 필요한 작업.
      • 예: 로깅, 트랜잭션 처리, 유효성 검사.

3. 적용 예시

  • 핵심 로직: "회사 미팅", "운동하기" 등의 주요 활동.
  • 부가 로직: "격식 있게 옷을 입다", "운동복을 입다".
  • 핵심 로직은 상황에 따라 달라지지만, "옷을 입는" 부가 로직은 항상 필요함.

AOP를 이용한 유효성 검사

1. 유효성 검사란?

  • 데이터를 서버에 보내기 전에 조건을 확인하는 작업.
  • 예: 이름이 비어있지 않은지, 나이가 0 이상인지 확인.

2. 유효성 검사가 필요한 이유

  • 잘못된 데이터가 서버로 들어오는 것을 방지.
  • 데이터를 처리하는 과정에서 발생할 수 있는 오류를 줄임.

AOP를 사용한 유효성 검사 흐름

1. 작동 방식

  1. 클라이언트가 서버로 데이터를 보냄.
  1. AOP가 데이터를 가로채서 검사.
  1. 조건을 만족하지 못하면 에러를 반환.
  1. 조건을 만족하면 다음 로직(핵심 로직)을 실행.

2. 예제 코드

@Component @Aspect public class ValidationAspect { @Before("@annotation(org.springframework.web.bind.annotation.PostMapping)") // 메서드 실행 전에 작동 public void validate(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); // 메서드의 모든 매개변수 가져오기 for (Object arg : args) { if (arg instanceof Errors) { // Errors 객체 확인 Errors errors = (Errors) arg; if (errors.hasErrors()) { // 에러 존재 여부 확인 String errMsg = errors.getFieldErrors().get(0).getField() + ": " + errors.getFieldErrors().get(0).getDefaultMessage(); throw new IllegalArgumentException(errMsg); // 예외 던지기 } } } } }

유효성 검사 어노테이션

1. 주요 어노테이션

  • @Valid: 유효성 검사를 트리거.
  • @NotNull: 필수 값.
  • @NotEmpty: 빈 문자열 금지.
  • @Min: 최소값 조건.
  • @Max: 최대값 조건.
  • @Size: 문자열 길이 제한.
  • @Pattern: 정규식 조건.

2. DTO에 적용 예

public class UserDTO { @NotNull(message = "이름은 필수입니다.") private String name; @Min(value = 18, message = "나이는 18 이상이어야 합니다.") private int age; @Email(message = "유효한 이메일 주소여야 합니다.") private String email; }

3. 추가 설정 및 라이브러리

  1. Spring Boot Starter Validation
      • 유효성 검사를 위한 라이브러리.
      • Gradle:
        • implementation 'org.springframework.boot:spring-boot-starter-validation'
  1. Spring Boot Starter AOP
      • AOP를 구현하기 위한 라이브러리.
      • Gradle:
        • mplementation 'org.springframework.boot:spring-boot-starter-aop'

정리

  1. AOP는 핵심 로직과 부가 로직을 분리해 코드를 간결하고 효율적으로 만듦.
  1. 유효성 검사는 클라이언트로부터 들어온 데이터를 검증하는 작업.
  1. AOP로 유효성 검사를 구현하면 공통 로직을 한 곳에서 처리 가능.
  1. @Valid와 같은 어노테이션으로 간편하게 유효성 검사 추가 가능.
Share article

stupefyee