Spring MVC의 계층 구조

dradra·2024년 11월 2일
1

Spring Boot Deep Dive

목록 보기
2/2


[해당 포스트에 사용된 개념 및 자료는 ASAC 웹 풀스택 교육에서 일부 참고하였습니다.]

Spring MVC의 계층 구조는 웹 애플리케이션을 다양한 역할로 분리하여 유지보수성과 확장성을 높이는 데 중점을 둔다. 이 구조는 주로 프레젠테이션 계층, 서비스 계층, 데이터 액세스 계층으로 나뉜다. 각 계층은 서로 독립적이어서 수정과 확장에 용이하다.

1. 프레젠테이션 계층 (Presentation Layer)

클라이언트 요청 → DispatcherServlet → Controller → View → 응답

  • 사용자의 요청을 받아 비즈니스 로직과 데이터를 연결하고, 최종 결과를 화면에 렌더링하여 사용자에게 응답하는 계층이다.

프레젠테이션 계층의 구성 요소

  • DispatcherServlet: 모든 HTTP 요청을 가장 먼저 받아들이는 중앙 허브 역할을 한다.

    • 요청을 적절한 컨트롤러로 전달하고, 결과를 클라이언트에게 반환한다.
  • Controller: 클라이언트의 요청을 처리하고, 필요한 데이터를 서비스 계층에서 가져오며, 최종적으로 응답할 뷰를 선택한다.

  • View (JSP, Thymeleaf 등): 클라이언트에게 보여줄 최종 화면을 생성하는 역할을 한다. 컨트롤러로부터 전달받은 데이터를 이용해 HTML을 생성한다.

2. 서비스 계층 (Service Layer)

Controller에서 서비스 계층을 호출하여 비즈니스 로직을 수행하고, 필요한 데이터가 있으면 데이터 액세스 계층을 통해 가져온다.

  • 비즈니스 로직을 담당하는 계층이다.
  • 컨트롤러에서 받은 요청을 처리하기 위한 비즈니스 규칙을 수행하고, 필요에 따라 데이터 액세스 계층을 호출한다.

서비스 계층의 구성 요소

  • Service 클래스: 비즈니스 로직을 수행하는 클래스이다. 다양한 비즈니스 요구사항을 구현하며, Controller와 Data Access 계층을 중재하는 역할을 한다.

3. 데이터 액세스 계층 (Data Access Layer)

서비스 계층의 요청을 받아 데이터베이스와 상호작용하여 필요한 데이터를 가져오거나 저장한다.

  • 데이터베이스와의 직접적인 통신을 담당하는 계층이다.
  • 주로 CRUD 작업(생성, 읽기, 업데이트, 삭제)을 수행하며, Service 계층에 필요한 데이터를 제공한다.

데이터 엑세스 계층의 구성 요소

  • DAO (Data Access Object): 데이터베이스와의 상호작용을 캡슐화하는 객체로, SQL 쿼리를 실행하고 결과를 매핑하여 반환한다.

  • Repository: Spring Data JPA와 같은 ORM 프레임워크를 사용할 경우, Repository 인터페이스를 통해 데이터베이스와 상호작용한다.

  • DB (Database): 실제 데이터를 저장하는 데이터베이스이다.

DAO와 @Repository의 차이점

DAO는 Data Access Object의 줄임말로, 데이터베이스와 직접 상호작용하며 CRUD 작업을 수행하는 객체를 의미한다. 일반적으로 create, read, update, delete 메서드를 정의하여 데이터베이스 접근 기능을 구현한다.


public interface UserDao {
    void create(User user);
    User read(Long id);
    void update(User user);
    void delete(String userName);
}

@Repository는 Spring의 데이터 액세스 계층을 담당하는 어노테이션으로, DAO와는 다르게 꼭 모든 CRUD 메서드를 구현할 필요가 없다. 필요한 CRUD 작업만 정의해서 사용할 수 있으며, 여러 DAO를 결합하여 새로운 데이터 접근 메서드를 구현하는 데 유용하다.

@Repository
public interface UserRepository {
    User get(Long id); // 필요한 메서드만 정의해도 된다.
    // add(User user);
    // update(User user);
    // remove(User user);
}

👍Spring MVC 계층 구조의 장점

  • 유지보수성: 각 계층이 독립적으로 역할을 수행하므로, 특정 계층의 수정이 다른 계층에 영향을 미치지 않는다.
  • 확장성: 계층 구조로 설계되어 있기 때문에 새로운 기능을 추가하거나 변경하는 것이 용이하다.
  • 역할 분리: 각 계층이 명확한 역할을 가지고 있어 코드의 가독성과 이해도가 높아진다.

전체적인 요청 처리 흐름

  1. 프레젠테이션 계층에서 DispatcherServlet이 요청을 받아, URL에 맞는 Controller로 전달한다.
  2. 서비스 계층에서 비즈니스 로직을 수행하고, 데이터가 필요하면 데이터 액세스 계층을 호출한다.
  3. 데이터 액세스 계층에서 데이터베이스와 상호작용하여 데이터를 조회하거나 저장한다.
  4. 결과를 Controller에 전달하고, Controller는 View를 통해 클라이언트에게 응답을 반환한다.

0개의 댓글

관련 채용 정보