Spring MVC(서비스 계층)

Rina's·2023년 6월 13일

코드스테이츠

목록 보기
43/96

API 계층과 서비스 계층의 연동

Controller 클래스와 Service 클래스의 연결을 위해 필요한것
컨트롤 클래스(헨들러 메서드)와 Gto클래스
서비스 클래스(로직 처리 메서드)와 Entity 클래스
Mapping 클래스(+ 인터페이스)

Service 클래스

도메인 엔티티 클래스

서비스 계층에서 로직 처리를 위해 데이터를 담는 클래스
서비스 클래스 로직 처리를 위해 컨트롤 클래스의 Dto처럼 Entity를 생성해 준다
Entity 클래스는 편리한 lombok으로 생성하였다

lombok 라이브러리

@Getter, @Setter
클래스의 모든 멤버 변수의 getter/setter 자동 생성
@NoArgsConstructor
클래스의 모든 멤버 변수를 파라미터로 갖는 생성자 자동 생성
@AllArgsConstructor
파라미터가 없는 기본 생성자를 자동으로 생성

Mapper

getDto -> set엔티티 -> 서비스클래스(DB호출) -> getDto
getDto의 매핑을 헨들러가 getter, setter로 수행

매퍼 클래스를 통해 결합을 느슨하게 하자!
(Controll)DTO -> [Mapper] -> (service)Entity
(service)Entity -> [Mapper] -> (Controll)DTO ->

ResponseEntity(DTO): JSON -> Client

  1. 컨트롤 클래스의 생성자 매개변수에 서비스 클래스를 넣어 DI형성
  2. Controller가 @RestController로 빈 등록을 하는 것 처럼 Service도 @Service로 등록
    생성자가 하나 이상일 경우 @Autowired 꼭 사용해야 함!

MapStruct 사용

매퍼(Mapper) 구현 클래스를 자동으로 생성해 주는 코드 자동 생성기

  1. 라이브러리 추가 build.gradle
dependencies {
	...
	...
	implementation 'org.mapstruct:mapstruct:1.4.2.Final'
	annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
}
  1. Mapping 인터페이스 추가, @Mapper(componentModel = "spring")설정
  2. Gradle 실행
  3. 생성된 build 디렉터리 내 구현 클래스 확인

CoffeeMapperImpl

build을 열면 bytecode가 디컴파일된 내용을 확인 할 수 있는데 
실수로 디컴파일 플러그인 라이센스? 사용 거부를 눌러서 
코드 내용이 온통  /* compiled code */로 도배되었다;;; 헐... 
처음엔 원인을 모르고 해메다가 설정 플러그에서 활성화 시키니 해결되었다.

profile
갭린이 리나

0개의 댓글