๐ก ๋ชฉํ
๊ธฐ์กด์ ์ด๋ฉ์ผ ๊ฒ์ฆ ๊ณผ์ ์์ ์ธ์ฆ๋ฒํธ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ ์ด๋ฏธ์ง์ ๊ฐ์ด ํ๊ท 4.18 ์ด์ ์์ฒญ์๊ฐ์ด ๊ฑธ๋ ธ๋ค.
1. ์ค์ ์๋น์ค๋ฅผ ์ด์ํ๋ ์ ์ฅ์์๋ ์ฌ์ฉ์๊ฐ ํ์๊ฐ์ ์ ์ฐจ๊น์ง ๋ค์ด์๋ค๋ฉด ๋น ๋ฅด๊ฒ ํ์๊ฐ์ ์ ์ฐจ๋ฅผ ๊ฐ๋๋ก ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ง์ฝ ์ด๋ฉ์ผ ์ธ์ฆ ๋ฒํผ์ ๋๋ ๋๋ฐ 4.2 ์ด๋ ์๋ฒ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๋ฉด ์ฌ์ฉ์๊ฐ ํ์๊ฐ์ ์ ์๋ํ ๊ฒ์ ํํํด๋ฒ๋ฆด ์ง๋ ๋ชจ๋ฅธ๋ค.
2. ์ด๋ฉ์ผ ๋ฐ์ก์ ์๋์ ์ผ๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ฉด ์ด๋ฉ์ผ ๋ฐ์ก ๋๊ธฐ ์ค์๋ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ด์ ์๋ฒ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ด ์์ฒญ ๋๊ธฐ์๊ฐ์ด ๋ง์ด ์ค ๊ฒ์ผ๋ก ์์๋๋ค.
3. ์ด๋ฉ์ผ ๋ฐ์ก ์์ ์ค ๋คํธ์ํฌ ์ง์ฐ์ด๋ ์ด๋ฉ์ผ ์๋ฒ์ ์๋ต ์ง์ฐ์ด ๋ฐ์ํ๋๋ผ๋, ์๋ฒ์ ํ์๊ฐ์ ์๋ต์๊ฐ์๋ ์ํฅ์ด ๋ฏธ์น์ง ์๋๋ก ํด์ผํ๋ค.
์ด๋ฌํ ์ด์ ๋ค๋ก ๋๋ ์ด๋ฉ์ผ ์ ์ก ๋ก์ง์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๊ธฐ๋ก ํ๋ค.
AsyncConfig
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Bean(name = "emailTaskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); // ๊ธฐ๋ณธ ์ค๋ ๋ ์
executor.setMaxPoolSize(20); // ์ต๋ ์ค๋ ๋ ์
executor.setQueueCapacity(100); // ๋๊ธฐ ํ์ ํฌ๊ธฐ
executor.setThreadNamePrefix("EmailThread-");
executor.initialize();
// ์ค๋ ๋ ํ์ ์ํ๋ฅผ ๋ก๊ทธ๋ก ์ถ๋ ฅ
logThreadPoolStatus(executor);
return executor;
}
private void logThreadPoolStatus(ThreadPoolTaskExecutor executor) {
System.out.println("Active Threads: " + executor.getActiveCount());
System.out.println("Total Tasks: " + executor.getThreadPoolExecutor().getTaskCount());
System.out.println("Completed Tasks: " + executor.getThreadPoolExecutor().getCompletedTaskCount());
}
}
์ฐ๋ ๋ ์ ๋ฑ ์ฐ๋ ๋ ๊ด๋ จ ์ต์ ๊ฐ๋ค์ ๋ช ์ํด์ฃผ๊ณ , ThreadPoolTaskExecutor ๋ฅผ ์ด์ฉํด์ ๊ธฐ์กด์ ์ฌ์ฉ๋ ์ฐ๋ ๋๋ฅผ ์ฌ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค.
EmailConfig
@Async("emailTaskExecutor")
public CompletableFuture<Boolean> sendCertificationEmail(String email, String certificationNumber) {
๋น๋๊ธฐ ์ฒ๋ฆฌํ๊ณ ์ ํ๋ ๋ฉ์๋ ์์ @Async("emailTaskExecutor") ์ ๊ฑธ์ด์คฌ๋ค.
SsakTiumApplication
@SpringBootApplication
@EnableJpaAuditing
@EnableAsync
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
public class SSakTiumApplication {
public static void main(String[] args) {
SpringApplication.run(SSakTiumApplication.class, args);
}
}
main application ์ ๊ฐ์ ์์ @EnableAsync ์ด๋ ธํ ์ด์ ์ ๋ฌ์์คฌ๋ค.
๐ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ํ๊ท 4.18์ด์์ ํ๊ท ์ฝ 1.04์ด๋ก 75.2% ์ฑ๋ฅ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ก๋ค!