JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #60. Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹. ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring...

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #60. Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹. ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹

์ถœ์ฒ˜: ๋””์กด

Java์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ํ”„๋กœ์„ธ์Šค

Java ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Java ํ”„๋กœ๊ทธ๋žจ์ด JVM์—์„œ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๊ฐ์ฒด๊ฐ€ ํž™์— ์ƒ์„ฑ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ผ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ผ๋ถ€ ํ•ญ๋ชฉ์€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด๋ฅผ ์ฐพ์•„์„œ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #61.  Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹.  ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ - 1๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํž™์„ ํ‰๊ฐ€ํ•œ ํ›„ ์‚ฌ์šฉ ์ค‘์ธ ๊ฐœ์ฒด์™€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด๋ฅผ ํ™•์ธํ•˜๊ณ  ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๊ฐ€ ์—ฌ์ „ํžˆ ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋–ค ๋ถ€๋ถ„์—์„œ๋„ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #61.  Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹.  ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ - 2๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ํ”„๋กœ์„ธ์Šค๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ๋งˆํ‚น.
  2. ์ •์ƒ์ ์ธ ์ œ๊ฑฐ.
  3. ์••์ถ•์œผ๋กœ ์ œ๊ฑฐ.
ํ‘œ์‹œ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋ถ„๊ณผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๋ผ๋ฒจ๋ง์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์‚ญ์ œ๋Š” ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ฐธ์กฐ๋œ ๊ฐœ์ฒด์™€ ํฌ์ธํ„ฐ๋ฅผ ์—ฌ์œ  ๊ณต๊ฐ„์— ๋‚จ๊ฒจ ๋‘๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ์••์ถ• ์‚ญ์ œ - ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐœ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ฐธ์กฐ๋œ ๋‚˜๋จธ์ง€ ๊ฐœ์ฒด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๊ฐœ์ฒด๋ฅผ ํ•จ๊ป˜ ์ด๋™ํ•˜์—ฌ ์ƒˆ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ›จ์”ฌ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

JVM ํž™ ๋ฉ”๋ชจ๋ฆฌ

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #61.  Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹.  ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ - 3

์ Š์€ ์„ธ๋Œ€

์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” Young Generation์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ƒˆ๋กœ์šด ์‚ฌ๋ฌผ๋“ค์ด ์‚ด๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ณด์œก์›์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. Young Generation์€ ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ฐœ์ฒด๊ฐ€ ์‹œ์ž‘๋˜๋Š” Eden ๊ณต๊ฐ„๊ณผ ๋‹จ์ผ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ฃผ๊ธฐ์—์„œ ๊ฐœ์ฒด๊ฐ€ ์‚ด์•„๋‚จ์€ ํ›„ Eden ๋ฐ–์œผ๋กœ ์ด๋™๋˜๋Š” ๋‘ ๊ฐœ์˜ Survivor ๊ณต๊ฐ„์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. Young Generation ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐœ์ฒด๋ฅผ ์ˆ˜์ง‘ํ•  ๋•Œ ๋‹ค์‹œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—๋ด ์ŠคํŽ˜์ด์Šค ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋Š” ์—๋ด ์ŠคํŽ˜์ด์Šค์—์„œ ์ฒ˜์Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ JVM์—์„œ ๊ฒฐ์ •ํ•œ ์ž„๊ณ„๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰๋œ ๊ฐ์ฒด๋Š” Eden Space์—์„œ ์ฒซ ๋ฒˆ์งธ ์ €์žฅ ๊ณต๊ฐ„('Eden' ๋ฐ 'from' -> 'to')์œผ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋Š” ์—๋ด ์ŠคํŽ˜์ด์Šค ํด๋ฆฌ์–ด ์‹œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ƒ์กด์ž 0(S0) ๋ฐ ์ƒ์กด์ž 1(S1) ๋‘ ์ƒ์กด์ž(์‹œ์ž‘ ๋ฐ ๋) ํ•„๋“œ๋Š” ๋ชจ๋‘ ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฐธ์กฐ๋œ ๋ชจ๋“  ๊ฐœ์ฒด๊ฐ€ ๋‚˜๋จธ์ง€ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์™„๋ฃŒ๋˜๋ฉด ์ƒ์กด์ž "from"๊ณผ "to"์˜ ์žฅ์†Œ(์ด๋ฆ„)๊ฐ€ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ค‘์— S1์ด "to" ์—ญํ• ์— ์žˆ์—ˆ๋‹ค๋ฉด ์ด์ œ S1์ด ๊ฐ€๋“ ์ฐจ์„œ "from"์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ S0์ด ๋น„์–ด ์žˆ์œผ๋ฉด "to"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ธ๋Œ€

