Spring

· Spring
서비스에 모든 비즈니스 로직을 작성할 수도 있습니다. 그러나 다음과 같은 단점이 있습니다. 1. 서비스 로직의 복잡도가 높아지게 된다. 2. 로직(메서드)이 중복되면, Service Layer 가 너무 비대해진다. 3. 이로 인해 유지보수와 테스트가 힘든 상황이 발생할 수 있고, 유연하지 못한 소프트웨어가 될 수 있다. 위와 같은 이유로 서비스의 로직을 도메인으로 옮기는 중에 AbstractAggregateRoot를 알게 됐습니다. AbstractAggregateRoot는 DDD(Domain Driven Design)를 구현하기 편리하게 해주는 클래스입니다. 좀 더 정확히 말하면 도메인 이벤트를 등록, 삭제 등 관리하는 것을 도와주는 클래스입니다. 예시 '계좌'라는 도메인이 있습니다. 1. A 유저가 B..
· Spring
MapStruct는 여러 계층 간의 DTO를 매핑하는 라이브러리입니다. 객체들에 대한 매핑 코드를 작성하는 것은 지루하고 오류가 발생하기 쉬우므로 이를 최대한 자동화하여 단순화하는 것을 목표로 합니다. 인터페이스만 작성하면 구현부는 컴파일 시점에 자동 생성되기 때문에 손쉽게 매핑할 수 있습니다. 사용법 @Mapper(componentModel = "spring") public interface OrderReqDTOMapper { OrderCommand toCommand(OrderReqDTO orderReqDTO, String productId, String productName ); @Mappings({ @Mapping(target = "productId", ignore = true), @Mapping(..
· Spring
메서드 Save Save 메서드를 사용하면 엔티티를 DB에 저장할 수 있습니다. Save 메서드를 사용할 때 flush 또는 commit 메서드에 대한 명시적인 호출이 이루어지기 전까지는 저장 작업과 관련된 데이터가 DB에 반영되지 않습니다. Flush Flush는 영속성 컨텍스트에 존재하는 엔티티의 변경 내용을 DB에 반영하는 것을 말합니다. Transaction commit 이 일어날 때, flush 가 동작하고 이때 쓰기 지연 저장소에 쌓아 놨던 insert, update, delete 쿼리들이 실행됩니다. SaveAndFlush Save 메서드와 다르게 실행 중(트랜잭션)에 즉시 데이터를 flush 합니다. 쓰기 쿼리의 호출 시점 차이 Save @Transactional public void sa..
· Spring
save 메서드 동작 원리 save 메서드는 DB에 존재하는 엔티티라면 persist 메서드를 호출하고, 존재하지 않는 데이터라면 merge 메서드를 호출합니다. public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } org.springframework.data.jpa.repository.support.SimpleJpaRepository isNew 메서드는 save 메서드를 호출하시는 시점에 엔티티의 ID 값의 null 여부..
devkimc
'Spring' 카테고리의 글 목록