-
[Spring] Controller, Service, Repository 가 무엇일까?Spring 2024. 4. 20. 22:33
쉬운 이해를 위해 아래의 자료를 먼저 보는 것을 추천한다.
https://jihoon3106.tistory.com/3
https://jihoon3106.tistory.com/5
Controller란?
- MVC에서 C에 해당하며 주로 '사용자의 요청'을 처리한 후 지정된 뷰에 모델객체를 넘겨주는 역할을 하고 있다.
- 즉, ' 사용자의 요청'이 진입하는 지점이며 요청에 따라 어떤 처리를 할지 결정을 Service에 넘겨준다. 그 후 Service에서 실질적으로 처리한 내용을 View에 넘겨준다.
Controller를 왜 사용할까?
- 역할에 따라 설계를 하고 코딩을 하면 개발비용이나 유지보수비용이 대폭 줄어들기 때문에 Controller를 사용한다.
Spring에서의 Controller 사용법.
1. @Controller(Spring MVC Controller)
- 전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용한다.
- @ResponseBody 어노테이션과 같이 사용하면 RestController와 똑같은 기능을 수행할 수 있다.
@Controller public class Controllerprac { @GetMapping("/home") //home으로 Get요청이 들어오면 public String homepage() { return "home.html"; //home.html 생성 } }
2. @RestController(Spring Restful Controller) Permalink
- RestController는 Contrller에서 @ResponseBody 어노테이션이 붙은 효과를 지니게 된다.
- 주용도는 JSON/XML 형태로 '객체 데이터 반환'을 목적으로 한다. -> '등록된 전체 상품 목록 조회'
@RestController // JSON으로 데이터를 주고받음을 선언합니다. public class ProductRestController { private final ProductService productService; private final ProductRepository productRepository; // 등록된 전체 상품 목록 조회 @GetMapping("/api/products") public List<Product> getProducts() { return productRepository.findAll(); } }
사용이유
- 간결한 코드
간단한 어노테이션 설정으로 웹 요청과 응답을 처리할 수 있다. - HTTP Method 지원
각각의 메서드에 HTTP Method를 지정해서 다양한 종류의 요청을 처리할 수 있다. - RESTful 설계 원칙 준수
RESTful 웹 서비스의 설계 원칙을 더 쉽게 준수할 수 있다.
Service란?
- Client가 Request를 보낸다
- Request URL에 알맞은 Controller가 수신받는다.
- Controller는 넘어온 요청을 처리하기 위해 Service를 호출한다.
- Service는 알맞은 정보를 가공하여 Controller에게 데이터를 넘긴다.
- Controller는 Service의 결과물을 Client에게 전달해 준다.
- Service가 알맞은 정보를 가공하는 과정을 '비지니스 로직을 수행한다'라고 한다.
- Service가 '비지니스 로직을 수행'하고 데이터베이스에 접근하는 DAO를 이용해서 '결과값'을 받아온다.
사용 예시
@Service public class BoardServiceImpl implements BoardService { @Autowired BoardRepository repo; public List<BoardEntity> findAll() { return repo.findAll(); } }
DAO란?
- 페이지를 불러오고 DB정보를 한 번에 불러오는 간단한 프로젝트의 경우 Service와 DAO는 차이가 거의 없을 수도 있다고 한다.
- DAO는 쉽게 말해 Mysql 서버에 접근하여 SQL문을 실행할 수 있는 객체
DAO와 JPA
- Spring Data JPA는 매우 적은 코드로 DAO를 구현할 수 있도록 해준다.
- 인터페이스에 메서드를 선언하는 것 만으로 라이트 한 '쿼리'를 수행하는 코드를 만드는 것과 동등한 작업을 수행한다.
DAO를 구현하지 않고 JPA만 사용가능?
- JPA가 만들 수 있는 코드는 매우 가볍고 쉬운 쿼리를 대체하는 것이라 복잡도가 높아지면 사용이 매우 어려워진다.
- 이때 JPA만으로만 수행한다면 수행능력이 SQL을 직접 사용해서 개발하는 것보다 못한 상황이 벌어질 수도 있다.
- 그래서 복잡도가 높은 곳은 DAO로 같이 사용한다.
Repository란
- Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스
- @Entity라는 어노테이션으로 데이터베이스 구조를 만들었다면 여기에 CRUD를 해야 되는 것을 어떻게 할지를 정의하는 계층
Summary
Controller : 사용자에 요청을 처리해 뷰에게 객체를 넘겨주는 역할을 하고, 역할에 따라 설계를 하기 위해 사용한다
Service : Controller와 (DAO 또는 Repository) 사이에서 비지니스 로직을 처리하고 관리하는 계층이다.
Repository : 어노테이션으로 데이터베이스 구조를 만들었다면 여기에 CRUD를 해야 되는 것을 어떻게 할지를 정의하는 계층
'Spring' 카테고리의 다른 글
[Spring] Lombok 개념 및 사용법 (1) 2024.04.22 [Spring] Spring Data JPA(Java Persistence API)란? (1) 2024.04.21 [Spring] JdbcTemplate의 기본 (0) 2024.04.19 [Spring] DAO, DTO, VO, Entity 개념 및 차이점 (0) 2024.04.19 [Spring] 스프링 MVC란 무엇인가? (1) 2024.04.18