백엔드 18일차 - 스프링부트 : AOP, Filter

parang·2025년 5월 7일

LG CNS AM Inspire Camp 2기

목록 보기
29/50
기다긴 연휴가 끝나고 다시 시작된 수업. 
다른 때보다 굉장히 적응하기 힘들었고
정신 차리자 주문을 외다 끝난 하루 ㅋㅎ 다시 마음을 잡고 달려보자

타임리프를 끝내며..

MVC 패턴 중, 스프링에서 VIEW로 사용되는 기술 : 타임리프, jsp

JSP :

  • <% 포함되어야 한다.
  • 의존성 추가해 주어야 한다.
  • 확장자가 jsp가 된다.

✅ AOP

📌 공통으로 적용될 모듈을 만들고, 삽입해서 일괄 적용하여 사용하는 방법

사용 분야 :

  1. 메소드 성능 테스트
  2. 트랜잭션 처리 - 프로그램 시작 전, 후
    etc..

용어

  • Advice : 메소드 자체
  • Pointcut : 동작할 위치(메소드) + 시점(실행 전, 후 등등)
    ex) *메소드 실행 후
    실행 중 오류 발생 :
    정상 실행
    before
    after
    around - before, after 둘다
    after-returning
    after- throwing
    - Excution() 적용할 메소드 세부적으로 명시. 
    * 패키지, 클래스 메소드 순서대로 나옴.

ex2) 코드

@Aspect -> 공통 기능 빈인 것들 알려줌
@Component -> 빈으로 등록

joinpoint를 통해서 정보를 더 얻을 수 있음.

@Around -> 어디서 실행될 건지 코드 작성. 
result = joinPoint.proceed(); 메서드 실행. (필수)
-> around는 proceed 꼭 작성. ( 실행 전, 후를 뜻함)

@After("execution(* com.example.book.controller.*.*(..))") 
이런식으로 조건을 주면서 사용.

✅ @ControllerAdvice란?

📌 모든 컨트롤러에서 발생하는 예외나 공통 처리를 한 곳에서 모아서 처리하는 클래스에 붙이는 어노테이션.

컨트롤러라고 볼 수 있다.

Spring MVC에서 사용하는 전역 예외 처리, 전역 바인딩 설정, 전역 응답 변환 처리 등을 담당한다.

AOP의 한 종류이다.

기본 코드 형태

@ControllerAdvice 
public class MyControllerAdvice { 
	@ExceptionHandler 
	[@ResponseStatus] 
	[@ResponseBody] 
	public String handle(RuntimeException e, WebRequest request) { 
		return [view]; 
	} 
}

cf. xx.class
클래스

✅ Filter란?

📌 Spring에서 필터(Filter)는 웹 요청 처리에서 가장 먼저 동작하는 컴포넌트이다.
요청이 컨트롤러에 도달하기 전에 먼저 필터를 통과하고, 응답도 필터를 거쳐 나간다.

when?

XSS (Cross Site Scripting) 방지
요청, 응답 로깅
인증, 인가 처리
CORS 설정
IP 차단

위와 같은 공통 처리 로직을 전역적으로 적용할 때 사용된다.

코드 형태


@Slf4j 
public class IPCheckFilter implements Filter { 
	@Override 
	public void doFilter( 
		ServletRequest request, 
		ServletResponse response, 
		FilterChain chain) throws IOException, ServletException { 
        log.debug("filter begin"); 
        
        HttpServletRequest req = (HttpServletRequest) request; -> 다운캐스팅
		String ip = request.getRemoteAddr(); 
		log.debug("ip : " + ip); 
		chain.doFilter(req, response); -> 다음 단계로 넘어감
		log.debug("filter end"); 
	} 
}

일단 필터 클래스는 filter를 구현해야하고, 따라서 doFilter 재정의 필수인 형태이다. 

cf) @RequestHeader

클라이언트의 헤더 값이 같이 전송

필터는 AOP, Interceptor와 달리 가장 앞단에서 실행되는 특징을 가지고 있다. 각 목적이 조금씩 다르기 때문에 목적에 따라 적절히 사용한다.

cf. URL과 URI의 차이

URI : 리소스를 식별
URL : 리소스의 위치, 접근 방법

  • URI가 URL의 상위 개념

구분

  • URI -> 누군지 알려줘!
  • URL -> 어디에 있고, 어떻게 가는지 알려줘!
profile
파랑입니다.

0개의 댓글