본문 바로가기

카테고리 없음

MVC with Service Layers

MVC 패턴과 함께 Service 레이어를 사용하는 예



프로그램 코드를 3개의 레이어로 구분하는 경우(3Tier Architecture)에는 각 레이어는 다음과 같은 기능으로 구분된다

Presentation Layer

 이용자가 볼 수 있도록 화면을 구성하는 로직의 집합

Application Layer or Business Layer

 이용자로부터 입력된 데이터를 기반으로 화면에 출력할 결과를 만들어 내는 로직(정보처리 부분)

Data Access Layer

 데이터 저장소에 직접 접근하여 데이터를 가져오거나 저장하는 로직




정보처리 부분(Business Layer)을 좀더 세분하여 Service Logic, Business Logic으로 나눌 수 있다


Service Logic

정보의 1차적인 처리, 데이터 유효성 검사, 예외처리, 트랜잭션처리 등 여러 장소에서 공통적으로 요구되는 로직

뒤에 이어지는 Business Logic 에 전달하기 위한 데이터를 가공하는 부분

한개의 클래스에 많은 메소드가 포함되고 각각의 메소드는 서로 직접적인 연관성이 없는 것이 일반적이다

정보처리를 위한 범용로직

정보를 1차적으로 검사 및 가공하여 뒤에 이어지는 Business Logic 를 호출한다

예) BoardService, MemberSerice, CartService


Business Logic

정보의 최종처리, 핵심적인 로직

한개의 비즈니스 로직은 한개의 클래스에 정의되는 것이 보통이므로 클래스의 규모가 작은 것이 보통이다

데이터베이스 접속이 필요하면 Data Access Layer 를 호출한다



MVC 패턴에서 비즈니스 로직을 사용하는 구조의 예


예) 이용자가 숫자를 입력하고 버튼을 누르면 입력된 숫자의 구구단이 화면에 출력되도록 하는 경우

데이터의 처리과정을 분석해보면....


1. 데이터 유효성 검사

 - 입력된 값이 빈 문자열인지 검사

 - 이용자가 입력한 데이터가 문자가 아니라 숫자인지 검사해야 한다


2. 숫자로 변환

 - 데이터 유효성 검사를 통과했다면, 문자열 형태의 숫자를 가감승제가 가능한 정수로 변환한다


3. 구구단 생성

 - 최종적으로 정제된 숫자를 이용하여 구구단 문자열을 생성한다


3 Tier 로직에서는 데이터의 처리부분은 Service Layer, Business Logic Layer 에서 다루고 있는데 위의 예를 3 Tier로 구성한다면, Service Layer 에서 1,2 과정을 처리하고, BLL 에서 3번내용을 처리하면 될 것이다. 

구구단을 생성하는 일이 핵심적인 부분이므로 그 전에 수행되는 모든 사전작업들은 Service Layer 에서 수행하면 된다


//서비스 로직

public class GuguService {

  public String getGuguStr(String input) {

       if( isInputNum(input) ) {

int num = Integer.valueOf(input);

Gugudan g = new Gugudan();

String result = g.createGugu( num );

return result;

       }

       return null;

   }


  private boolean isInputNum(String input) { }

}


//비즈니스 로직

public class Gugudan {

 public String createGugu(int num) { }

}