์‚ฌ์†Œํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ํ›„ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด๊ฐ€ ํŠน์ • ์—ฐ๋ น ์ž„๊ณ„๊ฐ’(์ตœ์‹  JVM์˜ ๊ธฐ๋ณธ ์ž„๊ณ„๊ฐ’์€ 15๊ฐœ์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ฃผ๊ธฐ๋กœ ์„ค์ •๋จ)์— ๋„๋‹ฌํ•˜๋ฉด ์ˆ˜๋ช…์ด ๊ธด ๊ฐœ์ฒด์™€ ํ•จ๊ป˜ ์ Š์€ ์„ธ๋Œ€์—์„œ ์ด์ „ ์„ธ๋Œ€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•จ์— ๋”ฐ๋ผ ๊ฐœ์ฒด๋Š” ๊ณ„์†ํ•ด์„œ Old Generation ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ฑ„์›Œ์ง€๊ธฐ ์‹œ์ž‘ํ•˜๋ฉฐ ๋Œ€๊ทœ๋ชจ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ Old Generation ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ง‘ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #61.  Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹.  ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ - 4

์˜๊ตฌ ์„ธ๋Œ€

ํด๋ž˜์Šค ๋ฐ ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ ์ƒ์„ฑ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ํ†ตํ•ด ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์ค‘์— ๋ชจ๋“  ์„ธ๋Œ€์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๊ฐœ์ฒด๊ฐ€ ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค.์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #61.  Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹.  ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ - 5

๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ์œ ํ˜•

ํž™ ๋‚ด์˜ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์„ ์ •๋ฆฌํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์ข…์ข… Minor, Major ๋ฐ Full ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Minor, Major ๋ฐ Full์ด๋ผ๋Š” ์šฉ์–ด๋Š” ์ ์ ˆํ•œ ์ •์˜ ์—†์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์œ ํ˜•์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‚ฌ์†Œํ•œ ์“ฐ๋ ˆ๊ธฐ ์ˆ˜๊ฑฐ

Young Generation ๊ณต๊ฐ„์—์„œ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์„ Minor Garbage Collection์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋นŒ๋“œ๋Š” JVM์ด ์ƒˆ ๊ฐ์ฒด์— ๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ์ฆ‰ Eden Space๊ฐ€ ๊ฐ€๋“ ์ฐฌ ๊ฒฝ์šฐ ํ•ญ์ƒ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ํƒ๋ฅ ์ด ๋†’์„์ˆ˜๋ก Minor Garbage Collection์ด ๋” ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์“ฐ๋ ˆ๊ธฐ ์ˆ˜๊ฑฐ

