Back-End/Spring

DDD layer

EverJunior Minjoo 2022. 10. 7. 14:02

레이어 분리하는것에 대한 기록

인스턴스 생성 어노테이션을 만들때도 어플리케이션을 생성할때 나누는 레이어별로 생성하기도 하고 아무튼 레이어는 알아둬야할 개념인것 같다.

우선 Application layer, Domain layer, infrastructure layer 는 에릭에반스의 도메인 주도설계 DDD 에서 나온 개념이다. 

음 자세하고 세세한거는 사실.. 나보다 좀더 고급이신 분들이 기록해둔것 있으니 나중에 참고해서 본격 공부하고 오늘은 간단히만 공부하기로한다.

MVC 모델에서 업무기능이나 취급하는 데이터 처리 요건이 복잡해지면 비지니스로직 처리하는 Model이 많아서  모델의 비대화 가 발생한다. 그렇다고 mvc모델은 설계 개념상 모델이 담당하는 부분 자체를 줄이면 안되서 모델안에서 역할분담을 명확히하고 어플리케이션의 레이어구성을 적용하고 비대해지는 모델을 분할하는것이 레이어를 나누는 목적이다.

 

1. 어플리케이션 레이어

클라이언트에서 받은 요청을 제어하고 도메인레이어를 사용해 어플리케이션을 제어한다.

2. 도메인레이어 도메인 객체에 대해 어플리케이션의 서비스 처리를 실행한다.

3. 인프라스트럭쳐 레이어

도메인 객체에 대해 CRUD 조작을해서 데이터의 영속성을(persistance) 담당한다.

 

레이어를 나누는 규칙으로서 어플리케이션레이어도 인프라스트럭처레이어도 도메인 레이어에 의존하지만, 도메인레이어는 다른 레이어에 의존해서는 안된다는 규칙이 있다.

※ 즉 도메인레이어의 변경에 의한어플리케이션레이어의 변경은되지만, 어플리케이션레이어의 변경에 의헤 도메인레이어의 변경이 생기면안된다.

 

어플리케이션 레이어

◎ Controller : 요청을 처리에 매핑하고 결과를 뷰에 넘겨주는 제어를 한다. 주요 처리는 Controller 안에서 실행하지않고, 도메인레이어의 Service를 호출한다.

Form : 화면의 폼을 표한한다. 화면에서 입력한 값을 Controller에 넘겨준다. 또한 Controller 에서 화면에 결과를 출력할때도 사용한다. 도메인레이어가 어플리케이션레이어에 의존하지않도록 Form에서 도메인객체로 변환하거나, 도메인객체에서 Form으로 변환하는것을 어플리케이션 레이어에서 수행해야한다.

View : 화면 표시를담당한다.

도메인레이어

  도메인 객체 : 서비스 처리를 실행할때 필요한 자원이다.(Entity같은)

Service : 어플리케이션의 서비스처리를 담당한다.

  Repository : Repository는 인터페이스이다. 데이터베이스의 데이터 조작내용만 정의한다.(구현내용은 작성하지않는다.)

인프라 스트럭처 레이어

  RepositoryImpl : 도메인 레이어에서정의한 Repository의 구현클래스이다. O/R Mapper가 Repository의 구현클래스를 생성하는 경우도 있다.

O/R Mapper : Object 와 Relation (객체와 관계형데이터베이스) 간의 데이터를 매핑한다. 

 

 

 

출처 : 스프링프레임워크 첫걸음-위키북스-