3 분 소요

Spring MVC 대하여

Spring MVC는 Spring 프레임워크에서 제공하는 웹 애플리케이션 개발용 모듈 중 하나로, 웹 애플리케이션을 개발할 때 MVC 패턴을 사용한다. 즉, Spring MVC는 MVC 패턴을 기반으로 하는 웹 애플리케이션 개발용 모듈이라고 할 수 있다.

Spring MVC에서는 MVC 패턴의 각 구성 요소를 다음과 같은 클래스로 구현한다.

  1. Model: 데이터와 비즈니스 로직을 처리하는 클래스, 보통은 POJO(Plain Old Java Object) 클래스로 구현한다.

  2. View: 사용자 인터페이스를 처리하는 클래스, JSP(JavaServer Pages)나 Thymeleaf 등의 템플릿 엔진을 사용하여 구현한다.

  3. Controller: 사용자 입력을 처리하고 Model과 View를 연결하는 클래스, 보통은 @Controller 어노테이션을 사용하여 구현한다.

Spring MVC는 MVC 패턴을 사용하므로, 비즈니스 로직은 Model에서 처리하고, Controller에서는 Model과 View를 연결하고 사용자 입력을 처리한다. 따라서 Spring MVC에서도 MVC 패턴에서와 같이 각 구성 요소의 역할이 분리되어 있으며, 유지보수성과 코드 가독성을 높일 수 있다.

MVC(Model-View-Controller) 구조를 쓰는 이유

  1. 관심사의 분리: MVC 패턴은 데이터 모델, 사용자 인터페이스 및 제어 논리를 명확하게 분리하여 애플리케이션을 보다 쉽게 유지 관리하고 확장할 수 있도록 하기 위해서
  2. 재사용성: MVC 구조의 다양한 구성 요소를 다른 애플리케이션에서 재사용 할 수 있으므로 개발 시간과 노력이 줄어든다.
  3. 유연성: MVC 패턴을 사용하면 다른 구성 요소에 영향을 주지 않고 Model, View 또는 Controller를 변경할 수 있으므로 보다 쉽게 유지 관리하고 업데이트하기 좋다.
  4. 테스트 용이성: MVC 패턴을 사용하면 Model, View 또는 Controller와 같은 개별 구성 요소를 더 쉽게 테스트 할 수 있다. 즉, 어느곳에서 오류가 나는지 파악하기 쉬우며 보다 효율적으로 수정할 수 있다. 이외에도 몇가지 장점이 있으며 전반적으로 MVC 패턴은 코드 및 데이터 구성을 위한 명확한 구조를 제공하여 SW 프로그램을 더 쉽게 개발, 유지 관리 및 업데이트할 수 있기 때문에 소프트웨어 개발의 모범사례로 인식된다.

MVC 패턴에서의 간단한 용어 설명

Controller, Dto, Entity, Repsitory, Service

image

해당 그림의 경우 진행했던 프로젝트의 실행 구조이며, 전체적인 구조는 달라질 수 있다.
  • Controller: Controller는 Model과 View 사이의 중개자 역할로 사용자 입력을 처리하고 그에 따라 Model을 업데이트하며 Model에서 View로 데이터를 전달하여 최종 출력을 렌더링합니다.
    • 즉, 사용자의 요청을 받고 요청에 맞춰 처리가 된 후 다시 내보내는, 업데이트하는 역할을 해주는 것이다.
  • DTO(Data Transfer Object): DTO는 계층 또는 시스템 간에 데이터를 전송하는데 사용되는 개체이다. MVC 구조에서 DTO는 종종 Model에서 View로 또는 View에서 Controller로 데이터를 전송하는데 사용된다.
    • SW 프로그래밍에서 다른 부분들을 분리하여 유지 관리 및 테스트를 더 쉽게 만들어준다.
    • 즉, 시스템간에 데이터를 연결해주는 역할이며, 이로 인해 유지 관리 및 테스트(오류 찾기)가 더 쉬워지는 것이다.
  • Entity: Entity는 회원, 주문 또는 제품과 같은 실제 객체를 나타내며 일반적으로 POJO(Plain Old Java Object) 또는 이와 유사한 구성으로 정의된다. MVC 구조에서 Entity는 Model 계층의 일부이며 데이터베이스에서 데이터를 저장하고 검색하는데 사용된다.
    • 실제 DB의 테이블을 넣어서 데이터를 직접 검색, 저장하는데 쓰이는데, 언뜻 보면 DBMS와 같은 기능처럼 볼 수 있지만 Entity는 Model 계층의 일부이며 관련된 데이터 및 동작을 캡슐화하는데 사용된다.
    • 그에비해서 DBMS는 데이터를 데이터베이스에 저장하고 관리하는 SW 시스템으로 데이터 모델링, 인덱싱, 쿼리 최적화, 동시성 제어 등의 다양한 서비스를 제공한다.
    • 즉, Entity는 MVC 패턴에서 데이터의 개념적 표현으로 볼 수 있으며 DBMS는 실제 데이터를 저장하고 관리하는데 사용되는 SW 시스템이다.
  • Repository: Repository는 Model과 데이터 저장소(Repository) 사이에 추상 계층을 제공하는 구성요소로 주로 CRUD작업을 수행하기 위한 메소드를 제공하여 Entity 객체와 DB 간의 중재자 역할을 한다.
    • Interface class로 만들어 필요 메소드를 제공하는 역할로 사용된다.
  • Service: Service는 일련의 관련 비즈니스 기능을 제공하는 구성요소이다. MVC 구조에서 Service는 일반적으로 Entity 또는 Repository에서 처리할 수 없는 복잡한 비즈니스 로직을 수행하는데 사용된다. 또한 API 또는 DB와 같은 외부 시스템과 통신하는데 자주 사용된다.
    • 조회시에 페이징 처리가 필요한 리스트인 경우나 Update, Insert 시에 추가로 필요한 로직같은 경우 주로 Service 쪽에서 처리를 한다.

참고: 이러한 구성 요소의 정의는 사용 중인 특정 프레임워크 또는 구현에 따라 다를 수 있습니다.(DAO 등)

POJO(Plain Old Java Object)

  • POJO는 특별한 동작이나 제한이 없는 단순한 Java 객체를 설명하는데 사용되는 용어입니다. POJO는 일반적으로 DB의 Entity 또는 RESTful API의 DTO와 같은 데이터를 나타내는데 사용된다.
  • POJO 클래스에는 일반적으로 개인 필드와 각 필드에 대한 공용 getter 및 setter 메서드가 있습니다. 또한 기본 생성자와 필요에 따라 다른 생성자와 메서드가 있을 수 있습니다. POJO의 기본 아이디어는 클래스를 단순하게 유지하고 복잡한 논리나 동작을 포함하는 대신 데이터 보유에 집중하는 것이다.
  • POJO는 작성, 이해 및 유지 관리가 쉽기 때문에 Java 커뮤니티에서 널리 사용됩니다. Hibernate, Spring 또는 JPA와 같은 다양한 기술과 함께 사용하여 데이터를 데이터베이스에 유지하거나 Jackson, Gson 또는 유사한 라이브러리와 함께 사용하여 데이터를 직렬화 및 역직렬화할 수 있는것이다.
  • 요약하면 POJO는 데이터를 표현하는 데 사용되는 간단한 Java 클래스이며 단순성과 다양성으로 인해 많은 Java 기반 애플리케이션에서 널리 사용된다.

업데이트: