MVC패턴

Goofi·2023년 7월 21일
0
post-custom-banner

MVC패턴

디자인 패턴 중 하나인 MVC패턴은 Model, View, Controller의 줄임말로 어플리케이션을 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴을 의미

  • MVC패턴은 효율적인 유지 보수를 위해 뷰와 모델(도메인)의 관심사를 분리하는 디자인패턴이다.
  • 정해진 규칙이나 구현 방법은 없다.
  • 사용자 인터페이스로부터 비즈니스 로직을 분리하여 서로 영향 없이 쉽게 고칠 수 있는 설계가 가능

결론부터 말하자면

MVC 패턴에 대해 하나의 정답을 찾으려기보다, 그 자체를 이해하는 것이 중요하다.

Spring Boot의 MVC패턴

1. Model(도메인)

  • 도메인 모델 객체(Entity, POJO)는 비즈니스 로직과 데이터를 나타낸다.
  • 이 패키지는 데이터베이스와 상호 작용, 비즈니스 논리를 구현하고 데이터를 저장, 검색 및 조작하는 클래스를 포함한다.
  • 데이터베이스와 연동을 위한 DAO패키지와 데이터의 구조를 표현하는 DO패키지로 구성됨
    ❗️단, 꼭 포함시켜야 하는게 정답은 아니다. 정해져 있는건 없다.

ex) 검색을 위한 키워드가 넘어오면 데이터베이스에서 관련된 상품의 데이터를 받아 뷰에 전달

model 또는 domain 패키지에 위치

2. View

  • 뷰는 사용자 인터페이스 (UI)를 나타낸다.
  • 이 디렉토리는 HTML, Thymeleaf, JSP 등과 같은 템플릿 파일을 포함하며 사용자가 볼 수 있는 웹 페이지를 생성하는데 사용된다.

ex) 검색 결과를 보여주기 위해 모델에서 결과 상품 리스트 데이터를 받는다.

view 또는 templates 패키지에 위치

3. Controller

  • 컨트롤러는 클라이언트 요청을 처리하고 모델과 뷰를 연결하는 역할을 한다.
  • 이 패키지에는 요청 매핑, 비즈니스 로직 호출 및 뷰 템플릿 선택을 담당하는 클래스가 있다.

ex) 쇼핑몰에서 상품을 검색하면 그 키워드를 컨트롤러가 받아 모델과 뷰에 적절하게 입력을 처리하여 전달한다.

controller 패키지에 위치

4. DTO (Data Transfer Object)

  • DTO는 데이터 전송을 위한 객체로, 주로 클라이언트와 서버 간의 데이터 교환을 위해 사용한다.
  • DTO는 모델과 컨트롤러 사이에서 데이터를 전송하는 데 사용한다.

dto 패키지에 위치

5. DAO (Data Access Object)

  • DAO는 데이터베이스와 상호 작용을 추상화하고 데이터 액세스를 위한 메서드를 제공한다.
    Spring Boot에서는 JPA (Java Persistence API) 또는 Spring Data를 사용하여 데이터 액세스를 처리하는 경우가 많다.

repository 또는 dao 패키지에 위치

Model과 DTO는 같은가?

정답은 없다.
두 개념은 비슷한 역할을 할 수 있고, 특히 데이터 전송에 사용되는 모델 클래스가 DTO로 사용될 수 있다. 하지만 DTO는 주로 데이터의 전송 및 교환을 위한 목적으로 사용되며, 데이터 전송과 관련된 역할을 중점으로 한다. 모델은 더 넓은 의미에서 애플리케이션의 핵심 데이터와 비즈니스 로직을 나타내는 역할을 한다.

Model 예시 코드

public class User {
    private Long id;
    private String username;
    private String email;

    // 생성자, getter, setter 생략

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

DTO 예시 코드

public class UserDTO {
    private String username;
    private String email;

    // 생성자, getter, setter 생략

    @Override
    public String toString() {
        return "UserDTO{" +
                "username='" + username + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

위의 코드는 UserDTO(Data Transfer Object)를 나타내는 예시입니다. UserDTO 클래스는 사용자의 사용자명(username)과 이메일(email)을 저장하는 두 가지 필드와 해당 필드에 접근하는 getter와 setter 메서드를 포함하고 있습니다. UserDTO는 주로 데이터를 전송하거나 데이터를 뷰로 전달하는 데 사용될 수 있습니다.

User 모델은 주로 데이터의 구조와 비즈니스 도메인을 나타내며, 비즈니스 로직을 포함할 수 있습니다. UserDTO는 주로 데이터 전송 및 데이터 전달을 위한 목적으로 사용됩니다. 이러한 예시 코드를 통해 Model과 DTO의 차이를 이해하실 수 있을 것입니다.

결론

어떤 용어를 사용하느냐에 따라 컨텍스트와 관행에 따라 다를 수 있지만, 일반적으로 모델은 더 넓은 의미로 사용되며, DTO는 데이터 전송과 관련된 역할을 강조하는 용어입니다.

DTO와 DO는 같은가?

DTO와 DO 모두 데이터를 나타내는 객체를 가리킨다. 하지만...

  • DTO는 주로 데이터 전송 및 데이터 전달을 위한 목적으로 사용한다.
  • DO는 주로 데이터베이스와 상호 작용을 위한 목적으로 사용될 때 사용되는 용어이다.

결론

프로젝트 및 팀의 문맥에 따라 정확한 의미가 달라질 수 있으므로, 관행 및 문서에서 명확한 정의를 확인하는 것이 중요합니다.

참고자료

profile
오늘보단 내일이 강한 개발자입니다!🧑🏻‍💻
post-custom-banner

0개의 댓글