์์กด์ฑ ์ญ์ ์์น, ์ ์์ค ๋ชจ๋์ด ๊ณ ์์ค ๋ชจ๋์ ์์กดํ๊ฒ ๋๋ ๊ฒ.
๊ฒฐ์ ์๋น์ค๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋๋ฐ, A์ฌ์ ๊ฒฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค.
//๊ฒฐ์ ์๋น์ค
public class A {
public int payByCash(int amount) {
return money -amount;
}
}
public class PayAService {
private A payA;
public int payByCash(int amount) {
return payA.payByCash(amount);
}
}
์์ ์ฝ๋์ฒ๋ผ ๊ตฌํ์ ํ ๊ฒฝ์ฐ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค.
์ฌ๊ธฐ์ DIP๋ฅผ ์ ์ฉํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๊ธฐ๋ฅ์ ๊ณ ์์ค ๋ชจ๋๊ณผ ์ ์์ค ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ฉด ๋๋ค.
์ง๊ธ๊น์ง ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ์์กดํ๋ ๋ฐฉ๋ฒ์ด์ง๋ง, DIP๋ฅผ ์ ์ฉํ๊ฒ ๋๋ฉด ์ ์์ค ๋ชจ๋์ด ๊ณ ์์ค ๋ชจ๋์ ์์กดํด์ผ ํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ถ์ ํ์
(ex. ์ธํฐํ์ด์ค, ์ถ์ ํด๋์ค)์ด๋ค.
public interface PayService {
int payByCash(int amount);
}
//A์ฌ ๊ฒฐ์ ์๋น์ค
public class PayAService implements PayService {
@Override
public int payByCash(int amount) {
return money - amount;
}
}
//B์ฌ ๊ฒฐ์ ์๋น์ค
public class PayBService implements PayService {
@Override
public int payByCash(int amount) {
return money - amount;
}
}
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด PayService๋ ์๋น์ค๋ฅผ ์ ๊ณตํ ํ์ฌ๊ฐ ์ถ๊ฐ๋์ด๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํด์ผํ๋ ์ผ์ด ์์ด์ง๋ค.
์๋ธ๋ฆฟ์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ Servlet ํด๋์ค์ ๊ตฌํ ๊ท์น์ ์งํจ ์๋ฐ ํ๋ก๊ทธ๋จ์ด๋ค.
์ด์ ์ ์น ํ๋ก๊ทธ๋จ๋ค์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก ๋ง๋ค์ด์ง ํ์ด์ง๋ฅผ ๋๊ฒจ ์ฃผ์์ผ๋, ํ์ฌ๋ ๋์ ์ธ ํ์ด์ง๋ฅผ ๊ฐ๊ณตํ๊ธฐ ์ํด์ ์น ์๋ฒ๊ฐ ๋ค๋ฅธ ๊ณณ์ ๋์์ ์์ฒญํ ํ ๊ฐ๊ณต๋ ํ์ด์ง๋ฅผ ๋๊ฒจ์ฃผ๊ฒ ๋๋ค.
์ด๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํด ์ค ์ ์๋ค.
์คํ๋ง ์ปจํ
์ด๋๋ Bean ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
Bean์ ๊ด๋ฆฌํ๊ธฐ ์ํด IoC๊ฐ ์ด์ฉ๋๋ฉฐ BeanFactor ๊ฐ์ฒด๊ฐ ๋ฐ๋ก IoC ์ปจํ
์ด๋(=DI ์ปจํ
์ด๋, ์คํ๋ง ์ปจํ
์ด๋)์ ํด๋น๋๋ฉฐ, ์ด IoC ์ปจํ
์ด๋๋ฅผ ์์ํ๋ฉด์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์ด ApplicationContext์ด๋ค.
Spring MVC ์ญ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ๊ณ ์๋ ๊ฑฐ๋ํ ์๋ธ๋ฆฟ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ทธ๋์ ์๋ธ๋ฆฟ ์์ด Spring MVC๋ง ์์ผ๋ฉด ๋๋ค๊ณ ํ๋ ๊ฒ์ ๋น์ฆ๋์ค ๋ก์ง์ Spring์ ํตํด ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ด์ง, ์๋ธ๋ฆฟ์ด ํ์ ์๋ค๋ ๊ฒ์ ์๋๋ค.
์์ ์ฌ์ง์ ๋ณด๋ฉด, ์คํ๋ง ์ปจํ
์ด๋๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋ ์์ ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์คํ๋ง ์ปจํ
์ด๋๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ๋
๋ฆฝ์ ์ธ ์กด์ฌ๊ฐ ์๋๋ฉฐ, ์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ Spring Bean์ ์ ๊ทผํ๋ ค๋ฉด ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
DispatcherServlet์ ํํ ๊ณ์ธต ์ ๋ฉด์์ HTTP ํ๋กํ ์ฝ์ ํตํด ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ์ค์ ์ง์ค์์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ด๋ค.
Spring MVC์ ํต์ฌ ์์ ์ค ํ๋๋ก, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ ์์ฒญ์ ๋ฐ๋๋ค.
์ดํ ๊ณตํต ์์
์ DipatcherServlet์์ ์ฒ๋ฆฌํ๊ณ , ์ด์ธ ์์
์ ์ ์ ํ ์ธ๋ถ ์ปจํธ๋กค๋ฌ๋ก ์์ํ๋ค.
1๏ธโฃDispatcherServlet์ผ๋ก ํด๋ผ์ด์ธํธ์ ์น ์์ฒญ์ด ๋ค์ด์จ๋ค.
2๏ธโฃ์น ์์ฒญ์ Handler Mapping์ ์์ํ์ฌ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ Handler(Controller)๋ฅผ ํ์ํ๋ค.
3๏ธโฃ์ฐพ์ Handler๋ฅผ ์คํํ ์ ์๋ HandlerAdapter๋ฅผ ํ์ํ๋ค.
4๏ธโฃ์ฐพ์ Handler Adapter๋ฅผ ์ฌ์ฉํด์ Handler์ ๋ฉ์๋๋ฅผ ์คํํ๋ค.
5๏ธโฃHandler์ ๋ฐํ ๊ฐ์ Model๊ณผ View์ด๋ค.
6๏ธโฃView ์ด๋ฆ์ ViewResolver์๊ฒ ์ ๋ฌํ๊ณ , ViewResolver๋ ํด๋นํ๋ View ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
7๏ธโฃDispatcherServlet์ View์๊ฒ Model์ ์ ๋ฌํ๊ณ ํ๋ฉด ํ์๋ฅผ ์์ฒญํ๋ค.
8๏ธโฃ์ด๋, Model์ด null์ด๋ฉด View๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด View์ Model ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๋ค.
9๏ธโฃ์ต์ข
์ ์ผ๋ก DispatcherServlet์ View ๊ฒฐ๊ณผ(HttpServletResponse)๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๋ค.
์์ ์ฌ์ง์ @Controller
๊ธฐ์ค์ด๋ฉฐ, @RestController
์ ๊ฒฝ์ฐ 6๋ฒ๊ณผ 7๋ฒ ๊ณผ์ ์ด ์๋ต๋๋ค.
์ฆ, @RestController์ ViewResolver๋ฅผ ํ์ง ์๊ณ ๋ฐํ ๊ฐ์ ์๋ง๋ MessageConverter๋ฅผ ์ฐพ์ ์๋ต ๋ณธ๋ฌธ์ ์์ฑํ๋ค.
๐์ฐธ๊ณ
[Spring] Servlet, Servlet Container, Spring MVC ์ ๋ฆฌ