πΎ [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λ μ΄λ₯Ό μλ°μμ μ½κ² ꡬνν μ μλ λνμ μΈ νλ μμν¬λ‘, λ§μ μλ° κ°λ°μλ€μ΄ μ¬μ©νλ λ°©μμ λλ€.