๐ IntelliJ ๊ธฐ๋ณธ ์ธํ
๐ Spring Framework
: IoC ์ ์ด ์ญ์ , ์ ์ด ๋ฐ์
: DI ์์กด์ฑ ์ฃผ์
: DL (Dependency Lookup) ์์กด์ฑ ๊ฒ์
: POJO(Plain Old Java Object)
: AOP(Aspect Oriented Programming) ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
: MVC (Model2)
Installation Option ์ ๋ถ ์ฒดํฌ & ์ค์น !
New Project ์์ฑ ์
โ๏ธ Maven Build
โ๏ธ JDK 11 ๋ฒ์
โ๏ธ Advanced Settings - Group Id
โ๏ธ pom.xml
โก๏ธ dependencies ์์ฑ (properties ๋ฐ๋ก ํ์์ ์์ฑํจ)
ย ย ย : lombok ์ด๋ผ๊ณ ๋ง ์น๋ฉด ์ธํ
๋ฆฌ์ ์ด์์ ์๋์ผ๋ก ๊ฐ์ ธ์ด
ย ย ย ( "org.prijectlombok: lombok" ๊ฐ์ ธ์จ๋ค )
ย ย ย ์์ฑ ํ ctrl + shift + O ๋ก Maven Updateโ
๐ฉ pom.xml (๋ฉ์ด๋ธ ์ค์ ํ์ผ)
<project> ํ๋ก์ ํธ ์ ๋ณด
modelVersion
groupId
artifactId
version
packaging
properties โญ java.version 11 ํ์ธ
dependencies(์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ณด)
build
repositories
pluginRepositories
distributionManagement
</project>
server:
port: 8000
spring:
thymeleaf:
prefix: "classpath:templates/"
suffix: .html
๋ฉ์ด๋ธ ๋ ํฌ์งํ ๋ฆฌ ์์น โก๏ธ ์ฌ์ฉ์ > users > .m2 > repository ( C:/Users/User/.m2/repository )
โ Maven Build ์ค๋ฅ ์ ์ง์ฐ๊ณ ์๋ก ๋ค์ด๋ฐ์๋ณด๊ธฐ
์๋ฐ ํ๋ซํผ์ ์ํ ์คํ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์ ์ํฌ
Java EE (Enterprise Edition)
(์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ JSP, Servlet, JDBC, JNDI, JTA, EJB ๋ฑ์ ํฌํจํ ํ๋ซํผ)
๊ฐ ๋๋ฌด ๋ณต์กํ๊ณ ๋น์ฉ์ด ๋น์ธ์ ๋์ค๊ฒ ๋จ.
Spring Framework์์ ์์์ ๊ฐ์ฒด ๊ฒฐ์ ๋ฐ ์์ฑ -> ์์กด์ฑ ๊ฐ์ฒด ์์ฑ -> ๊ฐ์ฑ ๋ด์ ๋ฉ์๋ ํธ์ถ -> ๊ฐ์ฒด์ ์๋ฉธ ๋ฑ์ ํด ์ฃผ๊ฒ ๋จ.
โก๏ธ Spring Framework๋ 'IoC (Inversion of Control), DI (Dependency Injection), DL (Dependency Lookup)' ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
๐ฆ ํ๋ ์ ์ํฌ (Framework)
ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ์ ์ธ ๋ผ๋๋ ํ์ ์๋ฏธํจ. ํ์ํ ๋ถ๋ถ๋ง ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ค.
์ํํธ์จ์ด์ ๊ตฌ์ฒด์ ์ธ ๋ถ๋ถ์ ์ค๊ณ, ๊ตฌํ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํ์ ํ๋ ํํ๋ก ํด๋์ค๋ค์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค (Ralph Johnson)
๐ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์ ์ํฌ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๋ณด์ ๋ชจ์์ผ๋ก ์ผ์ข
์ ๋ถํ๊ณผ ๊ฐ์ ๋ด ์ฝ๋๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํจ. โ ์ ์ด๊ถ์ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ง.
ํ๋ ์ ์ํฌ๋ ๊ธฐ๋ณธ์ ์ธ ํ์ด๋ ๋ผ๋ ๊ฐ์ ๊ฒ์ผ๋ก, ํ๋ ์ ์ํฌ๊ฐ ๋ด ์ฝ๋๋ฅผ ์คํํ๋ค.
๐ฆ IoC (Inversion of Control) ์ ์ด ์ญ์ , ์ ์ด ๋ฐ์
์ฝ๋์ ํ๋ฆ ์ ์ด(๊ฐ์ฒด ์ ์ด๊ถ)๋ฅผ ํ๋ก๊ทธ๋จ์ด ์๋๋ผ ๋ค๋ฅธ ๊ฐ์ฒด์์ ๊ฐ์ ธ๊ฐ๋ ๋์์ธ ํจํด
๊ธฐ์กด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์์๋ ์์ฑ๋ ํ๋ก๊ทธ๋จ ์ฝ๋์์ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ฌ ๋ฉ์๋๋ฅผ ํธ์ถํด ์ฌ์ฉํ๊ฒ ๋จ.
์ ์ด ๋ฐ์ ์์๋ ์ ์ด ๊ถํ์ ์์๋ฐ์ ํน๋ณํ ๋ค๋ฅธ ๊ฐ์ฒด(IoC ์ปจํ
์ด๋ -> ์คํ๋ง์์๋ Spring ์ปจํ
์ด๋)๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฉ์๋๋ฅผ ํธ์ถํ ํ ์๋ฉธ์ํจ๋ค.
์ฆ, ์คํ๋ง ํ๋ ์ ์ํฌ์์ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ์คํํ๊ฒ ๋๋ค.
โ๏ธ ์คํ๋ง์์ IoC๋ DI ์ DL๋ก ๊ตฌํ๋๋ค.
๐ฆ DI (Dependency Injection) ์์กด์ฑ ์ฃผ์
๊ฐ์ฒด์ ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ค์ ํด์ฃผ๋ ๊ฒ
ย ย ย ์์กด ๊ด๊ณ๋? ย ย ย B๊ฐ ๋ณํ๋ฉด A๊ฐ ๋ณํ๋ค.
ย ย ย ์์กด์ฑ ์ฃผ์
? ย ย ย B ๊ฐ์ฒด๊ฐ ์์กดํ๋ A ๊ฐ์ฒด๋ฅผ C ๊ฐ์ฒด์์ ์ ์ธํ์ฌ A ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ ์ฌ์ฉ
Spring์์ DI๋ Layer ์ฌ์ด, Class ์ฌ์ด์์ ํ์ํ ์์กด๊ด๊ณ๊ฐ ์๋ค๋ฉด ์ด๋ฅผ Spring Bean ์ค์ ํ์ผ์ ์ด์ฉํด ์ปจํ
์ด๋๊ฐ ๊ฐ์ฒด ๋ ํผ๋ฐ์ค๋ฅผ ์ฃผ์
๋ฐ์ ์คํ์ ๋์ ์ผ๋ก ์ฐ๊ฒฐ(์์กด ๊ด๊ณ๋ฅผ ์์ฑ)์์ผ ์ฃผ๋ ๊ฒ์.
๐ ์์
๋ฒ๊ฑฐ ์ํ B -> ๋ฒ๊ฑฐ ์๋ฆฌ๋ฒ A ์ ์์กดํ๋ค.
๋ฒ๊ฑฐ ์ฌ์ฅ C ์ด ๋ฒ๊ฑฐ ์๋ฆฌ๋ฒ A ์ ์ง์ํ๋ค.
๐ฆ DL (Dependency Lookup) ์์กด์ฑ ๊ฒ์
IoC ์ปจํ
์ด๋๋ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ ์ฅ์๋ฅผ ๊ฐ์ง (Bean Factory)
์์กด์ฑ์ ๊ฐ๋ ๊ฐ์ฒด, ๋น(Bean)์ ์ ๊ทผํ๊ธฐ ์ํด
์ปจํ
์ด๋์์ ์ ๊ณตํ๋ API ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉํ ๋น์ ๊ฒ์(Lookup) ํจ
Java EE ๋ฑ์ ์ค๋ ํ๋ ์์ํฌ๋ค์ ์ฌ์ฉํ์ง ์์ ํน์ ๊ธฐ์ ์ ์ข ์๋์ง ์๋ ์์ํ๊ฒ ์๋ฐ๋ก ์ด๋ฃจ์ด์ง ์๋ฐ ์ค๋ธ์ ํธ
์คํ๋ง ํ๋ ์์ํฌ๋ POJO ๊ธฐ๋ฐ์ ํ๋ ์ ์ํฌ์.
์๋ฐ์ ๋จ์ํ Object๋ฅผ ์ฌ์ฉํด์ ์ดํ๋ฆฌ์ผ์ด์
์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ค.
ํ๋ก๊ทธ๋จ ๋ก์ง์ ํต์ฌ ๋ก์ง(ํต์ฌ ๊ด์ฌ)๊ณผ ๋ถ๊ฐ์ ์ธ ๋ก์ง(ํก๋จ ๊ด์ฌ์ฌ)์ผ๋ก ๋๋๋ค.
ํต์ฌ ๋ก์ง์์ ๋ฐ๋ณต๋๋ ์ฌ์ฉ๋๋ ๋ก์ง์ ํฉ์ด์ง ๊ด์ฌ์ฌ, ํก๋จ ๊ด์ฌ์ฌ(Cross-cutting Concerns)๋ก ๋๋ค.
ํฉ์ด์ง ๊ด์ฌ์ฌ, ํต์ฌ ์กฐ์ง ๋ด์์ ๋ฐ๋ณต๋์ด ์ฌ์ฉ๋์ด์ง๋ ๋ถ๊ฐ์ ์ธ ๋ก์ง์ Aspect(๊ณตํต ๋ก์ง๊ณผ ๊ทธ ๋ก์ง์ ์ ์ฉํ ๋์์ ์ง์ ํด๋ ๊ฐ์ฒด)๋ก ๋ชจ๋ํ ํ์ฌ ํต์ฌ ๋ก์ง๋ค์ด ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํ ๊ฐ๋
์ด AOP์ด๋ค.
์คํ๋ง์์๋ ์คํ๋ง ๋น์ AOP๋ฅผ ์ ์ฉํ ์ ์๋๋ก ์ง์ํ๊ณ ์๋ค.
์คํ๋ง์ MVC Model2๋ฅผ ๋ฐ๋ฅธ๋ค.
VIEW / CONTROLLER / MODEL( : Service + DAO)
MVC์ ๋์ ๊ณผ์
1๏ธโฃ CONTROLLERย
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ (Request)
CONTROLLER( SERVLET )๊ฐ ์๋ตํ์ฌ Business Service Object์ ํธ์ถํจ.
SERVLET โ URL๊ณผ ๋งคํ๋์ด VIEW (JSP) ๋ฅผ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ๋์์ฃผ๋ Servlet 1, ํด๋ผ์ด์ธํธ์ ์๋ต๋(๋ธ๋ผ์ฐ์ ์ ๋์์ง) VIEW (JSP) ๋ก๋ถํฐ Request์ ๋ฐ์์ ๋ Request์ ๋งคํ๋์ด MODEL๊ณผ ์ํธ์์ฉ ํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ Servlet 2
URL ์ ์ โ Servlet 1 โ View ํ๋ฉด์์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ โ Servlet 2
2๏ธโฃ MODELย
Business Service Object( ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด ) ๊ฐ ํธ์ถ๋จ.
Business Service Object๊ฐ Database Access Object( DAO, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์กฐ์ํ๋ ๊ฐ์ฒด )๋ฅผ ํธ์ถํ๋ค.
DAO๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒฐ๊ณผ(Result) ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค.
DAO๊ฐ ๊ฐ์ ธ์จ Result ๊ฐ์ฒด๋ฅผ Business Service Object์ ๋ฐํํ๋ค.
Business Service Object๊ฐ ํธ์ถํ Controller Servlet์ Result ๊ฐ์ฒด๋ฅผ ๋ณด๋ด ์๋ต (Response)ํ๋ค.
3๏ธโฃ VIEWย
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ Servlet์ด ์๋ต๋ฐ์ Result ๊ฐ์ฒด๋ฅผ View (JSP)์ ์ ๋ฌ(forward)ํ๋ค. (โ โ์ฌ๊ธฐ์ View๊ฐ Result ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ ๊ฒ์)
URL ์ฃผ์์ ๋งคํ๋์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ฐ๋ Servlet์ด View๋ฅผ ๋์ View๊ฐ ์ฐธ์กฐํ๊ณ ์๋ Result ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ถ๋ ฅํ๊ฒ ๋๋ค.
์ฐธ๊ณ ๐ง
- Maven ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
- [Spring] Spring Framework๋? ๊ธฐ๋ณธ ๊ฐ๋
ํต์ฌ ์ ๋ฆฌ
- AOP
- ์คํ๋ง AOP (Spring AOP) ์ด์ ๋ฆฌ : ๊ฐ๋
, ํ๋ก์ ๊ธฐ๋ฐ AOP, @AOP
- MVC
๐ข ์๊ฐ ๐
์น๊ตฌ๊ฐ ์ค๋์
์ ๋ณด๋๋ฐ ๋งค๋์ ์ฒ๋ผ ๋์์ฃผ๊ณ ์ด๋ฐ ... ์ฝ์น ์ข ์ํ๋ ๋ฏ
์๋ฒฝ ์ฐ์ต๋ ๋ฐ๋ผ๊ฐ์คฌ๋ค
์๊ธ์ค์ผ๋๋๊ฑฐ ์๋๊ต