๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ฐ๋ฐ์๊ฐ ํ์ํ ๋ ํธ์ถํด์ ์ฌ์ฉํ๋ ๋๊ตฌ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฆ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํ๋ฉฐ, ํน์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ฐฉ์
ํ๋ ์์ํฌ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ์ ํ๋ฆ์ ์ด๋ฏธ ์ ์ํ๊ณ ์์ผ๋ฉฐ, ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ํ ์์์ ์ฝ๋๋ฅผ ์์ฑ
- ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ํ๋ ์์ํฌ๊ฐ ์ฃผ๋ํ๊ณ ๊ฐ๋ฐ์๋ ํ์ํ ๋ถ๋ถ๋ง ๊ตฌํ
์๋ฐ ํ๋ซํผ์ ์ํ ์คํ์์ค ์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ก์ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ข ํฉ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒฝ๋ํ๋ ์๋ฃจ์

์ ์ด์ ์ญ์ (IoC) ๋ฏธ ์ฌ์ฉ
class B {
public void doSomething() {
System.out.println("B๊ฐ ์ผ์ ํ๋ค.");
}
}
class A {
private B b;
public A() {
// ํด๋์ค A ๋ด๋ถ์์ ์ง์ B ๊ฐ์ฒด๋ฅผ ์์ฑํจ
this.b = new B();
}
public void perform() {
b.doSomething();
}
}
public class NoIoCExample {
public static void main(String[] args) {
A a = new A();
a.perform();
}
}
์ ์ด์ ์ญ์ (IoC) ์ ์ฉ
class B {
public void doSomething() {
System.out.println("B๊ฐ ์ผ์ ํฉ๋๋ค.");
}
}
class A {
private B b;
// B ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ธ๋ถ์์ ์ฃผ์
๋ฐ์ (์์ฑ์ ์ฃผ์
)
public A(B b) {
this.b = b;
}
public void perform() {
b.doSomething();
}
}
public class IoCExample {
public static void main(String[] args) {
// ์ธ๋ถ(IoC ์ปจํ
์ด๋๋ ํด๋ผ์ด์ธํธ ์ฝ๋)๊ฐ B ๊ฐ์ฒด์ ์์ฑ์ ๋ด๋นํจ
B b = new B();
A a = new A(b);
a.perform();
}
}
ํ์๋ก ํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๋ฐ๋๊ฒ
public class IoCExample {
public static void main(String[] args) {
B b = new B();
A a = new A(b);
a.perform();
}
}
์๋ฐ ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ์ ๋ก์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๋ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์
HttpServletRequest : ์์ฒญ ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ํด์ค๋ค.HttpServletResponse : ์๋ต ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ ๊ณตํ๊ฒ ํด์ค๋ค.@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException{
}
}

/hello ๋ก http ์์ฒญ์ ํ๋ค.์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ http ์์ฒญ์ ๋ฐ๋๋ค.HttpServletRequest,HttpServletResponse ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค./hello ์ ๋ฐ๋ผ ๋งคํ๋ HelloServlet ์ ์ฐพ์ service() ๊ฐ ์คํ๋๋ค.doGet(),doPost()๋ฅผ ํธ์ถํ๋ค.response๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํด์ค๋ค.์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ์ปจํ ์ด๋์ ์ํด ์ฑ๊ธํค ๋ฐฉ์(๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋ฒ ์์ฑ ํ ์ฌ๋ฌ ์์ฒญ์์ ์ฌ์ฌ์ฉ)์ผ๋ก ๊ด๋ฆฌ

init() : ์๋ธ๋ฆฟ์ ์ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆด๋ ์คํ๋์ด, ์๋ธ๋ฆฟ์ ์ด๊ธฐํํ๋ฉฐ ์ฒ์์ ํ๋ฒ๋ง ์คํ service() : ์์ฒญ/์๋ต(request/response)์ ์ฒ๋ฆฌํ๋ฉฐ ์์ฒญ์ด GET์ธ์ง POST์ธ์ง ๊ตฌ๋ถํ์ฌ doGet() ๋๋ doPost() ๋ฉ์๋๋ก ๋ถ๊ธฐdestroy() : ์๋ธ๋ฆฟ ์ข
๋ฃ์์ฒญ์ด ์์๋ destroy() ๋ฉ์๋๊ฐ ์คํ์๋ฒ์์ ๋ง๋ค์ด์ง ์๋ธ๋ฆฟ์ ์ค์ค๋ก ์๋ํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ด ํ์ํ๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก ์๋ธ๋ฆฟ ์ปจํ ์ด๋
์์) Tomcat
- HTTP ํ๋กํ ์ฝ์ ํตํด ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ์ค์์ง์ค์์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller)
Dispatcher Servlet๋Servlet์ ์ผ์ข- ์คํ๋ง์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ ๋ฐ๋ฅด๊ณ ์ด๋ฅผ
DispatcherServlet์ด ๋ด๋น

โ๏ธ Front Controller
์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ ์ผ ์์์ ์๋ฒ๋ก ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ๋ ์ปจํธ๋กค๋ฌ ํจํด

