๐พ [CS] MVC ํจํด.
1๏ธโฃ MVC ํจํด.
- MVC ํจํด์ ๋ชจ๋ธ(Model), ๋ทฐ(View), ์ปจํธ๋กค๋ฌ(Controller)๋ก ์ด๋ฃจ์ด์ง ๋์์ธ ํจํด์ ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๋ฅผ ์ธ ๊ฐ์ง ์ญํ ๋ก ๊ตฌ๋ถํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค์์ ๊ฐ๊ฐ์ ๊ตฌ์ฑ ์์์๋ง ์ง์คํด์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ด ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ง์๋ก ๋ชจ๋ธ๊ณผ ๋ทฐ์ ๊ด๊ณ๊ฐ ๋ณต์กํด์ง๋ ๋จ์ ์ด ์์ต๋๋ค.
Model(๋ชจ๋ธ)
- ๋ชจ๋ธ(model)์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์์, ๋ณ์ ๋ฑ์ ๋ปํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด ์ฌ๊ฐํ ๋ชจ์์ ๋ฐ์ค ์์ ๊ธ์๊ฐ ๋ค์ด ์๋ค๋ฉด ๊ทธ ์ฌ๊ฐํ ๋ชจ์์ ๋ฐ์ค ์์น ์ ๋ณด, ๊ธ์ ๋ด์ฉ, ๊ธ์ ์์น, ๊ธ์ ํฌ๋งท(utf-8 ๋ฑ)์ ๊ดํ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
- ๋ทฐ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ๋ฉด ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด ๋ชจ๋ธ์ ์์ฑํ๊ฑฐ๋ ๊ฐฑ์ ํฉ๋๋ค.
View(๋ทฐ)
- ๋ทฐ(View)๋ Inputbox, checkbox, textarea ๋ฑ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์๋ฅผ ๋ํ๋ ๋๋ค.
- ์ฆ, ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ํ๋ฉด์ ๋ปํฉ๋๋ค.
- ๋ชจ๋ธ์ด ๊ฐ์ง๊ณ ์๋ ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ์ง ์์์ผ ํ๋ฉฐ ๋จ์ํ ์ฌ๊ฐํ ๋ชจ์ ๋ฑ ํ๋ฉด์ ํ์ํ๋ ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
- ๋ํ, ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ฉด ์ปจํธ๋กค๋ฌ์ ์ด๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
Controller(์ปจํธ๋กค๋ฌ)
- ์ปจํธ๋กค๋ฌ(Controller)๋ ํ๋ ์ด์์ ๋ชจ๋ธ๊ณผ ํ๋ ์ด์์ ๋ทฐ๋ฅผ ์๋ ๋ค๋ฆฌ ์ญํ ์ ํ๋ฉฐ ์ด๋ฒคํธ ๋ฑ ๋ฉ์ธ ๋ก์ง์ ๋ด๋นํฉ๋๋ค.
- ๋ํ, ๋ชจ๋ธ๊ณผ ๋ทฐ์ ์๋ช ์ฃผ๊ธฐ๋ ๊ด๋ฆฌํ๋ฉฐ, ๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ณ๊ฒฝ ํต์ง๋ฅผ ๋ฐ์ผ๋ฉด ์ด๋ฅผ ํด์ํ์ฌ ๊ฐ๊ฐ์ ๊ตฌ์ฑ ์์์ ํด๋น ๋ด์ฉ์ ๋ํด ์๋ ค์ค๋๋ค.
2๏ธโฃ MVC ํจํด์ ์ ๋ฆฌ์กํธ.
- MVC ํจํด์ ์ด์ฉํ ๋ํ์ ์ธ ํ๋ ์์ํฌ๋ก๋ ์๋ฐ ํ๋ซํผ์ ์ํ ์คํ ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ธ ์คํ๋ง(Spring)์ด ์์ต๋๋ค.
- Spring์ WEB MVC๋ ์น ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ค์ ๋ง์ด ์ ๊ณตํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด
@RequestParam
,@RequestHaader
,@PathVariable
๋ฑ์ ์ ๋ํ ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์์ ์์ฒญ ๊ฐ๋ค์ ์ฝ๊ฒ ๋ถ์ํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์์ ์ด๋ ํ ์์ฒญ์ด ์ ํจํ ์์ฒญ์ธ์ง ์ฝ๊ฒ ๊ฑฐ๋ฅผ ์ ์์ต๋๋ค. - ์๋ฅผ ๋ค์ด ์ซ์๋ฅผ ์ ๋ ฅํด์ผ ํ๋๋ฐ ๋ฌธ์๋ฅผ ์ ๋ ฅํ๋ ์ฌ๋ก ๊ฐ์ ๊ฒ ๋ง์ด์ฃ .
- ๋ํ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋, ํ ์คํธ, ์ฝ๊ฒ ๋ฆฌ๋๋ ์ ํ ์ ์๊ฒ ํ๋ ๋ฑ์ ์ฅ์ ์ด ์์ต๋๋ค.
3๏ธโฃ ์๋ฐ์์์ MVC ํจํด.
- ์๋ฐ์์์ MVC ํจํด(Model-View-Contorller) ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์ ๋๋ค.
- ์ด ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ธ(Model), ๋ทฐ(View), ์ปจํธ๋กค๋ฌ(Controller)๋ก ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ด๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
MVC ํจํด์ ๊ตฌ์ฑ ์์.
1. Model(๋ชจ๋ธ)
- ์ญํ : ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง ์ ์ฒ๋ฆฌํฉ๋๋ค.
-
๊ธฐ๋ฅ :
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ.
- ๋ฐ์ดํฐ ์ ์ฅ, ์์ , ์ญ์ ์ ๊ฐ์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ.
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ์ ๊ณต.
- ์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฐํฐ, DAO, ์๋น์ค ํด๋์ค.
-
์์ ์ฝ๋ :
public class User { private String username; private String email; // Getter and Setter }
2. View(๋ทฐ)
- ์ญํ : ์ฌ์ฉ์๊ฐ ๋ณด๋ UI(์ฌ์ฉ์ ์ธํฐํ์ด์ค) ๋ฅผ ๋ด๋นํฉ๋๋ค. ๋ชจ๋ธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋๋ค.
-
๊ธฐ๋ฅ :
- HTML, JSP, Thymeleaf ๊ฐ์ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง
- ๋ฐ์ดํฐ ์ ๋ ฅ, ์ถ๋ ฅ ๋ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ.
- ์ : JSP, Thymeleaf, HTML ํ์ผ.
-
์์์ฝ๋(Thymeleaf)
```java
User List
#### 3. Controller(์ปจํธ๋กค๋ฌ)
- **์ญํ :** ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์์ ๊ฐ์ ธ์์ ๋ทฐ์ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- **๊ธฐ๋ฅ :**
- ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ๊ณ , ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์ ํ ๋ก์ง(๋ชจ๋ธ)์ผ๋ก ์ ๋ฌ
- ๋ชจ๋ธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ ์ ํ ๋ทฐ๋ก ๋ฐํ.
- HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์ ๋ฐ์.
- **์ :** Spring MVC์ `@Controller` ํด๋์ค.
- **์์์ฝ๋ (Spring Boot)**
```java
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public String listUsers(Model model) {
List<User> users = userService.getAllUsers();
model.addAttribute("users", users);
return "userList"; // userList.html๋ก ๋ฐํ
}
}
MVC ํจํด์ ํ๋ฆ.
-
1. ์ฌ์ฉ์์ ์์ฒญ
- ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ URL์ ์ ๋ ฅํ๊ฑฐ๋ ๋ฒํผ์ ํด๋ฆญํ๋ ๋ฑ์ ๋์์ ํตํด ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ์ด ์ ๋ฌ๋ฉ๋๋ค.
-
2. ์ปจํธ๋กค๋ฌ์ ์ฒ๋ฆฌ
- ์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋ธ์ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ฐ์ ธ์ต๋๋ค.
-
3. ๋ชจ๋ธ์ ์ฒ๋ฆฌ
- ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ , ์์ ํ๊ฑฐ๋ ์ถ๊ฐ/์ญ์ ํ ํ, ์ปจํธ๋กค๋ฌ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
4. ๋ทฐ์ ๋ฐ์ดํฐ ์ ๋ฌ
- ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ๋ก ์ ๋ฌํ๊ณ , ํด๋น ๋ทฐ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋๋ก ์๋ต์ ์์ฑํฉ๋๋ค.
-
5. ๊ฒฐ๊ณผ ๋ฐํ
- ์ต์ข ์ ์ผ๋ก ์ฌ์ฉ์๋ ๋ธ๋ผ์ฐ์ ์์ ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์๋ฐ์์ MVC ํจํด์ ์ฌ์ฉํ๋ ์.
- ์๋ฐ์์๋ Spring MVC ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ MVC ํจํด์ ๊ตฌํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
- Spring MVC๋ ์ปจํธ๋กค๋ฌ, ๋ชจ๋ธ, ๋ทฐ์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ค๋๋ค.
Spring MVC์ ๊ธฐ๋ณธ ํ๋ฆ.
-
1. DispatcherServler
- ๋ชจ๋ ์์ฒญ์ ๋จผ์
DispatcherServlet
์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. - ์ด๊ฒ์ Front Controller๋ก์, ์์ฒญ์ ์ ์ ํ ์ปจํธ๋กค๋ฌ๋ก ๋ผ์ฐํ ํฉ๋๋ค.
- ๋ชจ๋ ์์ฒญ์ ๋จผ์
-
2. Controller
-
DispatcherServler
์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์ ํ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
-
-
3. Model
- ์ปจํธ๋กค๋ฌ๋ ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋ธ๊ณผ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ฒ๋ฆฌํฉ๋๋ค.
-
4. View
- ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์์ ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ์ ๋ฌํฉ๋๋ค.
-
5. View Resolver
- ๋ทฐ ๋ฆฌ์กธ๋ฒ(View Resolver)๊ฐ HTML, JSP, Thymeleaf ํ ํ๋ฆฟ ๋ฑ๊ณผ ๊ฐ์ ๋ทฐ๋ฅผ ๋ ๋๋งํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ ๋๋ค.
Spring MVC ์ฝ๋ ์์.
-
1. Controller
@Controller public class ProductController { @Autowired private ProductService productService; @GetMapping("/products") public String getAllProducts(Model model) { List<Product> products = productService.getAllProducts(); model.addAttribute("products", products); return "productList"; // productList.html๋ก ๋ฐํ } }
-
2. Model(Service & Entity)
```java
@Service
public class ProductService {@Autowired
private ProductRepository productRepository;public List
getAllProducts() { return productRepository.findAll(); } }
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
// Getter and Setters } ```
-
3. View(Thymeleaf ํ
ํ๋ฆฟ)
```html
<!DOCTYPE html>
Product List
- Product Name - Price
```
MVC ํจํด์ ์ฅ์ .
-
1. ์ ์ง๋ณด์์ฑ ํฅ์.
- ๋น์ฆ๋์ค ๋ก์ง(Model)๊ณผ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(View)๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ ์ง๋ณด์ํ ์ ์์ต๋๋ค.
- UI๋ฅผ ์์ ํด๋ ๋น์ฆ๋์ค ๋ก์ง์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
-
2. ํ์ฅ์ฑ.
- ๊ฐ ๋ถ๋ถ(Model, View, Controller)์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์์ด ํ์ฅ์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค.
-
3. ํ
์คํธ ์ฉ์ด์ฑ.
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด, ๊ฐ๊ฐ์ ๋ถ๋ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์ต๋๋ค.
4๏ธโฃ ๊ฒฐ๋ก .
- MVC ํจํด์ ์๋ฐ ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ํ ๋์์ธ ํจํด์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ธ, ๋ทฐ, ์ปจํธ๋กค๋ฌ๋ก ๋ถ๋ฆฌํ์ฌ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ์ ์งํ๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
- Spring MVC๋ ์ด๋ฅผ ์๋ฐ์์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ๋ํ์ ์ธ ํ๋ ์์ํฌ๋ก, ๋ง์ ์๋ฐ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.