모델(Model) - DTO, Service

휘Bin·2023년 5월 1일
0
post-thumbnail

모델(Model)

웹 MVC 구조에서 컨트롤러와 화면의 역할은 확실히 구분된다.
컨트롤러에서는 화면에 필요한 데이터를 화면쪽으로 전달하는데, 이런 역할을 객체가 모델(Model)이다.

웹 MVC구조에서 모델(Model)은 컨트롤러에 필요한 기능이나 데이터를 처리해주는 역할을 하지만, 시스템 전체 구조로 보면 컨트롤러와 뷰를 제외한 남은 부분이라고 볼 수 있다.

모델을 영역을 조금 더 세분화해보면 '데이터 베이스'영역과 '비즈니스 로직'영역으로 구분할 수 있다. 즉, '서비스(로직 처리)계층'과 '영속(데이터 처리)계층'으로 분리할 수 있다.
이를 그림으로 표현하면 이렇게 표현할 수 있다.

  • DTO(Data Transfer Object)

계층을 분리하여 개발을 하는 경우 계층끼리나 객체들 간의 데이터 교환은 필수로 이뤄지게 된다. 이런 경우 여러 개의 데이터를 묶어 하나의 객체로 전달하는 것을 'DTO'라고 한다.

DTO에 특별한 규격이나 제약이 있는 것은 아니지만, 대부분 Java Beans 형태로 구성을 하게 된다.

[Java Beans 형식]
1. 생성자가 없거나 파라미터가 없는 생성자 함수를 가지는 형태
2. 속성(멤버 변수)은 private으로 작성
3. getter/setter를 만들 것

이외에도 규칙이 있긴 하지만 최소한 위 3가지는 지켜야 한다.

컨트롤러는 DTO를 구성해서 서비스 계층을 호출거거나, 서비스 계층에서 DTO를 받기도 하기 때문에 서비스 계층 구성 전에 DTO 클래스를 먼저 구성한다.

  • 서비스 객체

DTO는 단순하게 여러 개의 데이터를 하나의 객체로 구성하는 용도로 사용하고 주로 서비스 객체 메소드들의 파라미터나 리턴 타입으로 사용된다.

서비스 객체는 심플하게 말하면 '기능(로직)들의 묶음'이라고 말할 수 있다. 프로그램이 구현해야 하는 기능들의 실제 처리를 담당하는 것이다.
CRUD(등록/조회/수정/삭제) 기능들은 모두 서비스 객체에서 구현된다.

TodoService 클래스

TodoService 클래스를 enum타입으로 구성하기도 하는데, 이럴 경우의 장점은, 정해진 수만큼만 객체를 생성할 수 있다는 것이다.

public enum TodoService{
	INSTANCE;		
}

위의 코드에서 INSTANCE라고 된 부분이 객체의 개수를 결정하는 부분이다. 한 개만 지정되어 있으므로 하나의 객체만을 생성해서 사용하게 된다.
TodoService.INSTANCE 로 간단한게 사용 가능하다. 이처럼 하나의 객체를 생성해서 사용하는 것을 '싱글턴 패턴(singleton pattern)'이라고 한다.

TodoService 클래스는 여러 개의 기능을 정의하고 구현한다.

컨트롤러에서의 모델 처리

웹 MVC 구조에서 컨트롤러는 서비스 객체의 힘을 빌며 화면에 필요한 데이터를 처리한다.
예를 들면, 화면에 리스트 목록 데이터가 필요하다면 TodoService의 getIndexList()의 결과를 JSP에 전달하고, 이를 JSP에서 보여주는 방식이다.

위 과정에서 중요 메소드는 HttpServletRequest의 setAttribute()이다.
setAttribute()는 키(key)와 값(value) 형식으로, HttpServletRequest에 데이터를 보관한다. 보관된 데이터는 JSP에서 꺼내 사용하게 된다.

profile
One-step, one-step, steadily growing developer

0개의 댓글