Spring Bean ์ด๋ ๋ฌด์์ผ๊น?
=> ์คํ๋ง IOC ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค.
๊ทธ๋ ๋ค๋ฉด Spring IOC ์ปจํ ์ด๋๋ ๋ฌด์์ผ๊น?
=> ๋น(bean)์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค.
ApplicationContext ์ธํฐํ์ด์ค๊ฐ Spring IOC์ปจํ ์ด๋๋ฅผ ๋ํํ๊ณ
๋น์ ์ธ์คํด์คํํ๊ณ ๊ตฌ์ฑ ๋ฐ ๋ชจ์ผ๋ ์ฑ ์์ด ์๋ค๋ผ๊ณ ๋์ด ์์ต๋๋ค.
์ด์ฒ๋ผ ๋น์ ์ค๋ช ํ๋๋ฐ IOC์ปจํ ์ด๋๊ฐ ์ฐ์ด๊ณ IoC ์ปจํ ์ด๋๋ฅผ ์ค๋ช ํ๋๋ฐ ๋น์ด ์ฐ์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์คํ๋ง์ ์ฌ์ฉํ๋ฉด์ ๋น์ด๋ผ๋ ๋จ์ด๋ฅผ ๊ต์ฅํ ์์ฃผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ๋น์ทํ ๊ฐ๋ ์ ๊ฐ์ง ๋ค์ํ ์ฉ์ด๋ค์ด ํผ์ฉ๋๋ฏ๋ก
๋จ์ด ์์ฒด๊ฐ ๋ชจํธํด์ ธ ์ดํดํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๊ทธ๋์ ์ ์คํ๋ง ๋น์ด ํ์ํ๊ณ , ์คํ๋ง IOC์ปจํ ์ด๋๋ ์ ๋น์ ๊ด๋ฆฌํ๋์ง ์์์ผํฉ๋๋ค.
1. ๋น์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ค์ ํ ๋ ์์กด์ฑ ์๋์ฃผ์ ์ด ์ ํ์ํ์ง ์ดํด๋ณธ๋ค.
2. ์คํ๋ง์์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ์ง ์๋๋ค๋ฉด ์ด๋ค ๋จ์ ์ด ์๋์ง ์ดํด๋ณธ๋ค.
3. ์คํ๋ง IOC์ปจํ ์ด๋๋ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง ์ดํด๋ณธ๋ค.
4. ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ์ค์ ํ ๋ ์ฃผ์ํด์ผ ๋ ์ ์ ์ดํด๋ณธ๋ค.
1. ๋น์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ค์ ํ ๋ ์์กด์ฑ ์๋์ฃผ์ ์ด ์ ํ์ํ์ง ์ดํด๋ณธ๋ค.
๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ์ง ์๊ณ ์์กด์ฑ ์ฃผ์ ์ ๋์ ํ๋ค๋ฉด ์ด๋ค ๋ถํธํ์ ์ด ์์๊น?
์์กด์ฑ์ ์ฃผ์ ํ๋ค๊ณ ํ๋ฉด ์ด๋์์ ๊ฐ newํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผํฉ๋๋ค.
์์์ฝ๋๋ฅผ ๋ณด๋ฉด Service๋ฅผ ์ด๊ธฐํํ๋๋ฐ ์๋น์ค์ ์์ฑ์๋ก DAO ๊ตฌํ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฃ์ด ์ฃผ๊ณ ์๋ค.
๋ง์ฝ DAO ๊ตฌํ์ฒด๊ฐ ๋ฐ๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์๋น์ค๋ฅผ ์์ฑํ๋ ๊ณณ์์๋ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ค. ์๋ํ๋ฉด ์๋น์ค๋ฅผ ์์ฑํ ๋ DAO๋ฅผ ์ด๊ธฐํํจ๊ณผ ๋์์ ์ด๋ค dao์ ๊ตฌํ์ฒด๋ฅผ ์ ํํ ๊ฒ์ธ์ง์ ๋ํ ์ฑ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ์์กด์ฑ์ ์ฃผ์ ํ ๋ ์ฌ๋ฌ๊ฐ์ด ์์กด์ฑ์ด ํ์ํ๋ค๋ฉด ํด๋น ์์กด์ฑ ์ฃผ์ ์์๋ฅผ ์์์ผํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ด๋ฐ ์์ ๊ท๋ชจ๊ฐ ์๋ ํฐ ๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์์กด์ฑ์ด ์์ฒญ ๋์ด๋๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ ์์กด์ฑ์ ์ง์ ์ฃผ์ ํ๊ธฐ ์ํด์ ์์กด๊ด๊ณ๋ฅผ ๋ชจ๋ ํ์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊น๋๋ค.
๋ํ ๋ง์ ๊ฐ์ฒด๊ฐ ์ค๋ณต ์์ฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋์! ์์กด์ฑ ์ฃผ์ ์ด ํ์ํ ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ์ฌ ์คํ๋ง IOC์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์ ์ ๊ด๋ฆฌํ๋๋ก ํด์ผํฉ๋๋ค.
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ์ฐ๋ฆฌ๋ ์ฃผ์ ๋ ์์กด์ฑ์ ์ฌ์ฉํ๋ ๋ถ๋ถ์๋ง ์ง์คํ ์ ์๊ฒ ๋ฉ๋๋ค.
2. ์คํ๋ง์์ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ์ง ์๋๋ค๋ฉด ์ด๋ค ๋จ์ ์ด ์๋์ง ์ดํด๋ณธ๋ค.
๋น์ ์ฑ๊ธํด์ด๋ค ๋ผ๋ ๋ง์ ๋ง์ด ๋ค์๋ค.
๋ง์ฝ ์คํ๋ง์ด ์๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์ด๋ค ๋ฌธ์ ์ ์ด ์๊ธธ๊น?
๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ๋ง๋ ๋ค๋๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด์ ์ฑ๊ธํค ํจํด์ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ฑ๊ธํค ํจํด์๋ ๋จ์ ์ด ์์ต๋๋ค.
์ฒซ๋ฒ์งธ๋ก ๋คํ์ฑ์ ์ด์ฉํ์ง ๋ชปํ๋ค. ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๋ฉด ์์ฑ์์ ์ ๊ทผ์ง์ ์๋ฅผ private๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ํด๋น ๊ฐ์ฒด๋ ์์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ฒด์งํฅ ์ด์ ์ธ ๋คํ์ฑ์ ์ ์ฉํ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ๋ก ์์ ์ฑ์ด ์ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์์ ํ์์ ์ธ ๋จ์ํ ์คํธ๊ฐ ์ด๋ ต์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค ํจํด์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ฒด๋ ๊ณต์ ๊ฐ์ฒด๊ฐ ๋๋ฏ๋ก ๋จ์ํ ์คํธ๋ฅผ ์คํํ ๋ ํ ์คํธ์ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค.
์ง๊ธ๊น์ง ์ฑ๊ธํค ํจํด์ ๋จ์ ์ ๋ํด ์์๋ณด์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์คํ๋ง์ด ์ด ๋จ์ ๋ค์ ์ด๋ป๊ฒ ํด๊ฒฐํ๊ฑด์ง ์์๋ณด์
IOC ์ปจํ ์ด๋๊ฐ ๋น์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ ๊ณผ์ ์ ์์๋ณด๋ฉฐ ์ด ๋จ์ ๋ค์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋ ๊ฒ์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ์คํ๋งIOC ์ปจํ ์ด๋๊ฐ ์์ฑ๋๋ฉด ๋น ์ค์ฝํ๊ฐ ์ฑ๊ธํค์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๋น์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํด์ ์ ํฌ๋ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ํน์ java ์ค์ ํด๋์ค ๊ธฐ๋ฐ ํน์ XML๊ธฐ๋ฐ์ ๋ค์ํ Configuration ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ํต์ผ๋ Bean Definition์ ์์ฑํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์ผ๋ก ๋ฑ๋กํ POJO์ Bean Defenition ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋น์ ์์ฑํฉ๋๋ค.
์ด ๊ณผ์ ์์ ์ฑ๊ธํคํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ํ๋ฒํ ์๋ฐํด๋ซ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
IOC์ปจํ ์ด๋๋ ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ๋ผ๋ ๊ธฐ๋ฅ๋ ๊ฐ์ง๊ณ ์๋๋ฐ์
๋ ์ง์คํธ๋ฆฌ๋ ์คํ๋ง๋ฟ๋ง ์๋๋ผ cs์์ ์ ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ ๊ฐ๋ ์ผ๋ก key์ value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์คํ๋ง IOC์ปจํ ์ด๋๋ ๋น ์ค์ฝํ๊ฐ ์ฑ๊ธํค์ธ ๊ฐ์ฒด์ ๋น์ ์ด๋ฆ์ key๋ก ๊ฐ์ฒด๋ฅผ value๋ก ์ ์ฅํฉ๋๋ค.
๊ทธ๋์ ์์กด์ฑ์ด ์ฃผ์ ๋์ด์ผ ํ๋ ๊ฐ์ฒด๊ฐ ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์์๋ ์คํ๋ง์ ๋น์ ์ด๋ฆ์ ์ด์ฉํ์ฌ ํญ์ ๋์ผํ single object ๋ฅผ ๋ฐํํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ๋น ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๋ฉด IOC์ปจํ ์ด๋๋ ์์กด ์ค์ ์ ํฉ๋๋ค.
์ด๋ ์์กด์ฑ ์๋ ์ฃผ์ ์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ๋ ๊ณผ์ ์ ์งํํฉ๋๋ค.
๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ค ํ์ํ๊ฒ์ ์๋์ง๋ง ์ปค๋ฅ์ ํ์ฒ๋ผ ์ฌ์ฉ์ ์ ์ด๊ธฐํ ๊ณผ์ ์ด ํ์ํ ๊ฐ์ฒด๋ค์ ์ด๊ธฐํ ๊ณผ์ ์ ์งํํฉ๋๋ค.
์ด๊ธฐํ๊ฐ ๋๋๋ฉด ๋๋์ด ๋น์ ์ฌ์ฉํ ์ ์๊ฒ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋ ๋น ์ค์ฝํ๊ฐ ์ฑ๊ธํค์ธ ๊ฐ์ฒด๋ค๋ ํจ๊ป ์๋ฉธ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํธ๋ฆฌํ ๋น์ด์ง๋ง ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ์ค์ ํ๊ธฐ ์ํด์ ์ฃผ์ํด์ผ ๋ ์ ์ด ์์ต๋๋ค.
ex ์ฑ๊ธํค ์ค์ฝํ์ ๋น์ด value ๋ผ๋ ์ํ๋ฅผ ๊ฐ์ง๋
Thread1์ value์ด ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Thread2 ๋ value๋ผ๋ ๊ฐ์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ฉด Thread2๋ ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ํ๋ฉด ํด๋น ๋น์ ์ํ๋ฅผ ํญ์ ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ํฌ๊ฐ ์๋ํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ์๊ฐ ์๋ ๊ฒ ์ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋น ์ค์ฝํ๋ฅผ ์ฑ๊ธํค์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ ์ํ๋ฅผ ๊ฐ์ง๋ฉด ์๋ฉ๋๋ค.
ํ์ง๋ง ์ํ๋ฅผ ๊ฐ์ง ์ ์๋ ๋น๋ ์๋ค.
๋น์ ์์ฑ๋๊ณ ์กด์ฌํ๊ณ ์ ์ฉ๋๋ ๋ฒ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋น ์ค์ฝํ๋ผ๊ณ ํฉ๋๋ค.
๋น์ ์ ์ฉํ๋ ๊ฐ์ฒด์ @Scope ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ค์ ํ ์ ์์ต๋๋ค.
์คํ๋ง ๋น์ด ์ ํ์ํ ๊น
=> ์คํ๋ง IOC์ปจํ ์ด๋๊ฐ ํน์ ๊ฐ์ฒด์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด์ ํ์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์คํ๋ง IOC์ปจํ ์ด๋๋ ์ ๋น์ ๊ด๋ฆฌํ ๊น?
=> ์์กด์ฑ์ ์๋ ์ฃผ์ ํด ๊ฐ๋ฐ์๋ค์ด ํด๋น ์์กด์ฑ์ ์ฌ์ฉํ๋ ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋์์ค๋๋ค.
๋ํ ์์กด์ฑ ์ฃผ์ ํ ๋ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๊ฐ ํญ์ ๋์ผํจ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์ฐธ๊ณ :https://www.youtube.com/watch?v=3gURJvJw_T4
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ธ์ฆ๋ฒํธ ๋ฐ์ก ์: ์ ํจ ์๊ฐ ์ค์ (session ์ฌ์ฉ) (1) | 2024.02.25 |
---|---|
JDBC,SQLMAPPER ์ ๋ฆฌ (0) | 2022.10.22 |
spring MVC(๋ชจ๋ธ2, DispatcherServlet) ์ ๋ฆฌ (3) | 2022.10.20 |
Spring(์คํ๋ง) : API (2) | 2022.09.24 |
Spring ์ค์น (1) | 2022.04.01 |