애플리케이션에서의 Service는 도메인 업무 영역을 구현하는 비즈니스 로직과 관련이 있다.
애플리케이션의 비즈니스 로직을 처리하기 위한 서비스 계층은 대부분 도메인 모델을 포함한다.
도메인 모델
빈약한 도메인 모델(anemic domain model)
풍부한 도메인 모델(rich domain model)
이것들은 도메인 주도 설계(Domain Driven Design)와 관련이 깊다.
서비스 계층에서 데이터 액세스 계층과 연동하면서 비즈니스 로직을 처리하기 위해 필요한 데이터를 담는 역할을 하는 클래스를 도메인 엔티티(Entity) 클래스라고 부른다.
DTO클래스처럼 Java Bean 규약을 지키는 객체들 간의 변환 기능을 제공하는 매퍼(Mapper) 구현 클래스를 자동으로 생성해주는 코드 자동생성기.
dependencies {
...
...
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
}
언제나 그랬었듯이.. build.gradle에 추가해준다.
그리고 Mapper 인터페이스를 작성하고,
Gradle의 build task를 실행하면 자동으로 생성된다.
생성경로 : build/classes/java/main/** 으로 작성한 Mapper인터페이스의 위치에 같이 생성되어있다.
Java에서 Object를 Mapping하는 라이브러리 중 MapStruct와 양대산맥이 ModelMapper이다.
하지만, ModelMapper는 Runtime시 Java의 리플렉션 API를 이용해서 매핑을 진행하기 때문에 컴파일 타임에 이미 Mapper가 모두 생성되는 MapStruct보다 성능면에서 월등히 떨어지기때문에, ModelMapper의 대안으로 MapStruct가 많이 사용되고 있는 추세이다.
@AllArgsConstructor
@NoArgsConstructor
@Service
커밋 O