728x90
반응형
사용자가 특정 차트를 고르면, 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개를 골라 사용자에게 보여줍니다.
비슷한 차트 검색기
전 종목의 최근 10년간 모든 차트를 탐색합니다. 내 종목의 차트는 과연 상승하는 차트일까요?
www.similarchart.com
김영한 개발자님의 실전! 스프링 부트와 JPA 활용 1 - 웹 애플리케이션 개발 강의를 수강하고 중요한 점이나 인상깊었던 점들을 요약, 정리했습니다.
도메인 분석 설계
개발을 하는 것만큼, 설계도 그 이상으로 중요한 것 같습니다.
엔티티 분석
살펴볼 점
MEMBER
와DELIVERY
엔티티의Address
임베디드 타입 정보가 테이블에 그대로 들어감- 카테고리와 상품은
@ManyToMany
지만, 중간 테이블에 컬럼을 추가할 수 없고, 세밀한 쿼리가 어려워 실무에서는 사용하면 안 됨 - 외래 키가 있는 곳을 연관관계의 주인으로 정해야 함
- 값 타입은 변경 불가능하게 설계해야 함.
- 엔티티에는 가급적
Setter
사용 X - 컬렉션은 필드에서 바로 초기화하는 것이
null
문제에서 안전
변경 감지와 병합
준영속 엔티티
: 영속성 콘텍스트가 더는 관리하지 않는 엔티티. 임의로 만들어낸 엔티티도 DB에 한번 저장되어서 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다.
준영속 엔티티를 수정하는 2가지 방법
1. 변경 감지 기능 사용
@Transactional
void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다.
findItem.setPrice(itemParam.getPrice()); //데이터를 수정한다.
//트랜잭션 커밋 시점에 변경 감지(Dirty Checking)가 동작해서 데이터베이스에 UPDATE SQL 실행
}
2. 병합 사용
@Transactional
void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item mergeItem = em.merge(itemParam);
}
준영속 엔티티의 식별자 값으로 조회해 온 영속 엔티티에 준영속 엔티티의 값을 밀어 넣는다. 이후 변경 감지가 동작해 변경됨
주의
- 병합은 변경 감지와 달리 모든 속성이 변경되어 값이 없으면
null
로 업데이트될 위험이 있다. - 컨트롤러에서 어설프게 엔티티를 생성하면 안 됨
- 엔티티를 변경할 때는 항상 변경 감지를 사용
- 트랜잭션이 있는 서비스 계층에 식별자(id)와 변경할 데이터를 명확하게 전달
반응형
'스프링' 카테고리의 다른 글
실전! 스프링 데이터 JPA 강의 듣고 정리(23.2.25) (0) | 2024.02.16 |
---|---|
스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 강의 듣고 정리(23.2.24) (0) | 2024.02.16 |
JPQL(객체지향 쿼리 언어)(23.2.23) (0) | 2024.02.16 |
자바 ORM 표준 JPA 프로그래밍 기본편 듣고 정리(23.2.21) (0) | 2024.02.16 |
스프링 DB 2편 정리, 스프링 공부 프로젝트를 마치며 (22.9.3) (0) | 2024.02.14 |