# 42. 작업 실행 및 스케줄링 by ys

`Executor`컨텍스트에서 빈이 없으면 스프링 부트는 비동기 태스크 실행 ( `@EnableAsync`)과 스프링 MVC 비동기 요청 처리와 자동으로 연관 될 수있는 적절한 기본값과 `ThreadPoolTaskExecutor` 을 자동으로 구성한다 .

| ![\[팁\]](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/images/tip.png)                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>컨텍스트에서 커스텀 <code>Executor</code> 을 정의했다면 , 정규 태스크 실행 (즉 <code>@EnableAsync</code>)은 그것을 손쉽게 사용하지만, Spring MVC 지원은 <code>AsyncTaskExecutor</code>구현 (<code>applicationTaskExecutor</code>)을 필요로하기 때문에 구성되지 않을 것이다 .  목표 배열에 따라,  <code>ThreadPoolTaskExecutor</code>로 변경 하거나  <code>ThreadPoolTaskExecutor</code>와 사용자 정의 <code>Executor</code>를 래핑하는 <code>AsyncConfigurer을 둘다 정의할 수 있습니다.</code></p><p>자동 구성된 <code>TaskExecutorBuilder</code>를 사용하면 자동 구성이 기본적으로 수행하는 것을 재현하는 인스턴스를 쉽게 작성할 수 있습니다.</p> |

스레드 풀은 로드에 따라 확장 및 축소 할 수있는 8 개의 코어 스레드를 사용합니다. 이러한 기본 설정은 다음 예와 같이 `spring.task.execution`네임 스페이스를 사용하여 세부 조정할 수 있습니다 .

```markup
spring.task.execution.pool.max-threads = 16
spring.task.execution.pool.queue-capacity = 100
spring.task.execution.pool.keep-alive = 10s
```

이렇게하면 스레드 풀이 바운드 큐를 사용하도록 변경되므로 큐가 가득 차면 (100 개의 작업) 스레드 풀이 최대 16 개의 스레드로 증가합니다.  스레드가 10 초 동안 유휴 상태 일 때 (기본적으로 60 초가 아닌) 스레드가 재생되면서 풀 축소가 더 적극적입니다.

예약 된 작업 실행 ( `@EnableScheduling`)에 연결해야하는 경우`ThreadPoolTaskScheduler`도 자동 구성 할 수 있습니다 . 스레드 풀은 기본적으로 하나의 스레드를 사용하며 이러한 설정은 `spring.task.scheduling`네임 스페이스를 사용하여 세부 조정할 수 있습니다 .

`TaskExecutorBuilder`Bean과 `TaskSchedulerBuilder`Bean 둘다 사용자 정의 실행 프로그램 또는 스케줄러를 작성해야 할 경우 컨텍스트에서 사용 가능하게됩니다.
