Spring Framework ๋? (์ถ์ฒ : https://opentutorials.org/course/2428/13594)
- Java Platform์ ์ํ ์คํ ์์ค ์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- Java Enterprise ๊ฐ๋ฐ์ ํธํ๊ฒ ํด์ฃผ๋ ์คํ ์์ค ๊ฒฝ๋๊ธ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- Java ๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ๋ก ์ข ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๊ณ , ์กฐ๋ฆฝํด์ฃผ๋ ๋๊ตฌ
- POJO(Plain Old Java Object) BEAN CONTAINNER
*Framework : ์ฑ๊ฐ๋ฐ์ ๋ฐํ์ด ๋๋ ํ ํ๋ฆฟ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ ํด๋์ค๋ค๊ณผ ์ธํฐํ์ด์ค์ ์งํฉ
*POJO : ์ฌ์ฉ์๊ฐ ๋ง๋ค์ด๋ธ ๊ฐ์ฒด๋ฅผ ์๋ฏธ. Spring์ ์ฌ์ฉ์๊ฐ ๋ง๋ค ๊ฐ์ฒด๋ค์ ๋ํด์๋ LifeCycle ๊ด๋ฆฌ๋ฅผ ์์ํ์ฌ ์ํ,
์ด๋ค์ ์กฐํฉ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์.
Spring Framework๋ ์ฝ 20๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ํ์ํ ๋ชจ๋๋ง ๊ฐ์ ธ๋ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ ๋ชจ๋๋ง๋ค 3๊ฐ์ JARํ์ผ์ ๊ฐ๊ฒ ๋๋ ๋ฐ,
๊ฐ๊ฐ compile๋ .class ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์๋ณธ ์์ค JARํ์ผ, JavaDoc JARํ์ผ์ด๋ค.
| ๋ฐ์ดํฐ ์ ๊ทผ(Data Access) ๋ฐ ํตํฉ(Integration)
- JDBC, ORM, OXM, JMS, Transactions ๋ชจ๋๋ก ๊ตฌ์ฑ
- ์๋น์ค ์ถ์ํ๋ฅผ ํตํด ์ฝ๊ฒ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
| ์น(Web)
- ์น ์งํฅ์ ์ธ ํตํฉ๊ธฐ๋ฅ(๋ฉํฐํํธ ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ, ์๋ธ๋ฆฟ ๋ฆฌ์ค๋์ ์น์งํฅ์ฑ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ IoC ์ปจํ ์ด๋์ ์ด๊ธฐํ)์ ์ ๊ณต
- WebSocket, Serviet, Web, Portlet ๋ชจ๋๋ก ๊ตฌ์ฑ
| AOP(Aspect Oriented Programming)
- ๊ด์ ์งํฅํ ํ๋ก๊ทธ๋๋ฐ.
- ์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ์ ์ธ ๊ด์ (Goal)๊ณผ ๋ถ๊ฐ์ ์ธ ๊ด์ (DB์ฐ๊ฒฐ, ๋ก๊น , File I/O ๋ฑ)์ ๋๋์ด ๋ณด๊ณ ๊ฐ๊ฐ ๋ชจ๋ํํ๊ฒ ๋ค๋ ๋ป.
- ์ด๋ ๊ฒ ๋ชจ๋ํํ๋ฉด ํต์ฌ ๋น์ง๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ฒ ๋๊ณ , ์ฌ๋ฌ ๋ถ๊ฐ ๋ชจ๋์ ์ฌ์ฌ์ฉํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๊ณตํต์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค. (๊ฐ์ฒด๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ์ถฐ์ง)
- ์ด๋ฅผ ์ํด Aspect ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํด์ค
- Aspect๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ํ ์ฝ๋์ธ Advice์ ์ด๋ฅผ ์ด๋์ ์ ์ฉํ ์ง ๊ฒฐ์ ํ๋ PointCut๋ฅผ ํฉ์น ๊ฐ๋
- AOP ๊ฐ๋ ์ ์ ์ฉํ๋ฉด ํต์ฌ๊ธฐ๋ฅ ์ฝ๋ ์ฌ์ด์ ์นจํฌ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ธ Aspect๋ก ๊ตฌ๋ถํด๋ผ ์ ์์
- ๊ตฌ๋ถ๋ ๋ถ๊ฐ๊ธฐ๋ฅ Aspect๋ฅผ Runtime ์์ ํ์ํ ์์น์ ๋์ ์ผ๋ก ์ฐธ์ฌํ๊ฒ ํ ์ ์์
| Instrumentation
- ์ค๋ฅ๋ฅผ ์ง๋จํ๊ฑฐ๋ ์ถ์ ์ ๋ณด๋ฅผ ์ฐ๊ธฐ ์ํด ์ฑ๋ฅ ์ ๋๋ฅผ ๋ชจ๋ํฐํ๊ฑฐ๋ ์ธก์ ํ๋ ๊ธฐ๋ฅ
*ํ๋ก๊ทธ๋๋จธ๋ ์์คํ ์์ ํน์ ํ ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์ฝ๋ ๋ช ๋ น์ด ํํ๋ก Instrumentation์ ๊ตฌํํ ์ ์๋ค.
(ex. ๋ช ๋ น์ด๋ ๋ก๊น ์ ๋ณด๋ฅผ ๋ชจ๋ํฐ์ ์ถ๋ ฅํ ์ ์์)
- Spring-Instrumentation ๋ชจ๋์ ์ด๋ฅผ ์ง์ํ๋ ํด๋์ค์ ํน์ ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ์ฌ์ฉ๋๋ ํด๋์ค๋ก๋ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณต
| Messaging
- Spring Framework๋ ๋ฉ์์ง ๊ธฐ๋ฐ app์ ์์ฑํ ์ ์๋ Message, MessageChannel, MessageHandler๋ฅผ ์ ๊ณต
- ๊ฐ ๋ชจ๋์๋ ๋ฉ์๋์ ๋ฉ์์ง๋ฅผ ๋งตํํ๊ธฐ ์ํ annotation๋ ํฌํจ๋์ด ์์
| Core Container
- ์ธ์คํด์ค์ ์๋ช ์ฃผ๊ธฐ์ ์ค์ , ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ด๋ฆฌ
- ์์ฑ๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณต
- Beans, Core, Context, SpEL(Spring Expression Language) ๋ชจ๋๋ก ์ด๋ฃจ์ด์ง
- Beans์ Core๋ชจ๋์ IoC์ DI๋ฅผ ํฌํจํ๋ ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ์ด ๋๋ ๋ถ๋ถ์ ์ ๊ณตํจ
*IoC(Inversion of Control), ์ ์ด์ ์ญ์
ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ ์ดํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ, ์ด ํ๋ฆ์ ์ ์ด๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ํ๋ ๊ฒ.
*DI(Dependency Injection), ์์กด์ฑ ์ฃผ์
ํด๋์ค ์ฌ์ด์ ์์กด๊ด๊ณ๋ฅผ Bean ์ค์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ
์ฝ๊ฒ ๋งํด ๊ฐ์ฒด๋ฅผ setter๋ก ๋ฐ์์ ์์ ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ.
(p.s ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์ํฅ์ ๋ง์ด ๋ฐ์ ๋, ์์กด์ฑ์ด ๋๋ค๊ณ ๋งํจ)
- Context ๋ชจ๋์ Beans์ Core ๋ชจ๋์์ ์ ๊ณตํ๋ ๊ธฐ๋ฐ ์์ ๊ตฌ์ฑ. Beans ๋ชจ๋์ ํน์ง์ ์์๋ฐ๊ณ ๊ตญ์ ํ, ์ด๋ฒคํธ์ ํ, ๋ฆฌ์์ค-๋ก๋ฉ, ์ค๋น๋ฆฟ ์ปจํ ์ด๋ Context์ ํฌ๋ช ํ ์์ฑ์ ๋ํ ์ง์์ ์ถ๊ฐํจ.
- SpEL ๋ชจ๋์ runtime์์ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์กฐํํ๊ณ ์กฐ์ํจ. ์์ฑ๊ฐ์ ์ค์ ํ๊ณ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ๊ณผ ์์ฑ ํ ๋น, ๋ฉ์๋ ํธ์ถ, ๋ฐฐ์ด๊ณผ ์ปฌ๋ ์ ๊ณผ ์ธ๋ฑ์์ context ์ ๊ทผ ๋ฑ ๊ธฐ์์ ์ง์. ์ผ๋ฐ์ ์ธ ๋ฆฌ์คํธ ์งํฉ ๋ฟ ์๋๋ผ ๋ฆฌ์คํธ์ ํฌ์๊ณผ ์ ํ๋ ์ง์.
| Test
- Test ๋ชจ๋์ Spring ์ปดํฌ๋ํธ์ ํ ์คํธ๋ฅผ ์ง์ํจ.
- Spring ์ดํ๋ฆฌ์ผ์ด์ context์ ์์ ๋ ๋ก๋ฉ๊ณผ ์ด๋ฌํ context์ ์บ์ฑ์ ์ ๊ณต
- ์ฝ๋๋ฅผ ๊ฒฉ๋ฆฌ๋ ์ํ๋ก ํ ์คํธํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ ๊ณต
=> Spring์ DI๋ฅผ ์ด์ฉํ์ฌ java ์ฑ์ ๋ง๋ค ์ ์๊ฒ ํ๋ Framework์ด๋ฉฐ, ์น ๋ชจ๋์ ์ ๊ณตํด ์น์ ํจ๊ณผ์ ์ผ๋ก ๋ง๋ค ์ ์๋๋ก ๋์์ค๋ค.
์ถ์ฒ
https://wordbe.tistory.com/entry/Spring-Java-Spring-%EA%B8%B0%EB%B3%B8
https://opentutorials.org/course/2428/13594
https://dololak.tistory.com/21
https://blog.outsider.ne.kr/729