1. ์คํ๋ง(Spring)์ด๋?
์ํฐํ๋ผ์ด์ฆ์ฉ Java์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํธํ๊ฒ ํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ์์ค ๊ฒฝ๋๊ธ ์ดํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ
(1) Java์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํธํ๊ฒ ํ ์ ์๊ฒ ํด์ฃผ๋
- ๊ธฐ์
์์ ์ด์ํ๋ ์น ์๋น์ค์๋ ๋น์ฆ๋์ค ๋ก์ง์ด๋ผ๋ ๊ฒ์ด ์์
- ๋น์ฆ๋์ค ๋ก์ง์ด๋, ๊ธฐ์
์ด ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ฝ๋๋ก ๊ตฌํํ ๊ฒ์ผ๋ก ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ค์ง์ ์ธ ์ฝ๋๋ค์ ์๋ฏธํจ
- ์คํ๋ง์ด ๋ฑ์ฅํ๊ธฐ ์ ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๊ธฐ์ํ ๊ธฐ์ ์์ฒด์ ๋ํ ๊ณต๋ถ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ํด์ผ๋ง ํ์ (๋น์ฆ๋์ค ๋ก์ง ๊ธฐ์ ์ด ๋ณต์กํ๊ณ ์ด๋ ค์)
- ์คํ๋ง์ ์ด์ ๊ธฐ์ ์ ๋นํด ์ฌ์ฉ๋ฐฉ๋ฒ์ด ์๋์ ์ผ๋ก ๋ ๋ณต์กํจ
- ๊ฐ๋ฐ ์ด๊ธฐ์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๊ณผ ์ ์ฉ์ํฌ ๊ธฐ์ ๋ง ์ ์ ํํ๋ค๋ฉด ๊ธฐ์ ๋ณด๋ค๋ ์ดํ๋ฆฌ์ผ์ด์
๋ก์ง ์์ฒด์ ๋ ์ง์คํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์๊ฒ ๋จ /์
(2) ์คํ์์ค
- ์คํ๋ง์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฌด๋ฃ๋ก ์ด๋ ค ์์
- ์ฆ, ์ด๋ค ๊ธฐ์
๋ ์คํ๋ง์ ์ฌ์ฉํ์ฌ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ ์๊ณ ํ์ํ๋ค๋ฉด ์คํ๋ง์ ์ฝ๋๋ฅผ ์ผ๋ถ ์์ ํ์ฌ ์ฌ์ฉํ ์๋ ์์
- ์คํ์์ค ํ๋ ์์ํฌ์ด์ง๋ง, ์์ ์ ์ธ ๊ฐ๋ฐ๊ณผ ๊ฐ์ ์ด ๋ณด์ฅ๋จ
(3) ๊ฒฝ๋๊ธ
- ์คํ๋ง์ ์์ญ๊ฐ์ ์ธ๋ถ ๋ชจ๋๊ณผ ์์ญ๋ง์ค์ ๋ฐฉ๋ํ ์ฝ๋๋ก ์ด๋ฃจ์ด์ง ํ๋ ์์ํฌ โฉ ์ ๊ฒฝ๋๊ธ์ด๋ผ๋ ๊ฒ์ผ๊น?
- ์คํ๋ง์ ์ ์ํ๋ ๋ฐ ์์ด ๊ฒฝ๋๊ธ์ด๋ผ๋ ๊ฒ์ ๊ธฐ์กด์ ์คํ๋ง ๋์ ์ฌ์ฉํ๋ ๊ธฐ์ ๊ณผ ๋น๊ตํ์ฌ, ์คํ๋ง์ ์ฌ์ฉํ์ ๋์ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผํ ์ฝ๋๊ฐ ์๋์ ์ผ๋ก ๋จ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํจ
(4) ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ
- ์ดํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๊ธฐ ์ํด์๋ ํ๋ ์์ํฌ์ ๋ํด ๋จผ์ ์์์ผ ํจ
ํ๋ ์์ํฌ
-
์๋์ฐจ๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
-
์ฒ์๋ถํฐ ๋๊น์ง ์๋์ฐจ๋ฅผ ์์ ๋ง๋๋ ๊ฒ๋ณด๋ค ์๋์ฐจ ์ฐจ์ฒด๋ง ๋ง๋๋ ํ์ฌ์์ ๋ถํ์ ์ฌ์์ ๋ถ์ด๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ ๊ฒ์
-
์ฆ, ์๋์ฐจ ํ์ฌ์์ ๋ฏธ๋ฆฌ ์๋์ฐจ์ ์ฐจ์ฒด๋ฅผ ๋ง๋ค์ด ๋๊ณ , ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋จ
-
์ฌ๊ธฐ์ ์๋์ฐจ ์ฐจ์ฒด์ ํด๋นํ๋ ๊ฒ์ด ํ๋ ์์ํฌ์
-
์น ๊ฐ๋ฐ์ ์์ด ํ๋ ์์ํฌ๋, ์ด๋ ํ ๋ชฉ์ ์ ์ฝ๊ฒ ๋ฌ์ฑํ ์ ์๋๋ก ํด๋น ๋ชฉ์ ๊ณผ ๊ด๋ จ๋ ์ฝ๋์ ๋ผ๋๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ ๊ฒ์ ์๋ฏธํจ
์ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ
-
์ผ๋ฐ์ ์ผ๋ก ํ๋ ์์ํฌ๋ ํน์ ์
๋ฌด ๋ถ์ผ ํน์ ํ๋์ ๊ธฐ์ ์ ์ง์คํ๋ค.
-
์ฆ, ์ด๋ ํ ํนํ๋ ๋ชฉ์ ์ ํธ๋ฆฌํ ๊ฒ ๋ฌ์ฑํ ์ ์๊ฒ ํ๊ธฐ์ํด ๋ง๋ค์ด์ง
-
๋ฐ๋ฉด, ์ดํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ๋ ํน์ ์
๋ฌด ๋ถ์ผ ํน์ ํน์ ๊ธฐ์ ์ด ์๋๋ผ, ๊ฐ๋ฐ์ ํ์ํ ๋ชจ๋ ๊ณผ์ ์ ์ง์ค
-
๋ค์๋งํด, ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ ๋ฐ์ ์์ด ํ์ํ ๋ชจ๋ ์
๋ฌด๋ถ์ผ ๋ฐ ๊ธฐ์ ๊ณผ ๊ด๋ จ๋ ๋ผ๋๋ฅผ ์ ๊ณตํจ
2. ์คํ๋ง์ ํน์ง
(1) POGO ํ๋ก๊ทธ๋๋ฐ์ ์งํฅ
- ์คํ๋ง์ ๊ฐ์ฅ ํฐ ํน์ง์
- POJO๋ Plain Old Java Object. ์ฆ, ์์ Java๋ง์ ํตํด์ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์๋ฏธ
- ์์ Java๋ง์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ Java ๋ฐ Java์ ์คํ์ ์ ์๋ ๊ธฐ์ ๋ง ์ฌ์ฉํ๋ค๋ ์๋ฏธ
- ์ฆ, ์ด๋ค ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธ๋ถ์ ๋ชจ๋์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๊ทธ ๊ฐ์ฒด๋ POJO๋ผ๊ณ ํ ์ ์์
- POJO๋ ๋ง ๊ทธ๋๋ก, ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํ์ง ์์ ์์ํ Java๋ง์ ์ฌ์ฉํ์ฌ ๋ง๋ ๊ฐ์ฒด
POGO์ ์ฅ์
-
๋ง์ฝ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ์ฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ํ์. (POGO๊ฐ ์๋ ๊ฒฝ์ฐ)
-
์ด๋, ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ธฐ์ ์ด Deprecated(๋์ด์ ์ฌ์ฉํ์ง ์์)๋๊ฑฐ๋ ์ ๊ธฐ์ ์ด ๋ฑ์ฅํ๋ฉด ํด๋น ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ์ฝ๋๋ฅผ ๋ชจ๋ ๋ฐ๊ฟ์ฃผ์ด์ผ ํจ
-
๋ฐ๋ฉด, POGO๋ ์์ Java๋ง์ ์ฌ์ฉํ์ฌ ๋ง๋ ๊ฐ์ฒด์ด๋ฏ๋ก ํน์ ๊ธฐ์ ์ด๋ ํ๊ฒฝ์ ์ข
์๋์ง ์์
-
๋ฐ๋ผ์, ์ธ๋ถ ๊ธฐ์ ์ด๋ ๊ท์ฝ์ ๋ณํ์ ์ฝ๋ฉ์ด์ง ์์ ์ ์ฐํ๊ฒ ๋ณํ์ ํ์ฅ์ ๋์ฒํ ์ ์์
-
POJO๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ฉด, ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ ํ์์ด ์ ์ฉํ ์ ์์ผ๋ฉฐ, ์ฝ๋๊ฐ ๋จ์ํด์ ํ
์คํธ์ ๋๋ฒ๊น
๋ํ ์ฌ์์ง๋ค.
๐์ด์ฒ๋ผ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ๋ฐ์ POGO๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ POGO ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋ค.
3. Spring์ด ์ง์ํ๋ ๊ธฐ์
๐Spring์ด POJO ํ๋ก๊ทธ๋๋ฐ์ ์ํด ์ง์ํ๋ ๊ธฐ์ IoC/DI, AOP, PSA์ ๋ํด ์ดํด๋ณด์.
- ์คํ๋ง์ IoC/DI(์ ์ด์ ์ญ์ /์์กด์ฑ์ฃผ์
), AOP(๊ด์ ์งํฅํ๋ก๊ทธ๋๋ฐ)์ ํตํด ๋์จํ ๊ฒฐํฉ์ ๋ฌ์ฑํ ์ ์์
- ๋์จํ ๊ฒฐํฉ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ ๊ฐ๋ฅํ๊ฒ ํจ
(1) IoC (์ ์ด์ ์ญ์ )
- Java๋ ๊ฐ์ฒด์งํฅ์ธ์ด์ด๋ฏ๋ก ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ ํ ๋งบ์ด์ฃผ๋ ๊ฒ์ด ์ค์ํจ
๐ฃ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์์ ์ ์ด๊ถ
๐ฃ ์คํ๋ง์์ ์ ์ด๊ถ
(2) DI (์์กด์ฑ ์ฃผ์
)
- IoC์์ ๋ฏธ๋ฆฌ ์์ฑํด๋์ ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ํ์
- ์ฝ๋๋ฅผ ๋ค์ ํ์ธํ์.
- ์ฌ๊ธฐ์ Bํด๋์ค๊ฐ ๋ณ๊ฒฝ์ด ๋๋ค๊ณ ํ๋ฉด Aํด๋์ค์๋ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋๋ฐ ์ด๋ฅผ ์์กด์ฑ์ด๋ผ๊ณ ํจ
๐ฃ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์์ ์์กด์ฑ ์ฃผ์
๐ฃ ์คํ๋ง์์ ์์กด์ฑ์ฃผ์
- DI(Dependency Injection)๋ ์คํ๋ง์ด ๋ค๋ฅธ ํ๋ ์์ํฌ์ ์ฐจ๋ณํ๋์ด ์ ๊ณตํ๋ ์์กด ๊ด๊ณ ์ฃผ์
๊ธฐ๋ฅ์ผ๋ก, **๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ ์๋๋ผ ์ธ๋ถ์์ ์์ฑํ ํ ์ฃผ์
์์ผ์ฃผ๋ ๋ฐฉ์**
- ์ฌ๊ธฐ์ ์ธ๋ถ๋ IoC Container๋ฅผ ์๋ฏธ
๐ฃ IoC Container
- ๊ฐ์ฒดA๋ ๋ก์ง์ด ํ์ฉํ๋ ํ B, C๋ฅผ ๋ง์๋๋ก ๊ฐ์๋ผ์ธ ์ ์์
- ์ฆ, ์์กด๋์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํจ
- ์คํ๋ง์์๋ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ ํจ
- ํ๋ก์ ํธ๊ฐ ์คํ๋ ๋ ์ฌ์ฉ์๊ฐ ์๋ฉธ์ ๊ด๋ จ๋ ์์
์ ์๋์ ์ผ๋ก ์ํํด์ฃผ๋๋ฐ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ณณ์ ์คํ๋ง์์ Bean์ปจํ
์ด๋๋ผ๊ณ ํจ
(3) AOP (๊ด์ฌ์งํฅ ํ๋ก๊ทธ๋๋ฐ)
- ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ๊ตฌํํด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ํฌ๊ฒ ๊ณตํต๊ด์ฌ์ฌํญ๊ณผ ํต์ฌ๊ด์ฌ์ฌํญ์ผ๋ก ๋ถ๋ฅ ํ ์ ์๋ค.
- ํต์ฌ ๊ด์ฌ์ฌํญ์ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ์ฌํญ๋ค์ ์๋ฏธ
- ๊ณตํต๊ด์ฌ์ฌํญ์ ๋ชจ๋ ํต์ฌ ๊ด์ฌ ์ฌํญ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ด์ฌํญ๋ค์ ์๋ฏธ
- ํต์ฌ๊ด์ฌ์ฌํญ๋ค์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ด ์์ผ๋ฉด ๊ณตํต๊ด์ฌ์ฌํญ์ด ์ค๋ณต ๋ ์ ์์
- ๋ง์ฝ ๊ณตํต๊ด์ฌ์ ์ํํ๋ ๋ก์ง์ด ๋ณ๊ฒฝ๋๋ฉด ๋ชจ๋ ์ค๋ณต์ฝ๋๋ฅผ ์ฐพ์์ ์์ ํด์ฃผ์ด์ผ ํจ
- ๋ฐ๋ผ์ ๊ณตํต ๊ด์ฌ ์ฌํญ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ค์ ๋ณ๋์ ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํด๋ธ ๋ค์, ๋ถ๋ฆฌํด๋ธ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํตํด ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๊ตฌํํ ์ฝ๋๋ฅผ ์คํ์ํฌ ์ ์๋๋ก ํด์ผ ํจ
- ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ ๊ฑธ์ณ ์ ์ฉ๋๋ ๊ณตํต ๊ธฐ๋ฅ์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํด๋ด๋ ๊ฒ์ AOP(Aspect Oriented Programming, ๊ด์ฌ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)๋ผ๊ณ ํจ
(4) PSA (์ผ๊ด๋ ์๋น์ค ์ถ์ํ)
- PSA ( Portable Service Abstranction, ์ผ๊ด๋ ์๋น์ค ์ถ์ํ)
- ์คํ๋ง์ Java ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์์ด ํต์ฌ์ ์ธ ์ญํ ์ ์ํํ๋ ํ๋ ์์ํฌ
- ๋ํ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ์ ์๋ ์ฌ์ด
- ์น ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํตํ๋ฉฐ ์น ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข
๋ฅ๋ MySQL, Oracle, Maria DB, Mongo DB ๋ฑ ๋ค์ํจ
- ๋ง์ฝ MySQL์ ์ฌ์ฉํ๋ค๊ฐ Maria DB๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ค๋ฉด ์์ฑํ ์ฝ๋๋ฅผ ์๋ก ์์ฑํด์ผ ํจ
- ๊ทธ๋ฌ๋, ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๋์ผํ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ ์งํ ์ฑ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ๊ฟ ์ ์์
- ์คํ๋ง์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ฅผ ์ถ์ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅ
- ์ฆ, ์คํ๋ง์ Java๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๊ท์ ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ JDBC(Java DataBase Connectivity)๋ผ๊ณ ํจ.
- ์ด๋ฌํ JDBC์ฒ๋ผ ํน์ ๊ธฐ์ ๊ณผ ๊ด๋ จ๋ ์๋น์ค๋ฅผ ์ถ์ํํ์ฌ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํจ ๊ฒ์ PSA(์ผ๊ด๋ ์๋น์ค์ ์ถ์ํ)๋ผ๊ณ ํจ
๐ Reference
CODEBLOG, https://www.codestates.com/blog/content/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8 ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ ๊ธ์
๋๋ค.