Spring FrameWork - hyunwoo-e/Spring GitHub Wiki
ํ๋ ์์ํฌ๋
๋ผ๋๊ฐ ๋๋ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด ๋๊ณ , ๊ทธ ๋ผ๋๋ฅผ ํ ๋๋ก ๊ตฌ์ฒด์ ์ธ ๊ฐ๋ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๋ฏธ๋ค์จ์ด
๊ณ์ธตํ ์ํคํ ์ฒ
- ํ๋ ์ ํ ์ด์ ๊ณ์ธต
- ์ฌ์ฉ์๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๊ฑฐ๋ ์ถ๋ ฅํด ๋ณด์ด๋ ๊ณ์ธต
- ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ํฌ๋ฉงํ ์ ๋ด๋น
- ์ ์ด ๊ณ์ธต
- ๊ตฌ์ฑ ์์๊ฐ ์ฒ๋ฆฌ ํ๋ฆ ์ ์ด
- ์์ฒญ์ ๊ฒ์ฆํ๊ณ , ๋ก์ง์ ์์ฒญ์ ์ ๋ฌ
- ๋ก์ง์ ์๋ต์ ๋์๋๋ ๋ทฐ์ ์ฐ๊ฒฐ
- ๋น์ฆ๋์ค ๊ณ์ธต
- ์ ์ด ๊ณ์ธต๊ณผ ํผ์์คํด์ค ๊ณ์ธต ์ฌ์ด๋ฅผ ์ฐ๊ฒฐ
- ํผ์์คํด์ค ๊ณ์ธต
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ผ์ ์ ๊ทผํ์ฌ CRUD
- ๋๋ฉ์ธ ๊ณ์ธต
- ๋ฐ์ดํฐ ๊ฐ์ฒด
๊ฐ์ฒด ๋ถ๋ฆฌ
๊ฐ๋ฐฉ ํ์ ์์น
- ํด๋์ค๋ ๋ชจ๋์ ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ๋์์์ง๋(ํ๋์ ์ฑ ์์ ์ง์ค)์ ๋ฎ์ ๊ฒฐํฉ๋ ํธ๋์ญ์ ์ด๋ ๋ก๊น , ๋ณด์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋ค
- DAO(Data Access Object)
- DB๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ CRUDํ๋ ๊ธฐ๋ฅ์ ์ ๋ดํ๋ ๊ฐ์ฒด
- DAO๋ฅผ ํตํด์๋ง ์ ๊ทผํจ์ผ๋ก์จ, ๋ค์์ ์๊ฒฉํธ์ถ ์ค๋ฒํค๋๋ฅผ DTO๋, VO๋ฅผ ํตํด ์ค์ผ ์ ์๋ค.
- POJO(Plain Old Java Object)
- ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด
- ๊ทธ ์์ฑ์ ์ ๊ทผํ๊ธฐ ์ํ getter์ setter๋ง ๊ฐ์ง๊ณ ์๋ ํด๋์ค
- DTO(Data Transfer Obejct) vs VO(Value Object)
- VO - ๊ฐ์ด ๊ฐ์ผ๋ฉด ๊ฐ์ ์ค๋ธ์ ํธ๋ก ์ทจ๊ธ
- DTO - ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ผ๋ฉด ๊ฐ์ด ๊ฐ๋๋ผ๋ ๋ค๋ฅด๊ฒ ์ทจ๊ธ
- BO
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋น
- ๋น์ฆ๋์ค ์ํ์ ์ํด DAO ๋ฉ์๋๋ฅผ ํธ์ถํจ
Container
์ปจํ ์ด๋๋ ์ธ์คํด์ค ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ฝ๋์ ์ฒ๋ฆฌ๊ณผ์ ์ ์์๋ฐ์ ๋ ๋ฆฝ์ ์ธ ์กด์ฌ
- ์ฌ์ฉ์์ ํธ์ถ์ ์ํด ์ค์ค๋ก ์ฝ๋๋ฅผ ์ฐธ์กฐํ๊ณ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ ์ปจํธ๋กค
- BeanFactory: bean์ ์ ์๋ ์ฆ์ ๋ก๋ฉ, bean ์์ฒด๊ฐ ํ์ํ๊ฒ ๋๊ธฐ ์ ๊น์ง๋ ์ธ์คํด์คํ๋ฅผ ํ์ง ์๋๋ค.(lazy loading)
- ApplicationContext: ์ปจํ ์คํธ ์ด๊ธฐํ ์์ ์์ ๋ชจ๋ ์ฑ๊ธํค bean์ ๋ก๋
IoC (Inversion of Control, ์ ์ด์ ์ญํ)
๊ฐ์ฒด์ ์์ฑ์์๋ถํฐ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ ํ๋ ์์ํฌ๊ฐ ๊ฐ์ง (IoC ์ปจํ ์ด๋)
DI (Dependency injection, ์์กด์ฑ ์ฃผ์ )
DI์ ์ฌ์ฉ๋ชฉ์ : ๋ถ๋ฆฌํ์ผ๋ก ๊ฐ๋ฐํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ ๊ฒ.
- Constructor Injection: A์ ์์ฑ์์์ B๋ฅผ ์์ฑ
- Setter Injection: A๊ฐ B๊ฐ ๋ง๋ C๋ฅผ ์ฌ์ฉ
Bean
- Javabean: ๋ํดํธ ์์ฑ์๋ฅผ ๊ฐ์ง๋ POJO
- Spring์ bean: ์คํ๋ง์ด ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ์ง์ ์์ฑํด์ ์ปจํ ์ด๋์ ๋ฑ๋ก, ์ปจํ ์ด๋์ ์ํด ๊ทธ ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด
AOP (Aspect Oriented Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)
- ๋ถ๊ฐ์ ์ธ ์ ๋ฌด๊ฐ ์ฃผ ์ ๋ฌด์ ๊ฐํ ์์ง๋ ฅ์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ ์๋น์ค ์ถ์ํ๊ฐ ์ด๋ ค์์ง๋ค.
- ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ฒ์ผ๋ก OOP(Obejct Oriented Programming)์ ๋ณด์์ ๊ฐ๋
- ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์์ฑ(Cross Cutting, ํฌ๋ก์ค ์ปทํ
)ํ๊ณ , ํ์ํ ๋ ๋ํนํ์ฌ ์ฌ์ฉ
- AOP Advice: ๋ฉ์ธ ์ ๋ฌด์ ๋ณด์กฐ์ ์ผ๋ก ์ถ๊ฐ๋ ๋ณด์กฐ ์ ๋ฌด๋ฅผ JAVA๋ ๋ฒจ์ด ์๋ XML์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ธ์ ์