Major Garbage Collection์€ Tenured(์˜ค๋ž˜๋œ ๊ณต๊ฐ„)๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Old Generation์€ ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— Young Generation๋ณด๋‹ค ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ๋œ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Old Generation์—์„œ ๊ฐœ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด "์ฃผ์š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘"์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. Old Generation ์ˆ˜์ง‘๊ฐ€๋Š” Young Generation์˜ ์Šน๊ฒฉ ์‹คํŒจ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์–ธ์ œ ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ์˜ˆ์ธกํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ง‘๊ธฐ๋Š” Old Generation์˜ ์ฑ„์šฐ๊ธฐ ์ž„๊ณ„๊ฐ’์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ํ•ด๋‹น ์ž„๊ณ„๊ฐ’์ด ์ดˆ๊ณผ๋˜๋ฉด ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž„๊ณ„๊ฐ’์ด ์Šน๊ฒฉ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ "์ „์ฒด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘"์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ „์ฒด ์“ฐ๋ ˆ๊ธฐ ์ˆ˜๊ฑฐ

์ „์ฒด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ Š์€ ๊ณต๊ฐ„๊ณผ ์˜ค๋ž˜๋œ ๊ณต๊ฐ„ ๋ชจ๋‘๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Major(OLD ์„ธ๋Œ€๋งŒ ํ•ด๋‹น)์™€ Full GC(Young + OLD(ํž™))๋ฅผ ํ˜ผ๋™ํ•ฉ๋‹ˆ๋‹ค. Full Garbage Collection์€ Old Generation์„ ์กฐ๋ฆฝ, ์••์ถ•ํ•œ ํ›„ Young Generation๋ถ€ํ„ฐ Old Generation๊นŒ์ง€ ๋ชจ๋“  ์ƒ๋ช…์ฒด๋ฅผ ์Šน๊ฒฉ์‹œํ‚ค๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์€ Stop-the-World์˜ ์ค‘์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ ๊ฐœ์ฒด๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š๊ณ  ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ

์ถœ์ฒ˜: Dev.to Spring Framework๋Š” Java ํ”Œ๋žซํผ์„ ์œ„ํ•œ ๋ฒ”์šฉ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋ชจ๋“  Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Java EE ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Spring์ฝ”๋”ฉ๊ณผ ๊ด€๋ จ๋œ ๋ฉด์ ‘ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 2021๋…„ ๊ธฐ์ˆ  ๋ฉด์ ‘์„ ์ค€๋น„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #61.  Java(JVM)์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹.  ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์—์„œ Spring์— ๊ด€ํ•œ 15๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ - 6

1. ๋ด„์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋‹ต๋ณ€: Spring์€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. Spring Framework์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋ชจ๋“  Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Java EE ํ”Œ๋žซํผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” POJO(Plain Old Java Object) ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์„ ํ†ตํ•ฉํ•˜์—ฌ J2EE๋ฅผ ๊ฐœ๋ฐœ์— ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

2. Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ Bean์˜ ๊ธฐ๋ณธ ๋ฒ”์œ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€: Bean์˜ ๊ธฐ๋ณธ ๋ฒ”์œ„๋Š” ์‹ฑ๊ธ€ํ†ค (๋””์ž์ธ ํŒจํ„ด)์ž…๋‹ˆ๋‹ค.

3. ๋นˆ ์™€์ด์–ด๋ง์ด๋ž€?

๋‹ต๋ณ€: ๋นˆ ์™€์ด์–ด๋ง์€ Spring ์ปจํ…Œ์ด๋„ˆ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ ์š”์†Œ(๋นˆ) ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋Š” ํ–‰์œ„์ž…๋‹ˆ๋‹ค.

4. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋‹ต๋ณ€: Spring Security๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ˜ Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ณ„๋„ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ CSRF ๊ณต๊ฒฉ๊ณผ ๊ฐ™์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Spring Security๋ฅผ โ€‹โ€‹์‚ฌ์šฉํ•˜๋ ค๋ฉด @EnableWebSecurity๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์ฃผ์„์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. Bean ์ •์˜์—๋Š” ๋ฌด์—‡์ด ํฌํ•จ๋ฉ๋‹ˆ๊นŒ?

