์ฒ์์ ๋์ถฉ ํ๋ก์ ํธ๋ฅผ ์์ํด๋ณด๋ คํ์ง๋ง,
์ด๋ด์๊ฐ! ์๋ ๊ฒ์ด ๋ฏธ์ฝํ๋ ์์ํ ์ ์์๋ค.
๊ทธ๋์ ๊ฐ์ฅ ๊ธฐ์ด์ ์ผ๋ก ์์์ผํ๋ ๊ฐ๋ ์ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฆฌํด๋ณผ๊น ํ๋ค.
๋๋ฅ, Spring MVC๋?
์๋ง ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ๋ฅผ ์ค๋นํ๊ฑฐ๋, IT๊ด๋ จ ์ ๊ณต์๋ผ๋ฉด ํ ๋ฒ์ ๋ค์ด๋ดค์ MVC.
์ด๋ฒ ๊ธฐํ์ ์์ธํ ์์๋ณด์.
๐ชฝ
"ํ๋ฆฐ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค."
[ Hello World๋ฅผ ์ถ๋ ฅํ๊ธฐ ]
1. MVC
- Model - View - Controller๋ก ๊ตฌ์ฑ๋์ด์๋ค.
- Model, View, Controller๋ ๋ ๋ฆฝ์ ์ผ๋ก ์์ง์ธ๋ค. (๊ฐ์ ๋งก์ ๋ถ์ผ๋ง ํด๊ฒฐํ๋ค)
- MVC ์ฌ์ฉ์, ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
- MVC ์ฌ์ฉ์, ์ค๋ณต์ฝ๋ ์ ๊ฑฐ๊ฐ ์ฝ๊ณ ์ ์ง๋ณด์์ ์ข๋ค.
- MVC ์ฌ์ฉ์, ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ์ฆ๊ฐํ๋ค.
(1) View
- ์ฌ์ฉ์๊ฐ ๋ณด๋ ํ๋ฉด์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ์์๋ฅผ ๋ค์ด๋ณด์, ์ฌ์ฉ์๊ฐ ์น ๊ฒ์์ฐฝ์ [apple]์ด๋ผ๊ณ ๊ฒ์ํ๊ธธ ์์ฒญํ๋ค.
(2) Controller
- View์ Model์ ์ฐ๊ฒฐํด์ฃผ๋ ์ค๊ฐ์์ ์ํธ์์ฉ ์ญํ ์ ํด์ค๋ค.
- ์ฌ์ฉ์์ ์์ฒญ์ Controller๊ฐ ๋ฐ์๋ค. (DispatcherServlet๋ผ๋ Front Controller๊ฐ ๋ฐ์)
- Controller๋ ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด [apple]์ด๋ ๋จ์ด๋ฅผ ๊ฐ์ง๊ณ ์์ Model์๊ฒ ์ ๋ฌํ๋ค.
(3) Model
- ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ค.
- ์ด๋ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ๋๋ ค์ฃผ๋ ์์ ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ Model์ด๋ผ ํ๋ค.
- Controller์๊ฒ ์จ ์์ฒญ์ ์ ๋ฐ์๋ค.
- Model์ [apple]์ด๋ ๋จ์ด ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ Controller์๊ฒ ๋ค์ ์ ๋ฌํ๋ค.
- Controller๋ ๋ฐ์ ์ ๋ณด๋ฅผ ๋ค์ View์๊ฒ ๋ณด๋ด๊ณ View๋ ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
2. Spring MVC ๊ตฌ์ฑ์์์ ์์
1๋ฒ
- ์ฌ์ฉ์์๊ฒ ์์ฒญ(Requeest)์ด ๋ค์ด์๋ค.
- ์์ฒญ์ ํน์ URL๊ณผ ํจ๊ป ๋ค์ด์ค๊ฒ ๋๋๋ฐ GET, POST ๋ฑ HTTP ๋ฉ์๋๊ฐ ํจ๊ป ์ ๋ฌ๋๋ค.
2๋ฒ•3๋ฒ
- ์์ฒญ์ด ๋ค์ด์ค๋ฉด Front Controller์ธ DispatcherServlet์ด ์์ฒญ์ ๋ฐ๊ฒ ๋๋ค.
- DispatcherServlet์ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ Controller๋ฅผ ์ฐพ๊ธฐ ์ํด HandlerMapping์ ์ด์ฉํ๋ค.
- ๊ทธ๋ ๊ฒ HandlerMapping์ ๋ค์ด์จ ์์ฒญ ๊ฒฝ๋ก์ HTTP ๋ฉ์๋์ ๋ฐ๋ผ ์ ์ ํ Controller๋ฅผ ์ ํด ๋ฐํํ๋ค.
4๋ฒ•5๋ฒ
- HadlerMapping์ด ์ฐพ์ Controller๋ ์์ฒญ์ ์ค์ ๋ก ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ค.
- Controller๋ ๋น์ฆ๋์ค ๋ก์ง(์์๋ก ํ์๊ฐ์ ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ผํ๋ชฐ์์ ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ)์ ์คํํ๊ณ ๊ทธ์ ํ์ํ ๋ฐ์ดํฐ ์์ฑ ํน์ DB์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ๋ค.
- ์ฝ๊ฒ ๋งํด View๋ก ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ ๊ฒ์ด๊ณ , Model And View๊ฐ ๊ฒฐ๊ณผ์ ๋ด๊ฒจ DispatcherServlet์ ๋ฐํํ๋ค.
6๋ฒ•7๋ฒ
- ๋ฐํ๋ ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ ํ๊ฒ ๋ณด์ฌ์ค View๋ฅผ ๊ณ ๋ฅผ ๊ฒ์ด๋ค.
- View Resolver๋ Controller๊ฐ ๋ฐํํ View ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ View ํ์ผ์ ์ ๋ฌํ๋ค.
8๋ฒ
- View์์ View Rendering์ด ์ผ์ด๋๋ค.
- View Rendering์ ํ๋ ์ ํ ์ด์ ๋ก์ง์ ํฌํจํ๊ณ ์๋ค.
- ํ๋ ์ ํ ์ด์ ๋ก์ง์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์นํ์ด์ง๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
10๋ฒ
- View์์ Rendering๋ ๊ฒฐ๊ณผ๋ DispatcherServlet์ ๋ฐํ๋๋ค.
- ์ฌ์ฉ์๋ ์์ ์ด ์์ฒญํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฒ๋๋ค.
3. Spring MVC ๋ฅผ ์ฌ์ฉํ๋ ์ด์
(1) DispathcerServlet
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ MVC๋ DispatcherServlet๊ฐ ์๋ค.
- ๊ทธ๋ ๊ธฐ์ Controller๊ฐ ์์ฒญ์ ๋ฐ๊ณ , ์ง์ ์ฒ๋ฆฌ๋ ํ๋ค.
- DispatcherServlet์ด ์๊ธฐ์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ค๋ค.
(2) @๋ก ์์ํ๋ ์ด๋ ธํ ์ด์ ์ ์ ๋ฌด
- ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉ์ผ๋ก ์ธํด ์ค๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฝ๋๋ฅผ(ํน์ ๋น์ทํ ์ฝ๋) ์ค์ผ ์ ์๋ค.
- ๊ทธ๋ก์ธํด ๊ฐ๋ ์ฑ์ด ํฅ์๋๋ค.
(3) Ioc(์ ์ด์ ์ญ์ )์ DI(์์กด์ฑ์ฃผ์ )
- ๊ฐ์ฒด๊ฐ์ ์์กด์ฑ์ ํ๋ ์์ํฌ๊ฐ ์๋์ผ๋ก ์ฃผ์ ํ๊ณ ๊ด๋ฆฌํ๋ค.
4. SpringMVC๋ ์ด๋ค์์ผ๋ก ๊ตฌ์ฑ์ ํด์ผํ๋๊ฐ?
์ผํ๋ชฐ์์ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๊ฐ๋ตํ๊ฒ ์๋ก ๋ค์ด๋ณด์.
(1) Controller
์ฃผ๋ฌธ์ด ๋ค์ด์์ ๋ ์ฃผ๋ฌธ ์์ฒญ์ ์ฒ๋ฆฌํ Controller๋ฅผ ๋ง๋ค์ด์ผํ๋ค.
@RestController ํน์ Controller
@RequestMapping("/์์ฒญ์ด ๋ค์ด์จ ๊ฒฝ๋ก")
public class OrderController {
์ฃผ๋ฌธ ์์ฒญ์ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ , ํด๋นํ๋ ์๋น์ค ๊ณ์ธต์ผ๋ก ๋๊ธด๋ค.
์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ฑ๊ณต์ ์ด๋ป๊ฒ ๋ฐํํ ์ง
์ํ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ณด๋ด๋ ๋ฑ...
}
(2) Service
์ฃผ๋ฌธ ์์ฒญ์ ๋ฐ์ ์ฃผ๋ฌธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ค์ด์ผํ๋ค.
@Service
public class OrderServiceImpl implements OrderService {
์ฃผ๋ฌธ๋ด์ญ์ ์ง์ ์ฒ๋ฆฌ
์์๋ก, ์ฃผ๋ฌธ์ด ๋ค์ด์จ ์ํ์ด ์กด์ฌํ๋์ง ํ์ธํ๊ฑฐ๋
์์ฑ๋ ์ฃผ๋ฌธ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋ ๋ฑ...
๊ฒฐ๊ณผ๋ฅผ ๋๊ตฌ์๊ฒ ๋ฐํํ ์ง๊น์ง ์ ํ๋ ๊ณณ
}
(3) Repository
์ฃผ๋ฌธ ๋ด์ญ์ ์ ์ฅํ ์ ์ฅ์
public interface OrderRepository <Order, Long> {
Order๊ณผ ์ฐ๊ฒฐ๋ ์ ์ฅ์๋ก ์์
์ํ
}
(4) Entity
์ฃผ๋ฌธ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์ฃผ๋ฌธ์ด ๋ค์ด์ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ
@Entity
public class Order {
์ฃผ๋ฌธ ๊ณ ์ ์ ID๋ฅผ ๋ง๋ค๊ฑฐ๋
์ฌ๋ฌ๊ฐ์ ์ฃผ๋ฌธ์ ํ๋์ ์ํ์ผ๋ก ์ฐ๊ฒฐ๋๋๋ก ํ๊ฑฐ๋
์์ฑ์๋ฅผ ์ด์ฉํ์ฌ ์ฃผ๋ฌธ์ ์ด๊ธฐํํด์ฃผ๋ ๊ฒ ๋ฑ...
}
(5) DTO
์์ฒญ๊ณผ ์๋ต๋ง ์ฐ๊ฒฐํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ง ๋ด๋น, ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ์ฒด
public class OrderRequest {
์ฃผ๋ฌธ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๊ฐ์ฒด
์ํ ID, ์๋...
}
public class OrderResponse {
์ฃผ๋ฌธ ์๋ฃํ ๋ฐ์ดํฐ ๋ฐํ ๊ฐ์ฒด
์ฃผ๋ฌธ ID, ์ด ๊ฐ๊ฒฉ...
}
์ฌ์ค ์คํ๋ง์ ํจํด์๋ MVC๋ง ์๋ ๊ฒ์ ์๋๋ค. ๋ ๋ค์ํ ๋์์ธ ํจํด์ด ์กด์ฌํ์ง๋ง, ๋ชจ๋ธ - ๋ทฐ - ์ปจํธ๋กค๋ฌ๋ก ์ฉ๋๋ฅผ ๋๋๊ณ ์๋ก์ ์ญํ ์ ์นจ๋ฒํ์ง ์๋ ๊ฒ์ด ํฐ ์ฅ์ ์ด ๋์ด MVC๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค.
๊ณต๋ถํ๋ฉด์ ์ดํด๊ฐ ์๋๋ ๋ด์ฉ์ด ๋ง์๋ค.
์ดํดํ ๋ด์ฉ๊น์ง๋ง ๋ธ๋ก๊ทธ์ ์ ์ด๋ณด์๋ค.
์๋ ์ ์ด๋ ์ถ์ฒ์ ๋ค์ด๊ฐ ํ ๋ฒ์ฉ ์ฝ์ด๋ณธ๋ค๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ๋ค.
'๐ท Spring > ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring - GET๊ณผ POST ๊ทธ๋ฆฌ๊ณ @GetMapping (5) | 2024.10.22 |
---|---|
Spring - @Controller์ @RestController ๊ทธ๋ฆฌ๊ณ ์ํ์ฝ๋ (4) | 2024.10.18 |