Is Spring Bean Thread-Safe?

Spring Bean์˜ ๊ธฐ๋ณธ scope๋Š” ์‹ฑ๊ธ€ํ†ค์ด๋ฉฐ, ์Šคํ”„๋ง์€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด singleton scope๋กœ ์ƒ์„ฑ๋œ bean๋“ค์€ Thread Safe ํ• ๊นŒ?? Spring Container๋‚ด์—์„œ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด Thread-Safe ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์€ ์˜คํžˆ๋ ค ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•ธ๋“ค๋งํ•ด์ค˜์•ผํ•œ๋‹ค.

์‹ฑ๊ธ€ํ†ค์ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ํ˜•ํƒœ์˜ ์˜ค๋ธŒ์ ํŠธ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” stateless ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์•ผํ•œ๋‹ค. ์ด๋•Œ๋Š” ์ฝ๊ธฐ์ „์šฉ ๊ฐ’์ด๋ผ๋ฉด ์ดˆ๊ธฐํ™” ์‹œ์ ์— ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ €์žฅํ•ด๋‘๊ณ  ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ ์—†๋‹ค. ๋งŒ์•ฝ ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋‚˜, DB ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑํ•œ ์ •๋ณด๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋กœ์ปฌ ๋ณ€์ˆ˜, ๋ฆฌํ„ด ๊ฐ’์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋ฉ”์†Œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜, ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๋กœ์ปฌ ๋ณ€์ˆ˜๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ €์žฅํ•  ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‹ฑ๊ธ€ํ†ค์ด๋ผ๊ณ  ํ•ด๋„ ๋ฌธ์ œ์—†๋‹ค.

JVM์—์„œ ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์˜ stack ์˜์—ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ heap ์˜์—ญ์€ ์“ฐ๋ ˆ๋“œ๊ฐ„์— ๊ณต์œ ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค.

๋ณ€์ˆ˜

์ €์žฅ์˜์—ญ

Static ๋ณ€์ˆ˜, ์ „์—ญ ๋ณ€์ˆ˜, ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” class ์ •๋ณด ๋“ฑ

Java ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

์ง€์—ญ๋ณ€์ˆ˜, ํ•จ์ˆ˜

Stack

๋™์ ํ• ๋‹น๋œ ๊ฐ์ฒด

Heap

๊ทธ๋Ÿฌ๋ฏ€๋กœ Stack ์ด์™ธ์˜ ๊ณต๊ฐ„์— ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง ๋นˆ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๋ฉด, thread-safeํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ธ์ง€ํ•˜๊ณ , ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ๋งŒ์•ฝ ์ž์ฃผ ์ฝ์–ด์˜ค๋Š” ๋™์ ํ• ๋‹น๋˜๋Š” ๊ฐ์ฒด๋ฅผ singleton๊ณผ ๊ฐ™์ด ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ??Cache๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค!

์ฐธ๊ณ 

Last updated