main() 함수 실행 시 main 스레드 1개 포함public static void main(String[] args) {
SpringApplication.run(AppStart.class);
}
정의: 스프링 프레임워크는 기본적으로 멀티스레드(대규모) 환경
vs Node.js: 단일스레드(소규모)
사용처:
/member/login, /member/info 동시 요청 시 서로 다른 스레드가 처리@EnableAsync 어노테이션 사용 → 비동기화 활성화@Async 어노테이션 사용 → 새로운 작업 스레드 생성, 백그라운드 실행config 폴더 생성 → ThreadPoolConfig 클래스 생성@Configuration 어노테이션 등록 → 스프링 컨테이너에 빈 등록(IoC)@Configuration
public class ThreadPoolConfig {
@Bean
public Executor taskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize( ? ); // 기본(최소) 실행 스레드 개수
executor.setMaxPoolSize( ? ); // 최대 실행 스레드 개수
executor.setQueueCapacity( ? ); // 최대 대기 개수, 초과 시 503 오류 발생
executor.initialize(); // 스레드풀 초기화
return executor;
}
}
@EnableScheduling 어노테이션 작성@Scheduled 어노테이션 작성@Scheduled(fixedRate = 밀리초)@Scheduled(fixedDelay = 밀리초)@Scheduled(cron = "초 분 시 일 월 요일") → 권장 (서버/PC 시스템 기준)@Scheduled("* * * * * *")* : 초 0 ~ 59 * : 분 0 ~ 59 * : 시 0 ~ 23 * : 일 1 ~ 31 * : 월 1 ~ 12 * : 요일 0 ~ 6 (0=일요일, 1=월요일, …, 6=토요일)// 주말(일/토) 오전 10시
@Scheduled(cron = "0 0 10 * * 0,6")
// 일요일 오전 9시
@Scheduled(cron = "0 0 9 * * 0")
// 매월 1일 오전 8시
@Scheduled(cron = "0 0 8 1 * *")