서비스 계층

김성수·2022년 11월 22일
0

SEB_BE

목록 보기
11/31

Service의 의미

애플리케이션에서의 Service는 도메인 업무 영역을 구현하는 비즈니스 로직과 관련이 있다.
애플리케이션의 비즈니스 로직을 처리하기 위한 서비스 계층은 대부분 도메인 모델을 포함한다.

  • 도메인 모델

    • 빈약한 도메인 모델(anemic domain model)

    • 풍부한 도메인 모델(rich domain model)

    • 이것들은 도메인 주도 설계(Domain Driven Design)와 관련이 깊다.

    • 서비스 계층에서 데이터 액세스 계층과 연동하면서 비즈니스 로직을 처리하기 위해 필요한 데이터를 담는 역할을 하는 클래스를 도메인 엔티티(Entity) 클래스라고 부른다.

MapStruct

DTO클래스처럼 Java Bean 규약을 지키는 객체들 간의 변환 기능을 제공하는 매퍼(Mapper) 구현 클래스를 자동으로 생성해주는 코드 자동생성기.

  • MapStruct의존 라이브러리 설정
dependencies {
	...
	...
	implementation 'org.mapstruct:mapstruct:1.5.3.Final'
	annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
}

언제나 그랬었듯이.. build.gradle에 추가해준다.

  • @Mapper
    • 이 애너테이션을 추가하면, 해당 인터페이스를 MapStruct의 Mappe인터페이스로 정의된다,
    • @Mapper 애너테이션의 애트리뷰트로 componentModel = "spring"을 지정해주면 Spring의 Bean으로 등록이 된다
    • **@Mapper(componentModel = "spring")

그리고 Mapper 인터페이스를 작성하고,
Gradle의 build task를 실행하면 자동으로 생성된다.

생성경로 : build/classes/java/main/** 으로 작성한 Mapper인터페이스의 위치에 같이 생성되어있다.

Java에서 Object를 Mapping하는 라이브러리 중 MapStruct와 양대산맥이 ModelMapper이다.
하지만, ModelMapper는 Runtime시 Java의 리플렉션 API를 이용해서 매핑을 진행하기 때문에 컴파일 타임에 이미 Mapper가 모두 생성되는 MapStruct보다 성능면에서 월등히 떨어지기때문에, ModelMapper의 대안으로 MapStruct가 많이 사용되고 있는 추세이다.

Annotation

@AllArgsConstructor

  • 이 애너테이션이 클래스 앞에 붙으면, 클래스에 있는 모든 멤버 변수를 매개변수로 갖는 클래스의 생성자를 자동으로 생성해준다.

@NoArgsConstructor

  • 이 애너테이션이 클래스 앞에 붙으면, 매개변수가 없는 기본 생성자를 자동으로 생성해준다.

@Service

  • 서비스 클래스에 붙여줌으로써 Spring Bean으로 등록시킨다.
profile
쌩수 Git >> https://github.com/SsangSoo?tab=repositories

1개의 댓글

comment-user-thumbnail
2022년 11월 29일

커밋 O

답글 달기