트랜잭션
7편에서 엔터티 객체를 통해 JPA기술로 도메인과 데이터베이스를 매핑하고, createMember메서드를 통해 저장할 수 있도록 구조를 설계했다.
createMember메서드를 호출하고 트랜잭션하여 저장을 완료하기 위한 Service의 비즈니스 로직을 마무리해야 한다.
@WebAdapter
@RestController
@RequiredArgsConstructor
public class RegisterMembershipController {
private final RegisterMembershipUseCase registerMembershipUseCase;
@PostMapping(path = "/membership/register")
Membership registerMemeber(@RequestBody RegisterMembershipRequest request) {
// request -> UseCase(inbounded port) -> Service (biz logic)
RegisterMembershipCommand command = RegisterMembershipCommand.builder()
.name(request.getName())
.address(request.getAddress())
.email(request.getEmail())
.isValid(true)
.isCorp(request.isCorp())
.build();
return registerMembershipUseCase.registerMembership(command);
}
}
@UseCase
@Transactional
@RequiredArgsConstructor
public class RegisterMembershipService implements RegisterMembershipUseCase {
private final RegisterMembershipPort registerMembershipPort;
private final MembershipMapper membershipMapper;
@Override
public Membership registerMembership(RegisterMembershipCommand command) {
//Port --> Adapter (createMember -> save) --> new JpaEntity --> toDomain
MembershipJpaEntity jpaEntity = registerMembershipPort.createMember(
new Membership.MembershipName(command.getName()),
new Membership.MembershipAddress(command.getAddress()),
new Membership.MembershipEmail(command.getEmail()),
new Membership.MembershipIsValid(command.isValid()),
new Membership.MembershipIsCorp(command.isCorp())
);
return membershipMapper.mapToDomainEntity(jpaEntity);
}
}
정리해보면,
- 클라이언트에게 HTTP요청을 Controller에서 Request객체로 받는다.
- 빌더 패턴을 사용해 Command 명령객체를 생성하여 UseCase 인터페이스 어댑터에 보낸다.
- UseCase를 구현한 Service 계층은 Port의 메서드를 호출한다.
- Adapter는 Port의 구현체로 도메인 객체를 받아 매핑된 엔터티를 생성한다.
- 새로운 엔터티는 주입받은 Spring Data JPA의메서드에 의해 DB에 저장된다.
- Service는 저장된 엔터티를 받아와 Mapper의 mapToDomainEntity 메서드를 통해 도메인 객체로 변환한다.
- 변환된 객체는 HTTP 응답으로 반환된다.
'개발 방법론' 카테고리의 다른 글
MSA(마이크로 서비스 아키텍처) 멤버서비스 DB연동 [7] (0) | 2023.12.20 |
---|---|
MSA(마이크로 서비스 아키텍처) 멤버서비스 서비스층 개발 [6] (0) | 2023.12.19 |
MSA(마이크로 서비스 아키텍처) 멤버서비스 인바운드 포트 [5] (0) | 2023.12.19 |
MSA(마이크로 서비스 아키텍처) 멤버서비스 인바운드 어댑터 [4] (1) | 2023.12.19 |
MSA(마이크로 서비스 아키텍처) 멤버서비스 도메인 [3] (0) | 2023.12.18 |