Spring 개념 기타
단위 테스트
- 개념 : 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차. 즉, 모든 함수와 메소드에 대한 테스트 케이스를 작성하는 절차.
- 목적 : 배포된 전체 애플리케이션을 테스트하는 대신, 각 클래스와 메소드의 책임에 자동화된 테스트를 작성한다.
- 장점
- 미래 결함에 대비한 안전망
- 결함의 조기 발견이 가능
- TDD 가 더 나은 디자인을 만든다
- 잘 작성된 테스트는 코드와 기능의 문서화 역할을 한다.
JUnit
자바에서 독립된 단위테스트를 지원해주는 프레임워크
Spring-Test에서 테스트를 지원하는 어노테이션
- @RunWith(SpringJUnit4ClassRunner.class)
- SpringJUnit4ClassRunner라는 클래스를 지정해주면 jUnit 이 테스트를 진행하는 중에 ApplicationContext 를 만들고 관리하는 작업을 진행해 준다
- RunWith 어노테이션은 각각의 테스트 별로 객체가 생성되더라도 싱글톤의 ApplicationContext 를 보장한다.
- @ContextConfiguration
- 스프링 빈 설정 파일의 위치를 지정
- @RunWith(SpringJUnit4ClassRunner.class)
스프링으로 작업 스케쥴링하기
스프링은 정기적으로 빈 메소드를 실행할 수 있는 스케쥴링 기능을 제공한다.
@Scheduled로 작업 스케쥴링하기
빈 컴포넌트의 특정 메소드에 @Scheduled 어노테이션을 추가하고, 스프링 부트 애플리케이션 클래스에 @EnableScheduling 어노테이션을 추가해 작업을 스케쥴링할 수 있다.
@Component
public class Task {
private static final Logger log = LoggerFactory.getLogger(Task.class);
@Scheduled(fixedRate = 10000)
//fixedDelay=10000
//initialDelay=20000
//cron="*/5 * * * * MON-FRI") //CRON EXPRESSION
public void execute() {
log.info("The time is now {}", new Date());
}
}
@EnableScheduling
public class TaskSchedulingApplication implements CommandLineRunner{}
빈이 스프링 컨테이너에 의해 관리되면 @Scheduled(fixedRate = 10000)는 execute 메소드가 10000ms 마다 한 번씩 실행되도록 한다.
@Async를 사용해 비동기식으로 작업 실행하기
빈 컴포넌트의 특정 메소드에 @Async 어노테이션을 추가하고, 스프링 부트 애플리케이션 클래스에 @EnableAsync 어노테이션을 추가해 작업을 스케쥴링할 수 있다.
@Component
public class AsyncTask {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Async
void doThisAsynchronously() {
IntStream.range(1, 100).forEach(x -> logger.info("AsyncTask {}",x));
}
@Async
Future<Long> doThisAsynchronouslyAndReturnAValue() {
IntStream.range(1, 100).forEach(x -> logger.info("AsyncTask With Return Value {}",x));
long sum = IntStream.range(1, 100).sum();
return new AsyncResult<>(sum);
}
}
@EnableAsync
public class TaskSchedulingApplication implements CommandLineRunner{}
작업 실행자
스프링 프레임워크에서 사용되는 디폴트 작업 실행자는 SimpleAsyncTaskExecutor다.
'Web_Backend > Spring' 카테고리의 다른 글
5.SpringBoot (0) | 2024.07.12 |
---|---|
4.Spring MVC (0) | 2024.07.12 |
3.Spring AOP (0) | 2024.07.12 |
2.Spring DI (0) | 2024.07.12 |
1.Spring Framework와 IoC (0) | 2024.07.12 |