ํด๋ผ์ด์ธํธ ์์ฒญ ์์
ํด๋ผ์ด์ธํธ๊ฐ ์น ์์ฒญ(HttpServletRequest)์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ทผํ๋ฉด, ์ด ์์ฒญ์ด DispatcherServlet์ผ๋ก ์ ๋ฌ
HandlerMapping์ ํตํ Controller ๋งคํ
DispatcherServlet์ ์์ฒญ URL๊ณผ ๊ธฐํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก, ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์ ํ Controller(Handler)๋ฅผ ์ฐพ๊ธฐ ์ํด HandlerMapping์ ์์ฒญ์ ์์
HandlerAdapter ์ ํ
์ฐพ์ Controller๋ฅผ ์คํํ ์ ์๋๋ก, DispatcherServlet์ ํด๋น Controller๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ HandlerAdapter๋ฅผ ๊ฒฐ์
๋น์ฆ๋์ค ๋ก์ง ์คํ ์์ฒญ
DispatcherServlet์ ์ ํ๋ HandlerAdapter์๊ฒ Controller์ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๋๋ก ์์ฒญ
Controller ์คํ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ
HandlerAdapter๋ Controller์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ํController๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ Model ๊ฐ์ฒด์ ๋ด๊ณ , ์ด๋ค View๋ฅผ ์ฌ์ฉํ ์ง ๋
ผ๋ฆฌ์ ์ธ ์ด๋ฆ์ ํจ๊ป ๋ฐํ
ViewResolver๋ฅผ ํตํ View ๊ฒฐ์
DispatcherServlet์ ๋ฐํ๋ฐ์ View ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ViewResolver์๊ฒ ์ค์ View ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ ํ๋๋ก ์์ฒญ
์ต์ข
View ๊ฐ์ฒด์ Model ์ ๋ฌ
ViewResolver๊ฐ ๋ฐํํ View ๊ฐ์ฒด์ Model ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ๋ฌํ๋ฉด์, DispatcherServlet์ ์ต์ข
ํ๋ฉด ๋ ๋๋ง์ ์๋ขฐ
๋ ๋๋ง ๋ฐ ์๋ต ๋ฐํ
์ต์ข
View๋ ์ ๋ฌ๋ฐ์ Model ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๋ ๋๋งํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ๋ฐํ
HandlerMapping
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์จ HTTP ์์ฒญ์ URL, HTTP ๋ฉ์๋(GET, POST ๋ฑ), ํค๋ ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋นํ๋ Hander(controller)๋ฅผ ์ฐพ๋ ์ญํ
RequestMappingHandlerMapping: ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ(@RequestMapping) ์ปจํธ๋กค๋ฌ๋ฅผ ์ฒ๋ฆฌBeanNameUrlHandlerMapping: ์คํ๋ง ๋น ์ด๋ฆ๊ณผ URL์ ๋งคํSimpleUrlHandlerMapping: XML ๋๋ Java ์ค์ ํ์ผ์ ๋ช ์์ ์ผ๋ก ์ ์๋ URL ํจํด๊ณผ ํธ๋ค๋ฌ๋ฅผ ๋งคํ
HandlerAdapter
- ์ค์ ๋ก
Handler๋ฅผ ์คํํAdapter๋ฅผ ์ฐพ์์Controller๋ก์ง์ ํธ์ถํ๋ ์ญํRequestMappingHandlerAdapter: ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ปจํธ๋กค๋ฌ(@RequestMapping)๋ฅผ ์ฒ๋ฆฌHttpRequestHandlerAdapter:HttpRequestHandler์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํธ๋ค๋ฌ๋ฅผ ์ฒ๋ฆฌSimpleControllerHandlerAdapter: ๊ฑฐ ์คํ์ผ์ ์ปจํธ๋กค๋ฌ(Controller ์ธํฐํ์ด์ค ๊ตฌํ)๋ฅผ ์ฒ๋ฆฌSimpleServletHandlerAdapter: ํ์ค ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค(javax.servlet.Servlet)๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์ปจํธ๋กค๋ฌ๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉ
ViewResolver
- ์คํํ
View๋ฅผ ์ฐพ๋ ์ญํController์ ๋ฐํ ๊ฐ์View์ ์ด๋ฆ,ViewResolver๊ฐ ์๋ฒ๋ด์ ์ ์ ํ ๋ทฐ ํ์ผ ์ฐพ์ ์ฒ๋ฆฌ@RestController๋ ๋ฐํ ๊ฐ์ HTTP ์๋ต ๋ณธ๋ฌธ(Response Body)์ ์ง์ ์์ฑํ๋ฉฐ, ๋ฐํ ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก JSON ํ์์ผ๋ก ์ฒ๋ฆฌ.Spring MVC๋ ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํดHttpMessageConverter๋ฅผ ์ฌ์ฉ
HttpServlet
โ
HttpServletBean
โ
FrameworkServlet
โ
DispatcherServlet
DispatcherServlet์ Java EE์ ๊ธฐ๋ณธ ์๋ธ๋ฆฟ ํด๋์ค์ธ HttpServlet์ ์ต์์ ๋ถ๋ชจ๋ก ์์๋ฐ๋๋ค.Spring MVC์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ธ๋ฆฟ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, WebApplicationContext์ ์ฐ๋
DispatcherServlet์ ์ด ํด๋์ค๋ฅผ ์ง์ ์์๋ฐ์ Spring MVC์ ํนํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐ
Spring MVC์ ํต์ฌ ํด๋์ค์ด์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ก์ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌ
์์ฒญ์ ์ ์ ํ ํธ๋ค๋ฌ(Controller)๋ก ์์ํ๊ณ , ์๋ต์ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํ
์ฐธ๊ณ :