[Spring] MVC패턴

고지훈·2022년 1월 13일
0

Spring

목록 보기
11/26
post-thumbnail
post-custom-banner

MVC패턴

MVC패턴의 구조는 Model, View, Controller로 구성된다.

  • 모델은 어떤한 동작을 수행하는 코드를 이야기한다. 우리가 무엇을 할지를 정하고 비지니스 로직과 DB등에 대한 처리를 수행한다.
  • 컨트롤러는 뷰와 모델을 이어주는 역할을 맡는다. 뷰의 요청에 따라 모델의 상태를 바꾸고 이를 다시 뷰에 전달한다.
  • 뷰는 사용자에게 보이는 영역이다. 컨트롤러를 통해 모델에 질의를 보내고 그 값을 사용자에게 적절하게 보여준다.

Spring Boot의 5가지 요소

  • Web Layer

    • 컨트롤러가 대표적이고, 필터, 인터셉터, 컨트롤러 어드바이스 등이 포함된다.
    • 외부 요청과 응답에 대한 전반적인 영역을 의미한다.
  • Service Layer

    • 말 그대로 서비스이다.
    • 일반적으로 컨트롤러와 저장소의 중간에 위치한다.
    • 트랜잭션과 도메인 간 연산 순서를 보장해준다.
  • Repository Layer

    • DB와 같은 데이터 저장소에 접근하는 영역이다.
    • JPA를 사용하면 @Repository를 생각하면 된다.
  • DTO

    • DTO는 계층간 데이터 교환을 위한 객체를 의미한다.
  • Domain model

    • 개발 대상, 즉 도메인을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화한 것을 도메인 모델이라한다.
    • 비지니스 로직을 처리하는 영역이다.
    • JPA를 사용한다면, @Entity가 사용되는 영역이 도메인 영역이라고 생각할 수 있다.

Spring Boot에서 MVC패턴

  • 뷰: 프론트엔드에서 담당한다. 요청을 보내고 응답을 받아 이를 화면에 보여준다.
  • 컨트롤러: 컨트롤러에서 담당한다. 들어온 요청에 따라 서비스의 적절한 연산을 수행하고, 결과 값을 응답으로 가공하여 보내준다. 또한 인터셉터, 예외 핸들러, 컨트롤러 어드바이스 등 통신과정에 영향을 주는 다른 클래스를 포함한다.
  • 모델: 도메인 모델이 비지니스 로직과 상태를 가지고 있다. 서비스는 이러한 도메인 모델의 생성과 연산을 적절히 수행하며, 그 과정에서 트랜잭션을 보장한다.

Spring MVC패턴

MVC는 Model, View, Controller의 약자로 소프트웨어 디자인 패턴의 하나이다. MVC패턴도 모델 1, 모델 2가 있지만 최근 웹 개발은 대부분 모델2를 사용한다. 따라서 MVC라고 이야기하면 모델 2를 의미한다.

MVC패턴을 사용하면 사용자 인터페이스와 비즈니스 로직을 분리하여 개발할 수 있다. 서로 영향을 최소화하여 개발 및 변경이 쉬운 애플리케이션을 만들 수 있다. 즉, 화면과 데이터 처리를 분리해서 재사용이 가능하게 한다.

  • Model: 애플리케이션의 정보, 즉 데이터를 의미한다.
  • View: 사용자 인터페이스, 즉 사용자가 보고 사용하는 화면 등을 의미한다.
  • Controller: 모델과 뷰의 중계 역할을 한다. 사용자의 요청을 파악하고 그에 맞는 결과를 사용자에게 돌려준다.

일반적으로 사용하는 스프링 MVC의 구조

  • View: 사용자가 보는 화면 또는 결과를 의미한다.
  • Controller: 사용자가 웹 브라우저를 통해 어떠한 요청을 하면 그 요청을 처리할 컨트롤러를 호출하게 된다. 컨트롤러는 사용자의 요청을 처리하기 위한 비즈니스 로직을 호출하고 그 결과값을 사용자에게 전달해주는 역할을 한다.
  • Service: 사용자의 요청을 처리하기 위한 비즈니스 로직이 수행된다. 일반적으로 서비스 영역은 서비스 인터페이스와 인터페이스의 구현체로 나뉜다.
  • DAO: Data Access Object의 약자로 데이터베이스에 접속해서 비즈니스 로직 실행에 필요한 쿼리를 호출한다.
  • DB: 데이터베이스를 의미한다. 데이터베이스에는 애플리케이션에서 발생한 모든 정보가 저장되어 있다.
profile
"계획에 따르기보다 변화에 대응하기를"
post-custom-banner

0개의 댓글