복습
aop : 어떤 로직을 기준으로 관점으로 나누어서 그 관점을 기준으로 각각 모듈화함.
@Configuration : 특정 클래스를 어노테이션으로 설정파일로 등록. Bean을 수동으로 등록한다.
@ComponentScan : 어노테이션들을 자동으로 탐지 및 등록
근데 특정 어노테이션만을 스캔한다.
@Component와 그 하위 어노테이션:
- @Component: 기본적인 스프링 빈으로 등록.
- @Service: 서비스 계층 클래스.
- @Repository: DAO(Data Access Object) 계층 클래스.
- @Controller: Spring MVC의 컨트롤러.
- @RestController: RESTful API 컨트롤러.
Bean 을 만들 때 특별히 빈의 이름을 정하지 않았다면 클래스명에서 제일 앞글자만 소문자로 해서 등록한다.
인터셉터 :
인터셉터(Interceptor)는 J2EE 표준 스팩인 필터(Filter)와 달리 스프링이 제공하는 기술로서, 디스패처 서블릿이 컨트롤러 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공합니다.
· 필터(Filter)는 웹 컨테이너에서 동작
· 인터셉터(Interceptor)는 스프링 컨텍스트에서 동작
package com.example.ex01.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MemoInterceptor implements HandlerInterceptor{
//메모컨트롤러로 이동하기 전 처리 로직
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("MEMOInterceptor preHandle.." );
return true;
}
//메모컨트롤러 작업끝난이후 처리로직
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("MEMOInterceptor postHandler");
}
//View page 렌더링 된 이후 처리로직
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("MEMOInterceptor afterCompletion invoke..");
}
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
registry.addInterceptor(new MemoInterceptor()).addPathPatterns("/memo/*"); //메모 url 요청이 들어왔을때 인터셉터가 동작 객체가 생성된다
}
리스너 :
Listener (ContextLoaderListener)
리스너는 리스너라고 정의되어있는 것이 아니라, 이벤트가 생겼을 때 이것에 대응하기 위해 이벤트 핸들링을 하는 객체를 지칭하는 것이었다. 스프링에서 이 리스너는 스프링의 조상인 서블릿의 ServletContextListener를 상속한 ContextLoaderListener로 구현되어있다. 그리고 스프링에서 이 ContextLoaderListener은 애플리케이션의 시작과 종료 시 발생하는 이벤트를 핸들링하는 리스너 역할을 한다.
스프링에서의 리스너
여기서는 프레임워크 내에 있는 이벤트를 대상으로 리스너가 동작
ApplicationEventPublisher는 Spring Framework에서 이벤트를 게시(publish)하는 데 사용되는 인터페이스입니다. 이를 통해 애플리케이션 내에서 이벤트 기반 프로그래밍을 구현할 수 있습니다.
주요 역할:
- 이벤트 게시: ApplicationEventPublisher를 사용하여 특정 이벤트를 애플리케이션 컨텍스트에 게시할 수 있습니다. 게시된 이벤트는 해당 이벤트를 수신할 수 있도록 등록된 리스너(listener)에 의해 처리됩니다.
- 애플리케이션 컴포넌트 간 느슨한 결합: 이벤트 기반 설계를 통해 애플리케이션 컴포넌트 간의 의존성을 줄이고 더 느슨하게 결합된 구조를 만들 수 있습니다.
주요 메서드:
ApplicationEventPublisher 인터페이스의 주요 메서드는 다음과 같습니다:
- void publishEvent(Object event): 이벤트 객체를 받아서 이벤트를 게시합니다. 이벤트 객체는 보통 Spring의 ApplicationEvent를 상속하거나 일반 POJO일 수도 있습니다.
※ 현재 이 작업들은 다 DispatcherServlet 과 관계가 있음 ! (전에 다 하던거임)
핸들러
직역하면 ‘처리하는 취급자’. 스프링에서는 웹요청을 처리해서 핸들러라는 이름이다.
근데 이건 Controller 와 같지 않나? 라는 생각인데 컨트롤러가 일종의 핸들러인데 ,
핸들러는 좀 더 상위개념인 넓은 범위에서의 요청 처리 객체가 핸들러라고 한다.
(헷갈림)
https://ksabs.tistory.com/250 //핸들러 참고 자료.
Http Request -> Dispatcher Servlet -> HandlerMapping -> Dispatcher Servlet -> HandlerAdapter 목록조회 -> Dispatcher Servlet -> HandlerAdapter를 통해 핸들러 실행
핸들러의 흐름이다.
핸들러라는게 , 따로 무슨 어노테이션이나 그런게 있는게 아니고 간단하게 일단은 넓은 범위의 Controller 라고만 생각하자.
스케줄
스프링 프레임워크에서 제공하는 작업 스케줄링 기능.
이 기능으로 개발자는 지정된 시간 간격이나 특정 시점에 자동으로 실행되어야 하는 작업을 쉽게 구성할 수 있고 , 스케줄러는 멀티스레딩 , 비동기 실행을 지원해서 효율적으로 백그라운드 작업 처리를 제공한다.
스케줄러 설정
package com.example.ex01.schedule;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class Scheduling {
// @Scheduled(fixedRate = 1000) //1초 마다 실행
// public void t1() {
// System.out.println("Scheduling's t1() invoke....");
// }
@Scheduled(cron="*/15 * * * * *")
public void t2() {
System.out.println("Scheduling's t2() invoke....");
}
}
//초(0-59) 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-6)
//매 초마다 실행: "* * * * * *"
//매 시간의 30분마다 실행: "0 30 * * * *"
//매일 오전 8시 30분마다 실행: "0 30 8 * * *"
//매주 월요일 아침 9시 30분마다 실행: "0 30 9 * * 1"
//매월 1일 아침 4시 30분마다 실행: "0 30 4 1 * *"
//매주 월요일부터 금요일까지 아침 10시마다 실행: "0 0 10 * * 1-5"
이렇게 시간 별로 특정 함수를 실행하게 한다거나 설정할 수 있다.
'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글
24년 11월 20일 (0) | 2024.11.25 |
---|---|
24년 11월 19일 (1) | 2024.11.25 |
24년 11월 15일 (0) | 2024.11.24 |
24년 11월 14일 (0) | 2024.11.24 |
24년 11월 13일 (0) | 2024.11.24 |