๐ฅ Controller, Service, Repository๋ฅผ ์์๋ณด๊ธฐ ์ ์ 3๊ฐ์ง ์์๋ค์ด ์ํ MVC ํจํด์ด ์ดํด๋์ด์ผ ํ๋ค(์ ํํ๋ Model)
MVCํจํด
โถ MVCํจํด์ด๋?
- MVC๋ Model, View, Controller์ ์ฝ์์ด๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ , ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ฅผ ์ธ ๊ฐ์ง ์ญํ ๋ก ๊ตฌ๋ถ
- ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด URL์ ํธ์ถํ๋ฉด Controller์์ ์์ฒญ์ ๋ฐ๊ณ ๋ก์ง์ด๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉด Model์์ ํธ์ถํ์ฌ ๋ชจ๋ธ์ ๊ตฌ์ฑ๋ ๋น์ฆ๋์ค ๋ก์ง(Service)์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Repository)์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ค์ Controller -> VIEW๋ก ๋ณด๋ด๋ฉฐ ์ต์ข ์ ์ผ๋ก ์ ์ ์๊ฒ ๋ฐ์ดํฐ์ ๋ก์ง์ด ์ ์ฉ๋ ํ๋ฉด์ ์ ๊ณต.
โถ MVCํจํด ์ฌ์ฉ์ด์
- View์ Controller๋ฅผ ๋ชจ๋ ๊ตฌํํ ๊ตฌ์กฐ์ธ Model 1 ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ฉด ๊ตฌ์กฐ์ ํ๋ฆ์ด ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ด ์ฝ๊ณ ์ค์ํ ํ๋ก์ ํธ์ ์ ํฉํ์ง๋ง ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ , view์ Controller๊ฐ ํฉ์ณ์ ธ ์์ด ๋ฐฑ์๋์ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์์ ํ์ ์ ์ด๋ ค์์ด ์์ด controller์ view๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉ!
- ์ญํ ์ ๋ฐ๋ฅธ ๋ถ๋ฆฌ๋ก ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ, ์ ์ฐ์ฑ์ด ์ฆ๊ฐํ๊ณ ,์ฝ๋์ ์ค๋ณต์ด ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
โถ MVCํจํด ํน์ง
- ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ฒ๋ฆฌ ๋ถ๋ถ๊ณผ ์๋ต์ฒ๋ฆฌ ๋ถ๋ถ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๊ฐ๋ฅ
- ๋ฐฑ์๋ ํ๋ก ํธ์๋ ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅ
Controller
โถ Controller๋?
- Spring 4๊ณ์ธต ๊ตฌ์กฐ์์ Presentation Layer(tier)๋ฅผ ๋ด๋น
โถ Controller์ ์ญํ
- ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ ํ ์ง์ ๋ ๋ทฐ์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋ ์ญํ
- ์ฌ์ฉ์์ ์์ฒญ์ ์ ๋ฌ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ Service ํธ์ถ
- Service์์ ์ฒ๋ฆฌํ ๋ด์ฉ์ ๋ค์ Controller ๋ฐ์ client์๊ฒ ๋๊ฒจ์ค๋ค.
โถ Controller ์์์ฝ๋
@RestController
public class OrderController {
private final OrderService service;
private final OrderRepository repository;
@GetMapping("/order")
public List<Order> getOrders() {
List<Order> orders = service.findOrders();
return orders;
}
}
Service
โถ Service๋?
- Spring 4๊ณ์ธต ๊ตฌ์กฐ์์ Application Layer(์์ฉ ๊ณ์ธต) ๋ด๋นํ๋ฉฐ, ์๋น์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ํ๋ค.
โถ Service์ ์ญํ
- Controller์ ์ํด ํธ์ถ๋์ด ์ค์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํธ๋์ญ์ ์ฒ๋ฆฌ
- ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ฒ๋ฆฌ(ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ๋น๋ํด์ง)
- DB ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ Repository ํธ์ถ
โถ Service ์์์ฝ๋
public List<Order> findOrders(){
return (List<Order>) orderRepository.findAll();
}
Repository
โถ Repository๋?
- Spring 4๊ณ์ธต ๊ตฌ์กฐ์์ ์ธํ๋ผ ๊ณ์ธต์ ๋ด๋นํ๋ฉฐ, ์ฃผ๋ก ์ธ๋ถ์์ ํต์ ์ ๋ด๋นํ๋ค.
โถ Repository์ ์ญํ
- Service์ ์ํด ํธ์ถ๋์ด DB์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ ๋ฐํ
- Entity์ ์ํด ์์ฑ๋ DB์ ์ ๊ทผํ๋ ๋ฉ์๋๋ค์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ๊ด๋ฆฌํ๊ณ CRUD ์์ ์ ์ฒ๋ฆฌํ๋ค.
โถ Repository ์์์ฝ๋
public interface OrderRepository extends CrudRepository<Order, Long> {
}