ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Controller, Service, Repository 가 무엇일까?
    Spring 2024. 4. 20. 22:33

     

    쉬운 이해를 위해 아래의 자료를 먼저 보는 것을 추천한다.

     

    https://jihoon3106.tistory.com/3

     

    [Spring] 스프링 MVC란 무엇인가?

    MVC(Model View Controller)란? MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴이다. Spring MVC 는 MVC 디자인 패턴에 기반해 웹 애플리케이션을 만들기 위한 Spring기능 중 하나이다. 애플리케이

    jihoon3106.tistory.com

    https://jihoon3106.tistory.com/5

     

    DAO, DTO, VO, Entity 개념 및 차이점

    DAO, DTO, VO, Entity DAO(Data Access Object) DB의 data에 접근하기 위한 객체로 직접 DB에 접근하여 데이터를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다. DataBase 접근을 하기 위한 로직과 비지니스

    jihoon3106.tistory.com

     

     

    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();
        }
    }

     

    사용이유

    1. 간결한 코드
      간단한 어노테이션 설정으로 웹 요청과 응답을 처리할 수 있다.
    2. HTTP Method 지원
      각각의 메서드에 HTTP Method를 지정해서 다양한 종류의 요청을 처리할 수 있다.
    3. RESTful 설계 원칙 준수
      RESTful 웹 서비스의 설계 원칙을 더 쉽게 준수할 수 있다.

    Service란?

    1. Client가 Request를 보낸다
    2. Request URL에 알맞은 Controller가 수신받는다.
    3. Controller는 넘어온 요청을 처리하기 위해 Service를 호출한다.
    4. Service는 알맞은 정보를 가공하여 Controller에게 데이터를 넘긴다.
    5. 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를 해야 되는 것을 어떻게 할지를 정의하는 계층

kimjihoon