백엔드/실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 4

실전! 스프링 부트와 JPA 활용1 - 상품, 주문 도메인 개발

데이터를 가지고 있는 쪽에 비즈니스 메서드가 있는 것이 좋다. 왜냐하면 응집력이 높아지기 때문이다. 생성로직을 변경할 때 setter를 사용하다보면 다양한 곳에서 값을 변경하게 되어 객체의 일관성이 떨어진다. 엔티티에서 setter를 사용하는 대신에 생성자를 통해 파라미터를 넘기는 것이 좋다. 그래서 protected OrderItem을 사용하면 방지할 수 있다. Lombok 어노테이션을 사용하여 protected 생성자를 생성할 수 있다. cascade (영속성 전이) 부모 엔티티가 영속화 될 때, 자식 엔티티도 같이 영속화 되고 부모 엔티티가 삭제 될 때, 자식 엔티티도 삭제가 되는 등 부모의 영속성 상태가 전이되는 것을 이야기한다. 도메인 모델 패턴 vs 트랜잭선 스크립트 패턴 도메인 모델 패턴: ..

실전! 스프링 부트와 JPA 활용1 - 웹 계층 개발

폼 객체 사용 vs 엔티티 객체 사용 만약 요구사항이 단순하다면 엔티티를 그대로 사용해도 된다. 하지만 실무에서는 요구사항이 단순한 경우가 없다. 요구사항이 복잡해진다면 화면을 처리하기 위한 기능이 증가하게 된다. 결국 엔티티는 유지보수성이 어려워질 것이다. 그래서 API에 맞는 DTO, 폼 객체를 사용하고 엔티티는 최대한 순수하게 유지해야한다. 엔티티를 변경할 때는 항상 원하는 데이터만 변경할 수 있도록 변경 감지 기능을 사용해야한다. 컨트롤러에서 엔티티를 생성하지 말자. 트랜잭션이 있는 서비스 계층에서 식별자 ID와 변결할 데이터를(파라미터 or DTO) 명확하게 전달한다. 트랜잭션이 있는 서비스 계층에서 영속 상태의 엔티티를 조회하고 직접 그곳에서 데이터를 변경한다.

실전! 스프링 부트와 JPA 활용1 - 회원 도메인 개발

package jpabook.jpashop.service; import jpabook.jpashop.Member; import jpabook.jpashop.repository.MemberRepository; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @R..

실전! 스프링 부트와 JPA 활용1 - 도메인 분석 설계

연관 관계 외래 키가 있는 곳을 연관관계의 주인으로 정해라. 엔티티 클래스 개발1 엔티티의 식별자 id를 사용하고 pk칼럼명을 member_id로 사용했다. id라고 작성해도 되지만 테이블의 타입을 구분하기 위해 테이블명 + id를 사용하였다. @Embeddable, @Embedded 중복되는 column들을 객체로 해결한다. @Embeddable 하나로 표현하고자 하는 개념에 해당하는 클래스를 생성한 뒤 클래스 상단에 @Embeddable을 입력한다. @Embedded 객체 필드를 생성하고, 필드 바로위에 @Embedded 어노테이션을 부여하면 된다. @Enumerated EnumType을 사용할 때 쓰는 어노테이션이다. 꼭 @Enumerated(EnumType.STRING)을 사용하도록 하자 defa..