Web/๋น„๋™๊ธฐ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

ํ•ด๋‹น ๊ธ€ 7๊ฑด

์ด์ „์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„œ๋น„์Šค ๋‹จ์—์„œ ๋น„๋™๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ try/catch ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ RejectedExecutorException์— ๋Œ€ํ•œ ๋ฐฉ์–ด๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜๊ณ  ํšŒ์‚ฌ์— ๊ณต์œ ํ•˜์˜€๋Š”๋ฐ ์‹ ๊ธฐํ•œ ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. try/catch๋ฌธ์œผ๋กœ ๋ฐฉ์–ด๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์•„๋„ AsyncConfig์—์„œ RejectedExecutorException์— ๋Œ€ํ•œ ๋Œ€์‘ ์ฒ˜๋ฆฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค .. setRejectedExecutionHandler : RejectedExecution ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ์˜ต์…˜์ด๋‹ค. new ThreadPoolExecutor์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. - AbortPolicy : ๋””ํดํŠธ๊ฐ’. RejectedEx..

Web/๋น„๋™๊ธฐ 2023. 9. 20. 21:42

์ด์ „์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„œ๋น„์Šค ๋‹จ์—์„œ ๋น„๋™๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ try/catch ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ RejectedExecutorException์— ๋Œ€ํ•œ ๋ฐฉ์–ด๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜๊ณ  ํšŒ์‚ฌ์— ๊ณต์œ ํ•˜์˜€๋Š”๋ฐ ์‹ ๊ธฐํ•œ ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. try/catch๋ฌธ์œผ๋กœ ๋ฐฉ์–ด๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์•„๋„ AsyncConfig์—์„œ RejectedExecutorException์— ๋Œ€ํ•œ ๋Œ€์‘ ์ฒ˜๋ฆฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค .. setRejectedExecutionHandler : RejectedExecution ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ์˜ต์…˜์ด๋‹ค. new ThreadPoolExecutor์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. - AbortPolicy : ๋””ํดํŠธ๊ฐ’. RejectedEx..

Web/๋น„๋™๊ธฐ 2023. 9. 18. 21:56

์šฐ๋ฆฌ๊ฐ€ Spring์—์„œ @Async์™€ @EnableAsync ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋น„๋™๊ธฐ์— ๊ด€ํ•œ ์„ค์ •์„ ์ปค์Šคํ…€ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ @Async์–ด๋…ธํ…Œ์ด์…˜์€ SimpleAsyncUncaughtExceptionHandler๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๐Ÿ”ฝ SimpleAsyncUncaughtExceptionHandler๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž์„ธํ•œ ์ฝ”๋“œ ๋”๋ณด๊ธฐ AsyncConfig ๋•Œ๋ฌธ์— AsyncConfigurerSupport๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปค์Šคํ…€ํ•ด๋ณด์ž. ์ฃผ์˜! AsyncCongifurer๋ฅผ ์ƒ์†๋ฐ›์•„์•ผ ํ•  ๊นŒ, AsyncConfigurerSupport๋ฅผ ์ƒ์†๋ฐ›์•„์•ผ ํ• ๊นŒ? -> ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ. ํ•˜์ง€๋งŒ AsyncConfigurerSupport(ํด๋ž˜์Šค..

Web/๋น„๋™๊ธฐ 2023. 9. 17. 15:49

์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์—์„œ Spring Event์™€ ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋น„๋™๊ธฐ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊น€์— ๋ณต์Šต์‚ผ์•„ ์Šคํ”„๋ง ์ด๋ฒคํŠธ๋„ ๊ฐ™์ด ์ ์šฉํ•ด๋ณด์•˜๋‹ค. ์Šคํ”„๋ง ์ด๋ฒคํŠธ๋ž€? Spring Event๋ž€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์Šคํ”„๋ง ๋‚ด๋ถ€์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ (publish) ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š”(listen) ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  - ์Šคํ”„๋ง์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์˜์กด์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค. - ํ•ต์‹ฌ๋กœ์ง๊ณผ ์ด์™ธ์˜ ๊ด€๋ จ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž์˜ ์ƒํ’ˆ ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” api๊ฐ€ ์žˆ๋‹ค. ํ•ด๋‹น api์˜ ์„œ๋น„์Šค ๋‹จ์—๋Š” 1. ์ฃผ๋ฌธํ•œ ์ƒํ’ˆ DB์— ์ €์žฅ 2. ํ‘ธ์‰ฌ ๋ฉ”์‹œ์ง€, ๋ฉ”์ผ ์ „์†ก ๊ณผ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์—ฌ๊ธฐ์„œ..

Web/๋น„๋™๊ธฐ 2023. 9. 17. 15:39

๋ฌธ์ œ ์ƒํ™ฉ ๋น„๋™๊ธฐ ๊ณต๋ถ€๋ฅผ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ JPA๋ฅผ ์‚ฌ์šฉ๋ฉด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ค ์งœ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ ค๋Š”๋ฐ ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. TransactionRequiredException.. ํŠธ๋žœ์žญ์…˜์ด ํ•„์ˆ˜๋ผ๋Š” ๋‚ด์šฉ์˜ ์ต์…‰์…˜์ธ ๋“ฏ ํ•˜๋‹ค. ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋งค๋‹ˆ์ € ๊ฐ์ฒด๊ฐ€ ์—†๋‹ค - persist๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค ์ด๋Ÿฐ๋ง์ผ๊นŒ ์•Œ๊ณ ๋ณด๋‹ˆ ๋‚ด๊ฐ€ ํ•˜๋Š” ์ž‘์—…์— ํŠธ๋žœ์žญ์…˜ ์„ ์–ธ์„ ํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค. JPA๋Š” Transaction์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค. Transaction์˜ ๋‹จ์œ„์— ๋”ฐ๋ผ 1์ฐจ ์บ์‹œ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์ด DB์— flush๋˜์–ด ์˜์†ํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ์˜์†์ž‘์—…์„ ํ•˜๋Š” persist() ๋ฉ”์†Œ๋“œ์— ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐ”์œผ๋‚˜, ๊ฐ€๋Šฅํ•œ Transaction์ด ์กด์žฌํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ..

Web/๋น„๋™๊ธฐ 2023. 9. 17. 14:27