Java(JVM)์์ ๊ฐ๋น์ง ์์ง์ด ์๋ํ๋ ๋ฐฉ์
์ถ์ฒ:
๋์กด
Java์ ๊ฐ๋น์ง ์์ง ํ๋ก์ธ์ค
Java
๊ฐ๋น์ง ์์ง์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํ๋ฏ๋ก ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ณ๋์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ Java ํ๋ก๊ทธ๋๋ฐ์ ์ฃผ์ ์ด์ ์ค ํ๋์
๋๋ค. Java ํ๋ก๊ทธ๋จ์ด JVM์์ ์คํ๋ ๋๋ง๋ค ๊ฐ์ฒด๊ฐ ํ์ ์์ฑ๋๊ณ ํ๋ก๊ทธ๋จ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ๋ฅผ ๋ํ๋
๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ผ๋ถ ํญ๋ชฉ์ ๋ ์ด์ ํ์ํ์ง ์๊ฒ ๋ฉ๋๋ค. ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ด๋ฌํ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํฉ๋๋ค.
๊ฐ๋น์ง ์์ง๊ธฐ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ํ๊ฐํ ํ ์ฌ์ฉ ์ค์ธ ๊ฐ์ฒด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ํ์ธํ๊ณ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ฌ์ฉ๋๊ฑฐ๋ ์ฐธ์กฐ๋ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๊ฐ ์ฌ์ ํ ํด๋น ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ ์งํ๊ณ ์์์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ ์ด๋ค ๋ถ๋ถ์์๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๋น์ง ์์ง์ ์ํํ์ฌ ํด์ ํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํด์ ๋ ์ธ ๊ฐ์ง ์ฃผ์ ํ๋ก์ธ์ค๋ก ์ค๋ช
ํ ์ ์์ต๋๋ค.
- ๋งํน.
- ์ ์์ ์ธ ์ ๊ฑฐ.
- ์์ถ์ผ๋ก ์ ๊ฑฐ.
ํ์๋ ๊ฐ๋น์ง ์์ง๊ธฐ์์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ถ๊ณผ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ถ์ ์๋ณํ๋ ํ๋ก์ธ์ค์
๋๋ค. ๋ผ๋ฒจ๋ง์ ์ผ๋ฐ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ๋จ๊ณ์
๋๋ค.
์ผ๋ฐ์ ์ธ ์ญ์ ๋ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๊ณ ์ฐธ์กฐ๋ ๊ฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ์ฌ์ ๊ณต๊ฐ์ ๋จ๊ฒจ ๋๋ ํ๋ก์ธ์ค์
๋๋ค.
์์ถ ์ญ์ - ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ ๊ฒ ์ธ์๋ ์ฐธ์กฐ๋ ๋๋จธ์ง ๊ฐ์ฒด๋ฅผ ์์ถํ์ฌ ๊ฐ์ฒด๋ฅผ ํจ๊ป ์ด๋ํ์ฌ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํจ์ฌ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ญ๋๋ค.
JVM ํ ๋ฉ๋ชจ๋ฆฌ
์ ์ ์ธ๋
์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ 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 ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์์งํ ๋ ๋ฐ์ํฉ๋๋ค.
์๊ตฌ ์ธ๋
ํด๋์ค ๋ฐ ๋ฉ์๋์ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ ์๊ตฌ ์์ฑ์ ์ ์ฅ๋ฉ๋๋ค. ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ํด๋์ค๋ ๊ฐ๋น์ง ์์ง๊ธฐ๋ฅผ ํตํด ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ ์ฒด ๊ฐ๋น์ง ์์ง ์ค์ ๋ชจ๋ ์ธ๋์์ ์ฌ์ฉ๋์ง ์์ ๊ฐ์ฒด๊ฐ ์์ง๋ฉ๋๋ค.
๊ฐ๋น์ง ์์ง ์ ํ
ํ ๋ด์ ๋ค์ํ ๋ถ๋ถ์ ์ ๋ฆฌํ๋ ๊ฐ๋น์ง ์์ง์ ์ข
์ข
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๋
๊ธฐ์ ๋ฉด์ ์ ์ค๋นํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
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์ด ๋ฑ๋ก๋ฉ๋๋ค. ์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๊ธฐ์ ์ธํฐ๋ทฐ์ ํ์ด์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
GO TO FULL VERSION