๐ฏ Framework? ๋ฌด์์ธ๊ฐ์?
๐ก ํ๋ ์์ํฌ๋?
ํ๋ ์์ํฌ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ ์์ฉ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ ํ์คํ๋ ๊ตฌ์กฐ์
๋๋ค.
๐ ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ์ฝ๋์ ๊ธฐ๋ณธ ๋ผ๋๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๐ ํ๋ ์์ํฌ์ ๊ตฌ์ฑ ์์
- ํด๋์ค(Class)์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Library)์ ๋ชจ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
๐ก ๊ฐ๋ฐ์๋ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋์ค๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ ์์ด ์ค๋ณต ์์
์ ์ต์ํํ๊ณ ์์ฐ์ฑ์ ๋์
๋๋ค.
๐จ GUI ์ง์์ ํธ๋ฆฌํจ
ํ๋ ์์ํฌ๋ ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI) ๊ตฌํ์ ๋จ์ํ๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฒํผ, ์
๋ ฅ์ฐฝ, ๋ฉ๋ด ๊ฐ์ GUI ์์๋ค์ ์๋ ์์ฑํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ๋ฏธ๋ฆฌ ์ ์๋ ํ์คํ๋ GUI ํด์ ํ์ฉํด ์ผ๊ด์ฑ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๐งฑ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ํ๋ ์์ํฌ์ ๊ด๊ณ
- ๋๋ถ๋ถ์ ํ๋ ์์ํฌ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋ฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ธฐ์กด ํด๋์ค๋ค์ ์์ํ์ฌ ์ํ๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ต๋๋ค.
โจ ๋๋ถ์ ์ฝ๋์ ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ๊ทน๋ํ๋ฉ๋๋ค.
โก ๊ฐ๋ฐ์ ํธ์์ฑ๊ณผ ์๋ํ
- ๋ฐ๋ณต ์์
์ ์ค์ด๊ณ , ์๋ํ๋ ๋๊ตฌ๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
- ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๐ฑ Spring Framework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
1๏ธโฃ Spring Framework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (1/5)
- EJB๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์์ฑ์ด ์ฉ์ดํด์ก์ต๋๋ค.
- ํธ๋์ญ์
๊ด๋ฆฌ, ๋ฉํฐ ์ฐ๋ ๋ฉ, ๋ฆฌ์์ค ํ๋ง ๊ฐ์ ๋ณต์กํ ์์
๋ ์ฝ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅํ์ฃ .
- Low-Level API๋ฅผ ๋ชฐ๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ด ๊ฐ๋ฅํ์ต๋๋ค.
๐ ๊ทธ๋ฌ๋: ์ ์ฐจ EJB์ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ํจ์จ์ฑ์ด ๋จ์ด์ก์ต๋๋ค.
2๏ธโฃ Spring Framework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (2/5)
- EJB์ ๋จ์
- ์ฝ๋ ์์ ๋ฐ์์ด ๋๋ฆผ: ๊ธฐ๋ฅ์ ๊ฐ๋ ฅํ์ง๋ง ๊ฐ๋ฐ ํจ์จ์ฑ์ด ๋จ์ด์ก์ต๋๋ค.
- ํ
์คํธ๋ฅผ ์ํด EJB ์๋ฒ๊ฐ ํ์๋ผ ํ๊ฒฝ ๊ตฌ์ถ์ด ๋ฒ๊ฑฐ๋ก์ ์ต๋๋ค.
3๏ธโฃ Spring Framework ๋ฑ์ฅ ๋ฐฐ๊ฒฝ (3/5)
- ์น์ฌ์ดํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์๊ตฌ๊ฐ ๋์ด๋ฌ์ต๋๋ค.
- ํธ๋์ญ์
๊ด๋ฆฌ, ์ธ์
์ฒ๋ฆฌ, ๋ณด์ ๊ฐ์ ์๋น์ค๊ฐ ํ์ํด์ก์ต๋๋ค.
- ๊ทธ๋ฌ๋ EJB7์ ๋ฌด๊ฑฐ์ด ๊ตฌ์กฐ๊ฐ ๋ฌธ์ ์์ต๋๋ค.
- ๋ฐฐํฌ ๊ณผ์ ์ด ๋ณต์กํ๊ณ ์ค์ ํ ํญ๋ชฉ์ด ๋ง์ ๊ฐ๋ฐ ์๋๊ฐ ๋๋ ค์ก์ต๋๋ค.
- RMI ๊ธฐ๋ฐ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํด ๋ฌด๊ฒ๊ณ ์ค์ ์ด ์ด๋ ค์ ์ต๋๋ค.
๐ ๋์: Rod Johnson์ EJB ์์ด ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ฉฐ Spring Framework๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
- AOP, DI๋ฅผ ํตํด ๋ชจ๋ํ์ ์ฝ๋ ์ฌ์ฌ์ฉ ๊ทน๋ํ
- POJO ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ ๋์
4๏ธโฃ POJO์ ๊ฒฝ๋ ํ๋ ์์ํฌ (4/5)
-
POJO (Plain Old Java Object)
- Plain: ํน์ ํ๋ ์์ํฌ๋ component interface์ ์์กดํ์ง ์์
- Old: EJB ์ด์ ์ Java ํด๋์ค๋ฅผ ์๋ฏธ
-
POJO ๋๋ถ์ ์ฝ๋๊ฐ ๋จ์ํ๊ณ ๋
๋ฆฝ์ ์ด์ด์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ก์ต๋๋ค.
-
๊ฒฝ๋ ํ๋ ์์ํฌ์ ๋ฑ์ฅ
- EJB์ ์ ์ฌํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ฉด์๋ ๋ ๊ฐ๋ฒผ์ด ํ๋ ์์ํฌ:
- Hibernate, JDO, MyBatis, Spring
5๏ธโฃ Spring Framework์ ๊ฐ์ (5/5)
- POJO + Framework ์กฐํฉ์ ๊ฐ์
- EJB ์๋ฒ์ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์ปจํ
์ด๋๊ฐ ํ์ ์์
- ์คํ์์ค ํ๋ ์์ํฌ๋ก ๋ฌด๋ฃ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ผ๋ก ๊ฐ๋ฐ ์๋ ํฅ์
- ์น๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ
๐ Spring Framework: JEE๋ฅผ ๋์ด์ ๊ฒฝ๋ํ๋ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ํด๋ฒ
๐ฑ Spring Framework๋?
1๏ธโฃ JEE(Java Enterprise Edition)์์ ๊ด๊ณ
- JEE๋ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๊ทธ๋ฌ๋ ๋ณต์กํ ์ค์ ๊ณผ ์ฌ์ฉ์์ ๋ถํธํจ์ด ์์ด, Spring Framework๊ฐ ๋์์ผ๋ก ๋ ์ฌ๋์ต๋๋ค.
Spring์ ์ฃผ์ ํน์ง:
- DI (Dependency Injection): ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๋ฅผ ์ค์ฌ ์ ์ฐ์ฑ์ ๋์
- AOP (Aspect-Oriented Programming): ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์๋ฅผ ํฅ์
๐ก ํต์ฌ: Spring์ JEE์ ๋ณต์ก์ฑ์ ๊ทน๋ณตํ๋ฉฐ ํจ์จ์ ์ด๊ณ ๊ฐ๋จํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
2๏ธโฃ Spring์ ์ญํ : ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์ธํ๋ผ ์ ๊ณต
- Spring์ ๊ฐ๋ฐ์์๊ฒ ํฌ๊ด์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค์ (Configuration) ๋ชจ๋ธ์ ์ ๊ณตํ๋ฉด์๋ Application ์์ค์ ์ธํ๋ผ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Low-Level API์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ์ ์ง์คํ ์ ์๋๋ก ๋์ต๋๋ค.
โจ ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ์ ์ ๋
ํ๊ฒ ํด์ฃผ๋ ๊ตฌ์กฐ๊ฐ Spring์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์
๋๋ค.
3๏ธโฃ ์ํฐํ๋ผ์ด์ฆ ์์คํ
์์์ ํ์ฉ
Spring์ ๊ธฐ์
์ ์
๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฑ์๋ ์๋ฒ์์ ํญ๋๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
- ํธ๋์ญ์
๊ด๋ฆฌ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ณด์๊ณผ ๊ฐ์ ๋ณต์กํ ๊ธฐ๋ฅ์ ์์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
โ๏ธ ์ํฐํ๋ผ์ด์ฆ ์์คํ
์ด๋?
๊ธฐ์
์ ๋ค์ํ ์
๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์๋ฒ์์ ๋์ํ๋ ์ํํธ์จ์ด ์ธํ๋ผ๋ฅผ ์๋ฏธํฉ๋๋ค.
4๏ธโฃ Spring์ด ํด๊ฒฐํ๋ ๋ฌธ์
- Low-Level ์์
์ ๊ฐ์ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ฒ ํด์ค๋๋ค.
- ๋ค์ํ ๊ธฐ์ ์คํ๊ณผ ์ฐ๋๋์ด ํญ๋์ ํ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ Spring Framework์ ๊ตฌ์กฐ: ๊ฒฝ๋ํ๋ ๊ฐ๋ฐ ์ฒ ํ์ ํต์ฌ
1๏ธโฃ Spring ์ผ๊ฐํ ๊ตฌ์กฐ
Spring Framework๋ Enterprise Application ๊ฐ๋ฐ ์ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด 4๊ฐ์ง ์ฃผ์ ๊ฐ๋
์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- POJO (Plain Old Java Object)
- PSA (Portable Service Abstraction)
- IoC/DI (Inversion of Control / Dependency Injection)
- AOP (Aspect-Oriented Programming)
๐ฑ 1. POJO (Plain Old Java Object)
POJO๋ ๊ธฐ์ ์ด๋ ํน์ ํ๊ฒฝ์ ์ข
์๋์ง ์์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๊ฐ์ฒด ์งํฅ ์์น์ ์ถฉ์คํ ๋ฐ๋ฅด๋ฉฐ, ๋จ์ํ Java ํด๋์ค ํํ๋ก ๊ตฌํ๋ฉ๋๋ค.
- Spring์์๋ POJO๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ธฐ์ ์คํ์ ๋ถ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
POJO์ ํน์ง
- ์ ์ฐํ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ์ฌ, ์์ ๋กญ๊ฒ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
- ํ
์คํธํ๊ธฐ ์ฉ์ดํ๋ฉฐ, ๋จ์ํ ๊ตฌ์กฐ๋ก ์ ์ง๋ณด์๊ฐ ์์ํฉ๋๋ค.
๐ก ํต์ฌ: Spring์ POJO๋ฅผ ํ์ฉํ์ฌ ๊ธฐ์กด ๋ฌด๊ฑฐ์ด ์ํฐํ๋ผ์ด์ฆ ๊ตฌ์กฐ์ ์์กด์ฑ์ ์์ ๊ณ ๊ฒฝ๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
โ๏ธ 2. PSA (Portable Service Abstraction)
PSA๋ ๊ธฐ์ ์ ๋ณ๊ฒฝ์๋ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ํ๊ฒ ํด์ฃผ๋ ์ค๊ณ ์์น์
๋๋ค.
PSA์ ์ญํ ๊ณผ ํน์ง
- ํธ๋์ญ์
์ถ์ํ, OXM ์ถ์ํ, ๋ฐ์ดํฐ ์ก์ธ์ค์ ์์ธ ์ฒ๋ฆฌ ๋ฑ์ ๊ธฐ์ ์ ๋ณต์ก์ฑ์ ์ถ์ํํฉ๋๋ค.
- Low-Level์ ๋ณต์กํ ๊ตฌํ๋ถ๋ฅผ PSA๊ฐ ๊ฐ์ถ๊ณ , ๊ฐ๋ฐ์๊ฐ ์ฝ๊ฒ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํน์ ๊ธฐ์ ์ ๊ด๊ณ์์ด ๋์ผํ ํธ๋์ญ์
์ฒ๋ฆฌ ๋ฐฉ์ ์ ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ก ์์: PSA ๋๋ถ์ ํ๋์ ๋ฐ์ดํฐ ์ก์ธ์ค ์ธํฐํ์ด์ค๋ก ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๋์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ 3. IoC / DI (Inversion of Control / Dependency Injection)
IoC์ DI๋ ๊ฐ์ฒด์ ์์กด์ฑ์ ๊ฐ๋ฐ์๊ฐ ์๋ ํ๋ ์์ํฌ๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ๋
์
๋๋ค.
DI์ ํน์ง๊ณผ ์ญํ
- ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์ฝ๋ ๋ด๋ถ๊ฐ ์๋ ์ธ๋ถ์์ ์ค์ ํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์์ฑ๊ณผ ๊ด๊ณ ์ค์ ์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์ ์ฐํ๊ฒ ํ์ฅ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ฐํ์ ์์ ์ ๋์ ์ผ๋ก ์์กด์ฑ์ ์ฃผ์
ํ ์ ์์ด, ๋ชจ๋ํ์ ํ
์คํธ๊ฐ ์ฉ์ดํฉ๋๋ค.
๐ก ํต์ฌ: IoC์ DI๋ ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํด์ฃผ๋ฉฐ, ํ
์คํธ ํ๊ฒฝ ์ค์ ์๋ ์ ๋ฆฌํฉ๋๋ค.
๐ฏ 4. AOP (Aspect-Oriented Programming)
AOP๋ ๊ณตํต ๋ชจ๋์ ์ฌ๋ฌ ์ฝ๋์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฒ์
๋๋ค.
- ์ํํธ์จ์ด์ ๋ชจ๋์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(Separation of Concerns)๋ฅผ ๋์
ํฉ๋๋ค.
AOP์ ์ฃผ์ ์ญํ
- ๋ก๊น
, ํธ๋์ญ์
๊ด๋ฆฌ, ๋ณด์ ๊ฐ์ ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํฉ๋๋ค.
- ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ณ , ์ฌ๋ฌ ๋ชจ๋์์ ๋์ผํ ๊ธฐ๋ฅ์ ์ค๋ณต ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ก ์์: ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์ ๊ฑธ์ณ ๋์ผํ ๋ก๊ทธ ์ฒ๋ฆฌ๋ฅผ AOP๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
๐ Spring์ผ๋ก ๊ฐ๋ฐ์ ๋ ๊ฐ๋ฅผ ๋ฌ๋ค: ๊ฐ์ฒด ๊ด๋ฆฌ๋ถํฐ ํธ๋์ญ์
๊น์ง ๋ง์คํฐํ๊ธฐ - Spring ํน์ง
1๏ธโฃ ๊ฒฝ๋ ์ปจํ
์ด๋ (Lightweight Container)
Spring์ ์๋ฐ ๊ฐ์ฒด๋ค์ ๋ด๋ ์ปจํ
์ด๋ ์ญํ ์ ํฉ๋๋ค. ์ด ์ปจํ
์ด๋๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ, ์์กด์ฑ ๊ด๋ฆฌ์ ๊ฐ์ ๋ผ์ดํ์ฌ์ดํด์ ์ง์ ๊ด๋ฆฌํฉ๋๋ค.
๊ฒฝ๋ ์ปจํ
์ด๋์ ํน์ง
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ฆฌ: ์คํ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด(Bean)๋ฅผ ์์ฑํ๊ณ , ๊ฐ์ฒด์ ์์ ์ฃผ๊ธฐ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
- ํ์ํ ์์ ์ ๊ฐ์ฒด ์ ๊ณต: ๊ฐ์ฒด๊ฐ ํ์ํ ๋๋ง๋ค ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ ํ์ ์์ด ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ฉด ๋ฉ๋๋ค.
- ์์กด์ฑ ์ฃผ์
์ง์: ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์ค์ ํด์ฃผ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์ฌ์ด์ ์์กด์ฑ์ ์ง์ ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
๐ก ํต์ฌ: ์คํ๋ง ์ปจํ
์ด๋๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๊ณ ์ค์ ์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋๋ก ํ์ฌ ๊ฐ๋ฐ์ ํจ์จ์ฑ์ ๋์
๋๋ค.
2๏ธโฃ DI (Dependency Injection) - ์์กด์ฑ ์ฃผ์
ํจํด ์ง์
DI๋ ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ฝ๋ ๋ด๋ถ๊ฐ ์๋ ์ค์ ํ์ผ์ด๋ ์ ๋
ธํ
์ด์
์ผ๋ก ์ ์ํ์ฌ ๊ด๋ฆฌํ๋ ํจํด์
๋๋ค.
DI์ ์ญํ ๊ณผ ํน์ง
-
๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋ ์ต์ํ:
- ๊ฐ์ฒด๊ฐ ์๋ก ์ง์ ์ฐธ์กฐํ์ง ์๊ณ , ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ํตํด ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์ ์ฐํ ํ์ฅ๊ณผ ํ
์คํธ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
-
์ค์ ํ์ผ๊ณผ ์ ๋
ธํ
์ด์
์ผ๋ก ์์กด์ฑ ์ ์:
- XML ์ค์ ํ์ผ์ด๋
@Autowired, @Component ๊ฐ์ ์ ๋
ธํ
์ด์
์ ํตํด ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ์ฝ๋์์ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ์ฐธ์กฐํ์ง ์์๋ ๋๋ฏ๋ก ์ ์ง๋ณด์์ ํ
์คํธ๊ฐ ํธ๋ฆฌํฉ๋๋ค.
-
๋ฐํ์ ์์ ์ ์์กด์ฑ ์ฃผ์
:
- ๊ฐ์ฒด๋ ํ์ํ ์์ ์ ์คํ๋ง ์ปจํ
์ด๋๋ก๋ถํฐ ์์กด์ฑ์ ์ฃผ์
๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ค์ํ ํ๊ฒฝ์์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋๋ก ๋์์ค๋๋ค.
๐ก ํต์ฌ: DI๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋์ ์ผ๋ก ์ค์ ํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ
์คํธ ์ฉ์ด์ฑ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
3๏ธโฃ AOP (Aspect-Oriented Programming) - ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ง์
AOP๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ ๋ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ, ์ฌ๋ฌ ์ฝ๋์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ๋๋ ๊ธฐ๋ฒ์
๋๋ค. ์ฃผ๋ก ํธ๋์ญ์
๊ด๋ฆฌ, ๋ก๊น
, ๋ณด์๊ณผ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ์ผ๋ก ํ์ํ ๊ธฐ๋ฅ์ ๋ชจ๋ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
AOP์ ํน์ง
- ํต์ฌ ๊ด์ฌ์ฌ(๋น์ฆ๋์ค ๋ก์ง)์ ํก๋จ ๊ด์ฌ์ฌ(๊ณตํต ๊ธฐ๋ฅ)๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ๋ฉด์๋ ๋ก๊น
, ๋ณด์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ์ฝ๋์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
๐ก ํก๋จ ๊ด์ฌ์ฌ๋?
์ฌ๋ฌ ๊ณณ์์ ๋ฐ๋ณต๋๋ ๊ธฐ๋ฅ(์: ํธ๋์ญ์
๊ด๋ฆฌ, ๋ก๊น
)์ผ๋ก, AOP๋ฅผ ํตํด ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ค๋ณต ์์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
AOP ์ ์ฉ ์์
- ํธ๋์ญ์
๊ด๋ฆฌ: ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจ์ํค์ง ์๊ณ AOP๋ก ๊ด๋ฆฌํ์ฌ ๋ชจ๋์ ๋
๋ฆฝ์ฑ์ ๋์
๋๋ค.
- ๋ก๊น
: ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ชจ๋์์ ๋์ผํ ๋ก๊น
๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ก ํต์ฌ: AOP๋ ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ณตํต ๊ธฐ๋ฅ์ ๋ช
ํํ ๊ตฌ๋ถํ์ฌ ์ฝ๋๋ฅผ ํจ์จ์ ์ด๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
4๏ธโฃ POJO (Plain Old Java Object) ์ง์
POJO๋ ํน์ ํ๋ ์์ํฌ๋ ๊ธฐ์ ์ ์ข
์๋์ง ์์ ์ผ๋ฐ์ ์ธ ์๋ฐ ๊ฐ์ฒด์
๋๋ค. ์คํ๋ง์์๋ ์ด POJO ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋น์ฆ๋์ค ๋ก์ง์ ์ง๊ด์ ์ด๊ณ ์ ์ฐํ๊ฒ ์ค๊ณํ ์ ์์ต๋๋ค.
POJO์ ํน์ง
-
์ธํฐํ์ด์ค๋ ํด๋์ค ์์ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ:
- POJO๋ ํ๋ ์์ํฌ์ ์ข
์๋์ง ์๊ณ , ์์ ๋กญ๊ฒ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์๋ ๊ธฐ์กด์ Java ๊ฐ์ฒด์งํฅ ์์น์ ๊ทธ๋๋ก ๋ฐ๋ฅด๋ฉด์, ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
-
๋จ์ํ ๊ฐ์ฒด ๊ตฌ์กฐ๋ก ์ ์ง๋ณด์ ์ฉ์ด:
- POJO๋ ๋ณต์กํ ์ค์ ์์ด ๋์ํ๋ฉฐ, ํ์ํ ๊ธฐ๋ฅ๋ง ๊ตฌํํฉ๋๋ค.
- ์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ํ
์คํธ๊ฐ ์ฝ๊ณ ์ ์ง๋ณด์๊ฐ ํธ๋ฆฌํฉ๋๋ค.
๐ก ํต์ฌ: ์คํ๋ง์ POJO๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ณต์กํ ์ํฐํ๋ผ์ด์ฆ ๊ตฌ์กฐ ์์ด๋ ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
5๏ธโฃ IoC (Inversion of Control - ์ ์ด์ ๋ฐ์ )
IoC๋ ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ด๊ถ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๋ด๋นํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ธฐ์กด์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์กด์ฑ์ ์ฐ๊ฒฐํ์ง๋ง, IoC๋ฅผ ํตํด ์ด ์์
์ด ์ปจํ
์ด๋๋ก ์์๋ฉ๋๋ค.
IoC์ ๋์
๋ฐฐ๊ฒฝ๊ณผ ํน์ง
- ์ด๊ธฐ Java ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ ์ค์ ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฒ๋ฆฌํ์ต๋๋ค.
- Servlet๊ณผ EJB๊ฐ ๋ฑ์ฅํ๋ฉด์ ์ผ๋ถ ๊ฐ์ฒด์ ์ ์ด๊ถ์ Servlet Container์ EJB Container์ ์ํด ๊ด๋ฆฌ๋๊ธฐ ์์ํ์ต๋๋ค.
- ํ์ง๋ง ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ด๊ถ์ ๋๊ธฐ๋ ๊ฒ์ ์๋๋ฉฐ, ํต์ฌ์ ์ธ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ฆฌ์ ๋ํ ์ ์ด๊ถ์ ์ฌ์ ํ ๊ฐ๋ฐ์์๊ฒ ๋จ์ ์์ต๋๋ค.
์คํ๋ง์์์ IoC ๊ตฌํ
- ์คํ๋ง์ ๊ฐ์ฒด ์์ฑ๊ณผ ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋๋ฐ, ์ด๋ฅผ Spring Container ๋๋ IoC Container๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
- IoC Container๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ์ค์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋ญ๋๋ค.
๐ก ํต์ฌ: IoC๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ๊ด๋ฆฌ์ ์์กด์ฑ ์ฒ๋ฆฌ์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ์ ์ง์คํ ์ ์์ต๋๋ค.
6๏ธโฃ ์คํ๋ง์ ํธ๋์ญ์
์ฒ๋ฆฌ ์ง์
์คํ๋ง์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ํธ๋์ญ์
์ ์ฒ๋ฆฌํ ์ ์๋ ์ ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๋ฌ ํ๊ฒฝ์์ ๋์ผํ ํธ๋์ญ์
์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ์ฌ, ๊ฐ๋ฐ์๊ฐ ํธ๋์ญ์
์ฒ๋ฆฌ์ ๋ณต์ก์ฑ์์ ๋ฒ์ด๋๋๋ก ๋์ต๋๋ค.
์คํ๋ง์ ํธ๋์ญ์
์ฒ๋ฆฌ ๋ฐฉ์
- JDBC, JTA์ ๊ฐ์ ๋ค์ํ ํธ๋์ญ์
API๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ์ค์ ํ์ผ์ด๋ ์ ๋
ธํ
์ด์
์ ํตํด ํธ๋์ญ์
๊ด๋ จ ์ค์ ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ํน์ ํ๊ฒฝ์ ์ข
์๋์ง ์๊ณ , ๋์ผํ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ก ์์: ๊ฐ๋ฐ์๊ฐ JDBC์ JTA์ ๊ฐ์ API๋ฅผ ์ผ์ผ์ด ๋ค๋ฃจ์ง ์์๋, ์คํ๋ง์ ์ค์ ๋ง์ผ๋ก ์ผ๊ด๋ ํธ๋์ญ์
๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
7๏ธโฃ ์์์ฑ๊ณผ ๊ด๋ จ๋ ๋ค์ํ API ์ง์
์คํ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๋์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ค์ํ ORM (Object-Relational Mapping) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํตํฉ์ ์ง์ํฉ๋๋ค.
์์์ฑ API ์ง์์ ํน์ง
- JDBC์ ๊ฐ์ ์ ํต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ฐฉ์๋ฟ ์๋๋ผ,
- myBatis, Hibernate, JPA ๋ฑ ๋๋ฆฌ ์ฌ์ฉ๋๋ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฐ๋์ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฌํ ์ง์์ ํตํด ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ณ ์ผ๊ด์ฑ ์๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
๐ก ์์: Hibernate๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๋จ์ํํ๊ณ , ์คํ๋ง์ ํธ๋์ญ์
๊ธฐ๋ฅ์ ํ์ฉํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
8๏ธโฃ ๋ค์ํ API์ ๋ํ ์ฐ๋ ์ง์
์คํ๋ง์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ API์์ ์์ฌ์ด ์ฐ๋์ ์ง์ํฉ๋๋ค.
์ฐ๋ ์ง์ API ์์
- JMS (Java Message Service): ๋น๋๊ธฐ ๋ฉ์์ง ์ ๋ฌ์ ์ง์ํด ์์คํ
๊ฐ์ ํต์ ์ ์ํํ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ฉ์ผ API: ์ด๋ฉ์ผ ์ ์ก ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
- ์ค์ผ์ค๋ง ๊ธฐ๋ฅ: ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ํน์ ์์
์ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
๐ก ์ค์ ๋ฐฉ๋ฒ: ์ด๋ฌํ API๋ค์ ์ค์ ํ์ผ(XML)์ด๋ ์ ๋
ธํ
์ด์
๊ธฐ๋ฐ์ ์ค์ ์ผ๋ก ๊ฐํธํ๊ฒ ์ฐ๋ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ณต์กํ ์ค์ ์์ด ํ์ํ API๋ฅผ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ Spring Framework Runtime ๊ตฌ์กฐ
1๏ธโฃ Data Access / Integration (๋ฐ์ดํฐ ์ ๊ทผ ๋ฐ ํตํฉ) ๐๏ธ
Spring์ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ๊ณผ ์์คํ
ํตํฉ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.
- JDBC: SQL์ ํตํด ์ ํต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ
- ORM: JPA, Hibernate, MyBatis์ ๊ฐ์ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๋ํด ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ๋งคํ์ ๋จ์ํ
- OXM: ๊ฐ์ฒด์ XML ๊ฐ ๋ณํ์ ์ง์
- JMS: ๋น๋๊ธฐ ๋ฉ์์ง ์ ๋ฌ์ ํตํด ์์คํ
๊ฐ ํต์ ์ง์
- Transactions: ์ผ๊ด๋ ํธ๋์ญ์
์ฒ๋ฆฌ๋ก ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ์ ์ง
๐ก ํต์ฌ: ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๋ฉ์์ง ์์คํ
๊ณผ ํตํฉํ์ฌ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ ์ฒ๋ฆฌ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
2๏ธโฃ Web (์น ๋ชจ๋) ๐
Spring์ ๋ค์ํ ์น ๊ธฐ์ ์ ํตํด ๋ชจ๋ ์ ํ์ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ง์ํฉ๋๋ค.
- WebSocket: ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ง์
- Servlet: ์ ํต์ ์ธ HTTP ์์ฒญ๊ณผ ์๋ต ์ฒ๋ฆฌ
- Web: RESTful API์ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์ง์
- Portlet: ํฌํธ ํ๊ฒฝ์์ ๋์ํ๋ ํฌํ๋ฆฟ ์ ํ๋ฆฌ์ผ์ด์
์ง์
๐ก ํต์ฌ: Spring์ ์น ๋ชจ๋๋ก ๋จ์ํ ํ์ด์ง๋ถํฐ ์ค์๊ฐ ํต์ ์ ํ๋ฆฌ์ผ์ด์
๊น์ง ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
3๏ธโฃ AOP ๋ฐ Instrumentation ๐
- AOP: ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํ์ฌ ์ฌ๋ฌ ์ฝ๋์ ์ค๋ณต ์์ด ์ ์ฉ ๊ฐ๋ฅ
- Aspects: AOP๋ฅผ ํตํด ํต์ฌ ๋ก์ง๊ณผ ๊ณตํต ๊ธฐ๋ฅ์ ๋ถ๋ฆฌ
- Instrumentation: ๋ฐํ์์ ๋์ ์ผ๋ก ์ฝ๋ ์์ ๊ฐ๋ฅ
- Messaging: ๋น๋๊ธฐ ๋ฉ์์ง ์์คํ
๊ณผ ํตํฉํด ์ ์ฐํ ํต์ ํ๊ฒฝ ์ ๊ณต
๐ก ํต์ฌ: AOP์ Instrumentation์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ฐํํฉ๋๋ค.
4๏ธโฃ Core Container (ํต์ฌ ์ปจํ
์ด๋) ๐ ๏ธ
Spring์ ํต์ฌ ์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ฒด(Bean)์ ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
- Beans: ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- Core: ์คํ๋ง์ ํต์ฌ ๊ธฐ๋ฅ ๋ฐ DI(์์กด์ฑ ์ฃผ์
) ์ง์
- Context: ์ ํ๋ฆฌ์ผ์ด์
ํ๊ฒฝ ์ค์ ๊ณผ Bean ๊ด๋ฆฌ
- SpEL: ๋ฐํ์ ์์ ์ ํํ์์ ํ๊ฐํ ์ ์๋ Spring Expression Language
๐ก ํต์ฌ: Core Container๋ ์์กด์ฑ ๊ด๋ฆฌ์ ๊ฐ์ฒด ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
5๏ธโฃ Test (ํ
์คํธ ๋ชจ๋) ๐งช
Spring์ ๋จ์ ํ
์คํธ์ ํตํฉ ํ
์คํธ๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์๋ ํ
์คํธ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
๐ก ํต์ฌ: ํ
์คํธ ๋ชจ๋์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ ์ ์ด๊ณ ์ ๋ขฐ์ฑ ์๊ฒ ์ ์งํ๋๋ก ๋์ต๋๋ค.
๐ Spring Framework Module ์ด์ ๋ฆฌ: ๋ชจ๋๋ณ ํต์ฌ ๊ธฐ๋ฅ ์๋ฒฝ ๊ฐ์ด๋
1๏ธโฃ Spring Core ๐งฑ - ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ
- Spring Core๋ ์คํ๋ง์ ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, BeanFactory๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ:
- ์์กด์ฑ ์ฃผ์
(DI)์ ํตํด ๊ฐ์ฒด ๊ฐ ์์กด ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ์ฌ ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฅ๋๋ค.
2๏ธโฃ Spring Context ๐ฑ - ์ค์ ๊ณผ ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ
- Spring Context๋ Spring Core์ BeanFactory๋ฅผ ํ์ฅํ ๋ชจ๋์
๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ, ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ ํจ์ฑ ๊ฒ์ฆ, ๊ตญ์ ํ ๋ฉ์์ง๋ฅผ ์ง์ํฉ๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ: ์ ํ๋ฆฌ์ผ์ด์
์ค์ ๊ณผ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์กด์ฑ ์ฃผ์
์ ๋ ์ ์ฐํ๊ฒ ํด์ค๋๋ค.
3๏ธโฃ Spring AOP ๐ - ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ง์
- Spring AOP๋ ํธ๋์ญ์
, ๋ก๊น
, ๋ณด์๊ณผ ๊ฐ์ ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํด ์ฌ๋ฌ ์ฝ๋์ ์ค๋ณต ์์ด ์ ์ฉํ ์ ์์ต๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ: ํต์ฌ ๋ก์ง๊ณผ ๊ณตํต ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์
๋๋ค.
4๏ธโฃ Spring DAO ๐๏ธ - ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต ๊ด๋ฆฌ
- Spring DAO๋ JDBC DAO ์ถ์ ๋ ์ด์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒค๋ ๊ฐ์ ์์ธ ์ฒ๋ฆฌ์ ์ค๋ฅ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ: ์ผ๊ด๋ ์์ธ ์ฒ๋ฆฌ๋ก ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
5๏ธโฃ Spring ORM ๐ - ORM ํตํฉ ์ง์
- ์คํ๋ง์ JPA, Hibernate, iBatis์ ๊ฐ์ ORM ํ๋ ์์ํฌ์์ ํตํฉ์ ์ง์ํฉ๋๋ค.
- ORM์ ํตํด ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ๋จ์ํํฉ๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ: ๊ฐ์ฒด์ ๋ฐ์ดํฐ ๊ฐ์ ๋งคํ์ ์ฝ๊ฒ ์ฒ๋ฆฌํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ๋ณต์ก์ฑ์ ์ค์
๋๋ค.
6๏ธโฃ Spring Web ๐ - ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ฐ
- Spring Web์ Web Context ๋ชจ๋์ ํ์ฅํ์ฌ HTTP ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ: ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ํ ์ปจํ
์คํธ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
7๏ธโฃ Spring Web MVC ๐ ๏ธ - MVC ๊ธฐ๋ฐ ์น ๊ฐ๋ฐ
- Spring Web MVC๋ ๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ(MVC) ํจํด์ ์ฌ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์กฐ๋ฅผ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํฉ๋๋ค.
- ๋ณต์กํ ์ค์ ์์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๋์ต๋๋ค.
๐ก ํต์ฌ ๊ธฐ๋ฅ: MVC ํจํด์ ํตํด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ๊ฐํํฉ๋๋ค.