๋‹ต๋ณ€: ๋นˆ ์ •์˜์—๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ตฌ์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ผ๋Š” ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋นˆ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•;
  • ๋นˆ ์ˆ˜๋ช…์ฃผ๊ธฐ ์„ธ๋ถ€์ •๋ณด
  • ๋นˆ ์˜์กด์„ฑ.

6. ์Šคํ”„๋ง ๋ถ€ํŠธ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€: Spring Boot๋Š” ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋กœ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ์šฉ๊ตฌ ๊ตฌ์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ํ”„๋ ˆ์ž„์›Œํฌ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

7. DispatcherServlet์€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋‚˜์š”?

๋‹ต๋ณ€: DispatcherServlet์€ Spring MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Front Controller ๋””์ž์ธ ํŒจํ„ด์˜ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด(์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋””์ž์ธ ํŒจํ„ด)์€ ์ „์ฒด ์š”์ฒญ์„ ๋ฐ›์•„ ์‹ค์ œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. Spring MVC์—์„œ๋Š” DispatcherServlet์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์˜ฌ๋ฐ”๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘(์˜ˆ: @RequestMapping ์ฃผ์„)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

8. spring-mvc.jar์ด ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด spring-core์˜ ์ผ๋ถ€์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€: Spring-mvc.jar์€ spring-core์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ฆ‰, Java ํ”„๋กœ์ ํŠธ์—์„œ Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— spring-mvc.jar์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ spring-mvc.jar์€ ์ผ๋ฐ˜์ ์œผ๋กœ /WEB-INF/lib ํด๋”์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

9. Spring์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ๋‚˜์š”?

๋‹ต๋ณ€: ๋‹ค์Œ์€ Spring Framework ์‚ฌ์šฉ์˜ ๋ช‡ ๊ฐ€์ง€ ์ด์  ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • ๊ฒฝ๋Ÿ‰ โ€“ Spring์€ ํฌ๊ธฐ์™€ ํˆฌ๋ช…์„ฑ ์ธก๋ฉด์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€๋ณ์Šต๋‹ˆ๋‹ค. Spring Framework์˜ ๊ธฐ๋ณธ ๋ฒ„์ „์€ ์•ฝ 2MB์ž…๋‹ˆ๋‹ค.
  • ์ œ์–ด ๋ฐ˜์ „(IOC) - ์ œ์–ด ๋ฐ˜์ „ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ Spring์—์„œ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์ด ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๋Š” ์ข…์† ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋Œ€์‹  ์ข…์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€์  ์ง€ํ–ฅ - Spring์€ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ณ  ์‹œ์Šคํ…œ ์„œ๋น„์Šค์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ - Spring ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•จ๊ป˜ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ๊ตฌ์„ฑํ•˜๊ณ , ์ƒ์„ฑ๋ถ€ํ„ฐ ํ๊ธฐ๊นŒ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • MVC ํ”„๋ ˆ์ž„์›Œํฌ - Spring ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Struts ๋˜๋Š” ๊ธฐํƒ€ ๊ณผ๋„ํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๊ฑฐ๋‚˜ ๋œ ์ธ๊ธฐ ์žˆ๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•˜๋Š” ์ž˜ ์„ค๊ณ„๋œ MVC ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ - Spring์—๋Š” ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜(์˜ˆ: ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ) ๋˜๋Š” ์ „์—ญ ํŠธ๋žœ์žญ์…˜(์˜ˆ: JTA ์‚ฌ์šฉ)์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๊ด€๋œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ - Spring์€ ๊ธฐ์ˆ ๋ณ„ ์˜ˆ์™ธ(์˜ˆ: JDBC, Hibernate ๋˜๋Š” JDO์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ)๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ณ  ํ™•์ธ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

10. ์Šคํ”„๋ง๋นˆ์ด๋ž€?

