Carnival7
Change Developer
Carnival7
전체 방문자
오늘
어제
  • 분류 전체보기
    • 자바의 정석
    • 프로그래밍 언어별 tools
      • 파이썬
      • 자바
    • 코딩 테스트
      • 백준 강의 기초편
      • 백준 강의 연습편
      • 백준 강의 문제편
      • 삼성 기출
      • 백준 - 일반
      • 카카오 기출
      • 프로그래머스 - 일반
      • 코테 풀이 Tools
    • CS
      • Network
      • 운영체제
      • 알고리즘
      • DB
    • Web_Backend
      • Spring
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
      • 스프링 핵심 원리 - 기본편
    • DevOps
    • IT 업무 지식
      • 인프라
      • 클라우드
    • 자격증
      • AWS - CLF
      • 정처기 - 실기
    • 생각 정리

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DMZ
  • nginx
  • 스프링 #인터셉터 #AOP #필터
  • 삼성기출 #백준강의문제편
  • 슬라이딩 윈도우 #덱
  • 코딩테스트 #삼성기출 #구현 #시뮬레이션
  • code deploy
  • 스프링 #AOP
  • 알고리즘 #백준강의기초편 #코딩테스트
  • 삼성기출 #2023 #상반기
  • ci/cd
  • Github Actions
  • DevOps
  • 프로그래머스 #카카오기출 #레벨2
  • 슬라이딩 윈도우
  • 스프링 부트 무중단 웹 서비스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Carnival7

Change Developer

Web_Backend/Spring

6.Spring 개념 기타

2024. 7. 12. 13:45

Spring 개념 기타


  • Spring 개념 기타
    • 단위 테스트
      • JUnit
    • 스프링으로 작업 스케쥴링하기
      • @Scheduled로 작업 스케쥴링하기
      • @Async를 사용해 비동기식으로 작업 실행하기
      • 작업 실행자

단위 테스트

  • 개념 : 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차. 즉, 모든 함수와 메소드에 대한 테스트 케이스를 작성하는 절차.
  • 목적 : 배포된 전체 애플리케이션을 테스트하는 대신, 각 클래스와 메소드의 책임에 자동화된 테스트를 작성한다.
  • 장점
    • 미래 결함에 대비한 안전망
    • 결함의 조기 발견이 가능
    • 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다.

'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
    'Web_Backend/Spring' 카테고리의 다른 글
    • 5.SpringBoot
    • 4.Spring MVC
    • 3.Spring AOP
    • 2.Spring DI
    Carnival7
    Carnival7

    티스토리툴바