[Spring] Basic, Controller, Service, Repository, DAO

홍정완·2022년 3월 18일
0

Spring

목록 보기
3/32
post-thumbnail

MVC 패턴



  • MVC 패턴은 Model-View-Controller의 약자로서 개발을 할 때 3가지 형태로 역할을 나누어 개발하는 방법론

Model

DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룹니다.


View

사용자에게 시각적으로 보여주는 부분


Controller

Model이 데이터를 어떻게 처리할지 알려주는 역할, 사용자에 의해 클라이언트가 보낸 데이터가 있으면 모델을 호출하기 전에 적절히 가공을 하고 모델을 호출합니다. 그런 다음 모델이 업무 수행을 완료하면 그 결과를 가지고 View에게 전달


MVC 패턴을 사용하는 이유

사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤,
각자 맡은 역할에 집중해 개발 가능



Controller


  • 주로 사용자의 요청을 처리한 후, 지정된 뷰에 모델 객체를 넘겨주는 역할

  1. 어떤 처리를 할지 결정을 Service에 넘겨준다.
  2. Service에서 실질적으로 처리한 내용을 View에게 넘겨준다.



Spring에서 Controller 지정 어노테이션

  • @Controller
  • @RestController

@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생성
    }
}

@RestController(Spring Restful Controller)Permalink

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


Service


데이터베이스에 접근하는 DAO를 이용해서 결과값을 받아 온다.


  • Client가 Request
  • Request URL에 알맞은 Controller가 수신
  • Controller는 넘어온 요청을 처리하기 위해 Service를 호출
  • Service는 알맞은 정보를 가공하여 Controller에게 데이터 전달
  • Controller는 Service의 결과물을 Client에게 전달

※ 주의할 점은 실제 비즈니스 로직은 Service에서 수행하지 않는다.
※ Service는 트랜잭션, 도메인 간 순서 보장의 역할만 한다.
※ 비니지스 로직을 처리를 담당하는 곳은 Domain이다



DAO


DB 서버에 접근하여 SQL 문을 실행할 수 있는 객체


DAO 와 JPA

Spring Data JPA는 매우 적은 코드로 DAO를 구현, 인터페이스를 만드는 것만으로도 Entity 클래스에 대한 insert, Update, Delete, Select 실행 가능


※ DB 정보를 한 번에 불러오는 간단한 프로젝트의 경우, Service와 DAO 차이가 거의 없을 수 있다.



구문설명
DAO (Data Access Object)DB의 data에 접근하기 위한 객체
직접 DB에 접근 👉 CRUD 등을 조작
Service와 DB를 연결하는 역할
SQL을 사용하여 CRUD API를 동작
DTO (Data Transfer Object)계층간 데이터 교환을 위한 객체
Service 와 Controller 사이에서 사용하는 데이터 교환 객체
로직을 갖고 있지 않는 순수한 객체이며 오로지 Getter/Setter 메소드만 갖는다.
VO (Value Object)VO는 DTO와 동일한 개념이지만 Read Only 속성을 가짐


Entity

  • 데이터베이스(Database, DB)에 쓰일 필드와 여러 엔티티 간 연관관계를 정의

Repository


Entity에 의해 생성된 DB에 접근하는 메서드(ex, findAll())를 사용하기 위한 인터페이스

엔티티를 선언함으로써 데이터베이스 구조를 만들었다면,
CRUD를 어떻게 할 것인지 정의해 주는 계층



Domain 클래스와 DTO 클래스를 분리하는 이유


  • View Layer와 DB Layer의 역할을 철저하게 분리하기 위해서

  • 테이블과 매핑되는 Entity 클래스가 변경되면 여러 클래스에 영향을 끼치게 되지만,
    View와 통신하는 DTO 클래스는 자주 변경되므로 분리해야 한다.

  • 즉 DTO는 Domain Model을 복사한 형태로, 다양한 Presentation Logic을 추가한 정도로 사용하며 Domain Model 객체는 Persistent만을 위해서 사용한다.


profile
습관이 전부다.

0개의 댓글