๋‹ต๋ณ€: Spring Bean์€ Spring Container๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์ƒ์„ฑ ๋ฐ ์—ฐ๊ฒฐ๋˜๋ฉฐ ๋‚˜์ค‘์— ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” "๊ฐ์ฒด ๊ฐ€๋ฐฉ"(์ปจํ…Œ์ด๋„ˆ)์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์„ ์€ ์ข…์†์„ฑ ์ฃผ์ž…์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, โ€œ์ด๊ฒŒ ํ•„์š”ํ•ด์š”โ€๋ผ๊ณ  ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ•ด๋‹น ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํŠน์ • ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

11. ์ฝ”์–ด ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋“ˆ์˜ ๋ชฉ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€: ์ปค๋„ ์ปจํ…Œ์ด๋„ˆ๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” Factory ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ BeanFactory์ž…๋‹ˆ๋‹ค. BeanFactory๋Š” Inversion ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ๊ตฌ์„ฑ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์–‘ ์ข…์†์„ฑ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

12. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

13. JSF(Java Server Faces)๋ฅผ Spring๊ณผ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ•˜๋‚˜์š”?

๋‹ต๋ณ€: JSF์™€ Spring์€ ํŠนํžˆ Inversion of Control ์„œ๋น„์Šค ์˜์—ญ์—์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. faces-config.xml ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ JSF ๊ด€๋ฆฌ ๋นˆ์„ ์„ ์–ธํ•˜๋ฉด FacesServlet์ด ์‹œ์ž‘ ์‹œ ํ•ด๋‹น ๋นˆ์„ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ JSF ํŽ˜์ด์ง€๋Š” ์ด๋Ÿฌํ•œ ๋นˆ๊ณผ ๋ชจ๋“  ์†์„ฑ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JSF์™€ Spring์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: DelegatingVariableResolver : Spring์—๋Š” JSF์™€ Spring์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” JSF ๋ณ€์ˆ˜ ํ™•์ธ์ž๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. DelegatingVariableResolver๋Š” ๋จผ์ € ๊ธฐ๋ณธ JSF ๊ตฌํ˜„์˜ ๊ธฐ๋ณธ ํ•ด์„๊ธฐ์— ๊ฐ’ ์กฐํšŒ๋ฅผ ์œ„์ž„ํ•œ ๋‹ค์Œ Spring WebApplicationContext์˜ "๋น„์ฆˆ๋‹ˆ์Šค ์ปจํ…์ŠคํŠธ"์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด JSF ๊ด€๋ฆฌ Bean์— ์ข…์†์„ฑ์„ ์‰ฝ๊ฒŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FacesContextUtils : ์‚ฌ์šฉ์ž ์ •์˜ VariableResolver๋Š” faces-config.xml์˜ ๋นˆ์— ํ•ด๋‹น ์†์„ฑ์„ ๋งคํ•‘ํ•  ๋•Œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋นˆ์„ ์บก์ฒ˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ FacesContextUtils ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ServletContext ๋งค๊ฐœ๋ณ€์ˆ˜ ๋Œ€์‹  FacesContext ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด WebApplicationContextUtils์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต๋ณ€: Spring Web MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋Š” ์œ ์—ฐํ•˜๊ณ  ๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ ์•„ํ‚คํ…์ฒ˜์™€ ์‚ฌ์ „ ๊ตฌ์ถ•๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. MVC ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด(์ž…๋ ฅ ๋…ผ๋ฆฌ, ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ ๋ฐ UI ๋…ผ๋ฆฌ)์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋™์‹œ์— ์ด๋Ÿฌํ•œ ์š”์†Œ ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

15. Spring์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋‹ต๋ณ€: ApplicationContext ์—์„œ์˜ ์ฒ˜๋ฆฌ๋Š” ApplicationEvent ํด๋ž˜์Šค์™€ ApplicationListener ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค . ์ฆ‰, Bean์ด ApplicationListener๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ApplicationEvent๊ฐ€ ApplicationContext ์— ๊ฒŒ์‹œ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น Bean์ด ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค. ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ์— ํ–‰์šด์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION