- Application ํด๋์ค ๋๋ ๊ด๋ จ Configuration ํด๋์ค์
@EnableAsync์ด๋ ธํ ์ด์ ์ ์ถ๊ฐ - ๋ณ๋ ์ค๋ ๋์์ ๋น๋๊ธฐ๋ก ์คํํ๊ณ ์ ํ๋ ๋ฉ์๋์
@Async์ด๋ ธํ ์ด์ ์ ์ถ๊ฐ
- proxy๋ฅผ ์ด์ฉ
- ์ฆ, @Async๊ฐ ๋ฌ๋ฆฐ ๋ฉ์๋๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ํตํด
์ฌ์ฉํ ์ค๋ ๋ ์ ์ ๋ฐ ์์ ํ ๋น์ด๋ผ๋ํก๋จ ๊ด์ฌ์ฌ ๋ก์ง์ด ์ํ๋ ํ์ ํธ์ถ๋จ - ๋ฐ๋ผ์,
์ ๊ทผ ์ ์ด์๊ฐ public์ด์ด์ผ ํ๋ฉฐself-invocation์ด ๋ถ๊ฐ๋ฅ
- ๋ฉ์๋์ ๋ฐํ ๊ฒฐ๊ณผ๊ฐ ์ด๋๊ฐ์์ ์ฐ์ด์ง ์์ ๋์๋ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ก ์ฒ๋ฆฌํ๋ฉด ๋จ
- ๋ฐํ ๊ฒฐ๊ณผ๋ฅผ ํตํด ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ ๊ฒฝ์ฐ ์์ 2๊ฐ์ง๋ฅผ ๋ฐํํ ์ ์์
- ๋ ์ธ๋ฐํ ์ปจํธ๋กค์ ์ํ๊ณ , Java 8 ์ด์์ ๋ฒ์ ์ ์ด๋ค๋ฉด ํ์ ์ชฝ์ด ์ข ๋ ๋์ ์ ํ์ด๋ผ ๋ณผ ์ ์์
- ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด
SimpleAsyncTaskExecutor๋ฅผ ์ฌ์ฉ- ๋น๋๊ธฐ ๋ก์ง์ด ํธ์ถ๋ ๋๋ง๋ค ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๋ Executor
- ๋งค๋ฒ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง
- ๋๋ฌด ๋ง์ ์ค๋ ๋๊ฐ ์์ฑ๋ ์ ์์ - 100๋ง ๊ฐ ์์ฒญ์ด ์ค๋ฉด 100๋ง ๊ฐ ์ค๋ ๋๋ฅผ ๋ง๋๋๋ฐ?
- ๋งค๋ฒ ์ค๋ ๋๋ฅผ ์๋ก ๋ง๋๋ ๊ฒ์ ์ค๋ ๋ ์์ฑ ๋น์ฉ์ ๊ณผ๋ํ๊ฒ ์ง๋ถํ๋ ์ผ
- ๋ฐ๋ผ์, ์ปค์คํ
ThreadPoolTaskExecutor๋ฅผ ๋ง๋ค์ด ์ ์ ํ ๊ฐ์์ ์ค๋ ๋ ํ์ ์ด์ฉํ ๊ฒ์ ๊ถ์ฅ- ๋๋ ์ด ์ปค์คํ
Executor๋ฅผ
AsyncConfig์ ๋ชจ์๋๊ณ , ํด๋น Config์@EnableAsync๋ฅผ ๋ถ์ฌ๋๋ ๋ฐฉ์์ ์ฌ์ฉ ์ค
- ๋๋ ์ด ์ปค์คํ
Executor๋ฅผ
- ๋น์ฐํ ๋ง์ด์ง๋ง, ๋น๋๊ธฐ ๋ก์ง์ ํธ์ถ ์์ ๋ถํฐ ๋ณ๋ ์ค๋ ๋๋ก ๋ถ๋ฆฌ๋๋ฏ๋ก
์์ธ๊ฐ ํธ์ถ์์๊ฒ ์ ํ๋์ง ์์ - ๋ฐํ๊ฐ์ ์ฝ๋ฐฑ์ผ๋ก ์ ๋ฌ๋ฐ๋ ๋ฉ์๋์์๋ ์์ธ์ฒ๋ฆฌ๊ฐ ์ด๋ ต์ง ์์ง๋ง, ๋ฐํ๊ฐ์ด void์ธ ๊ฒฝ์ฐ
AsyncUncaughtExceptionHandler๋ฅผ ๊ตฌํํ๋ ํด๋์ค์์ ๋ณ๋์ ์์ธ ํธ๋ค๋ง์ ํด ์ค์ผ ํจ