์๋ฐ ํ๋ซํผ์ ์ํ ์คํ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ก์จ MVC๋ชจ๋์ ์ ๊ณตํ์ฌ ์น์ ํจ๊ณผ์ ์ผ๋ก ๊ฐ๋ฐํ๊ธฐ ์ํ ๋ค์ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ๋ฐ์ ํ์ํ ๋ชจ๋ ๊ธฐ์ ์ ์ ๊ณตํ๊ณ ์ฒ๋ฆฌ๋ฅผ ์ ๋ดํ์ฌ ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ ์ ๋ฌด์ ์ง์ค ํ ์ ์๊ฒ ์ค๊ณ๋ ํ๋ ์์ํฌ
- ๋จ์ํ ๋ ๋จ์ ํ ์คํธ
- ๋ณต์กํ ์ฝ๋์ ๊ฐ์
- ์ํคํ ์ฒ์ ์ ์ฐ์ฑ
-
ํฌ๊ธฐ์ ๋ถํ ์ธก๋ฉด์์ ๊ฒฝ๋ํ ( ๊ฒฝ๋ ์ปจํ ์ด๋ )
-
์ ์ด ์ญํ (IoC, Inversion of Control)
- ๊ฒฐํฉ๋๋ฅผ ๋์จํ๊ฒ ํ๊ธฐ ์ํจ
control์ ์ ์ด๊ถ์ด ์ฌ์ฉ์๊ฐ ์๋ ํ๋ ์์ํฌ์ ์๋ค.
-
์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)
-
๊ฐ๊ฐ์ ๊ณ์ธต์ด๋ ์๋น์ค๋ค ๊ฐ์ ์์กด์ฑ์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๊ฐ ์ฐ๊ฒฐ์์ผ์ค๋ค.
-
๋ฐฉ๋ฒ
-
ํ๋ ์ฃผ์ : ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ ค๊ณ ํ๋ ํด๋์ค์ ์ ์ธ ํ
@Autowiredํค์๋๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ์๋์ผ๋ก ์ฃผ์ ์ด๋๋ค.-
๋ฌธ์ ์ :
- ๋จ์ผ ์ฑ ์์ ์์น ์๋ฐ
- ๋ถ๋ณ์ฑ : final์ ์ ์ธํ ์์์ด ๊ฐ์ฒด๊ฐ ๋ณํ ์ ์๋ค.
-
-
setter ์ฃผ์ : setter๊ธฐ๋ฅ์ ๋ฉ์๋์ @Autowired๋ฅผ ๋ถ์ฌ ๊ตฌํํ๋ ๋ฐฉ์
- ๋ฌธ์ ์ :
- ๋ถ๋ณ์ฑ : ์ด ๋ฐฉ๋ฒ๋ํ ๊ฐ์ฒด๊ฐ ๋ณํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋ค.
- ๋ฌธ์ ์ :
-
์์ฑ์ ์ฃผ์ : ์กฐ๋ฆฝ ์์ ์ ์ฃผ์
์์กด์ฑ ์ฃผ์ ์ ์์ฑ์๋ฅผ ์ธ์๋ก ๋๊ธฐ๋ ๋ฐฉ์
spring4.3์ดํ๋ถํฐ๋ @Autowired์๋ต ๊ฐ๋ฅ
final์ ๋ถ์ฌ ๋ถ๋ณ์ฑ ๋ฌธ์ ๋ ํด๊ฒฐ๊ฐ๋ฅํ๋ค.
-
-
-
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP, Aspect-Oriented Programing)
-
ํธ๋์ญ์ ์ด๋, ๋ก๊น , ๋ณด์๊ฐ์ ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌ.
์ด์ฒ๋ผ ๋ชจ๋ ๋ชจ๋์์ ์ ์ฉ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ํก๋จ ๊ด์ฌ(๊ณตํต ๊ด์ฌ์ฌํญ,cross-cutting concerns)๋ผ๊ณ ํ๋ค.ex) ๋ชจ๋ ๋ฉ์๋์ ์คํ ์๊ฐ์ ์ธก์ ํ๊ณ ์ถ์ด! ํ ๋, ๋ชจ๋ ๋ฉ์๋์ ์ฝ๋๋ฅผ ์ง์ด๋ฃ๊ธฐ์ ์ ์ง ๋ณด์๊ฐ ํ๋ค๊ณ ๊ณตํต ๋ก์ง์ ๊ตฌํ์ด ํ๋ค๋ ์ฌ์ฉ
@Around("execution(* ํจํค์ง ๋ช ..*(..))")๊ณผ ๊ฐ์ด ๊ด์ฌ ํ์ผ๋ค ์ ์ฉSpringConfig์@Bean์ผ๋ก AOPํ์ผ ๋ฑ๋กํด์ ์ฌ์ฉ ๊ฐ๋ฅcontroller๊ฐ ํด๋น service๋ฅผ ์คํ์ ํ๋ก์(๊ฐ์ง ์คํ๋ง๋น)์ ๋ง๋ค์ด AOP๋ฅผ ์คํํ joinPoint.proceed()๋ฅผ ํธ์ถํ์ฌ ์ค์ service๋ฅผ ํธ์ถ. controller๋ proxy์ ์์ฉํ๋ ์
-
-
์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ์ค์ ์ ๊ด๋ฆฌํ๋ค๋ ์ ์์ ์ผ์ข ์ ์ปจํ ์ด๋
-
PSA(Portable Service Abstraction)
- ๋ค๋ฅธ ์ฌ๋ฌ ๋ชจ๋์ ์ฌ์ฉํจ์ ์์ด์ ๋ณ๋์ ์ถ์ํ ๋ ์ด์ด๋ฅผ ์ ๊ณต
-
Core Container : ์คํ๋ง ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ๋ชจ๋
- Beans : ์คํ๋ง Ioc์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ์ ์ด๋ฃจ๋ ๊ฐ์ฒด๋ค. ์์กด์ฑ ์ฃผ์ ์ฌ๊ณต
- Core : ์คํ๋ง ๋ชจ๋์ด ์ฌ์ฉํ๋ ์ ํธ
- Context : ๋น ํฉํ ๋ฆฌ๋ฅผ ์์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝํ ์คํธ๋ฅผ ๊ตฌํํ๊ณ , ๋ฆฌ์์ค ๋ก๋ ๋ฐ ๊ตญ์ ํ ์ง์
- SpEL : EL(JSPํํ ์ธ์ด)๋ฅผ ํ์ฅํ๊ณ ๋น ์์ฑ ์ ๊ทผ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ธ์ด ์ ๊ณต
-
AOP / Instrumentation : AOP ๋ฐ class Instrumentation์ ์ง์ํ๋ ๋ชจ๋
-
Messaging : ์คํ๋ง MVC ์ด๋ ธํ ์ด์ ์ฒ๋ผ ๋ฉ์ธ์ง๋ฅผ ๋ฉ์๋์ ๋งตํ์ํค๋ ์ด๋ ธํ ์ด์ ์ ์ธํธ
-
Data Access / Integration : DB ๋ฐ ๋ฉ์์ง ๊ณต๊ธ์์์ ์ํธ์์ฉ์ ๊ฐ์ํํ๋ ๋ชจ๋
- JDBC : ์ฌ๋ฌ๊ณณ์์ ์ฌ์ฉ๋๋ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ์ํ
- ORM : ORM, JPA, HIBERNATE๋ฑ ์ ๊ณต
- OXM : XML๋งคํ ํตํฉ ๊ฐ์ฒด ์ ๊ณต
- Transactions : POJO ๋ฐ ๋ค๋ฅธ ํด๋์ค์ ๋ํ ์ ์ธ์ ํธ๋๊ฐ์
๊ด๋ฆฌ๋ฅผ ์ ๊ณต
(POJO๋ ์ฌ์ฉ์๊ฐ ๋ง๋ค์ด๋ธ ๊ฐ์ฒด๋ก์, ์ด๋ํ ์คํ๋ง์ด ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ๋ฅผ ์์ํด์ ์ํ)
-
Web : ์น ๋ฐ ํฌํ๋ฆฟ ์ฑ ๊ฐ๋ฐ์ ๊ฐ์ํํ๋ ๋ชจ๋
-
Test : ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ ์์ฑ์ ๊ฐ์ํํ๋ ๋ชจ๋
์ํค ๋ฐฑ๊ณผ - https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC
crosscutting concerns - https://winmargo.tistory.com/89
ํน์ง ์ค๋ช - https://opentutorials.org/course/2428/13594
spring mvc ๋์ ์์ - https://devpad.tistory.com/24
DispatcherServlet ๋์์๋ฆฌ - https://galid1.tistory.com/526

