Web_Backend/Spring

6.Spring 개념 기타

Carnival7 2024. 7. 12. 13:45

Spring 개념 기타



단위 테스트

  • 개념 : 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차. 즉, 모든 함수와 메소드에 대한 테스트 케이스를 작성하는 절차.
  • 목적 : 배포된 전체 애플리케이션을 테스트하는 대신, 각 클래스와 메소드의 책임에 자동화된 테스트를 작성한다.
  • 장점
    • 미래 결함에 대비한 안전망
    • 결함의 조기 발견이 가능
    • TDD 가 더 나은 디자인을 만든다
    • 잘 작성된 테스트는 코드와 기능의 문서화 역할을 한다.

JUnit

  • 자바에서 독립된 단위테스트를 지원해주는 프레임워크

  • Spring-Test에서 테스트를 지원하는 어노테이션

    • @RunWith(SpringJUnit4ClassRunner.class)
      • SpringJUnit4ClassRunner라는 클래스를 지정해주면 jUnit 이 테스트를 진행하는 중에 ApplicationContext 를 만들고 관리하는 작업을 진행해 준다
      • RunWith 어노테이션은 각각의 테스트 별로 객체가 생성되더라도 싱글톤의 ApplicationContext 를 보장한다.
    • @ContextConfiguration
      • 스프링 빈 설정 파일의 위치를 지정

스프링으로 작업 스케쥴링하기

스프링은 정기적으로 빈 메소드를 실행할 수 있는 스케쥴링 기능을 제공한다.

@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다.