웹 계층 개발

2023. 9. 29. 00:06LECTURES/실전! 스프링 부트와 JPA 활용

홈 화면과 레이아웃

홈 컨트롤러 등록

https://github.com/dpdms529/JpaShop/commit/2985a45fd6b7719d8416f7ca39468668edd59e84

타임리프 템플릿 등록

https://github.com/dpdms529/JpaShop/commit/e01ed9675cab4c6a09084d73c06cd5eb0054071c

view 리소스 등록

https://github.com/dpdms529/JpaShop/commit/e5271eb4cdc915607e02bc485249a73ad699a7aa

회원 등록

https://github.com/dpdms529/JpaShop/commit/c596319f7b0cdcccdec9982ccc78e3b77490d699

회원 목록 조회

https://github.com/dpdms529/JpaShop/commit/1223d51880aee4b4898dc39e70bf9448838f0442

상품 등록

https://github.com/dpdms529/JpaShop/commit/774f6c510637c4ed32ad5e710834b899675c1121

상품 목록

https://github.com/dpdms529/JpaShop/commit/b461a65785ebf0aaac3a5093387b5936f573bbfe

상품 수정

https://github.com/dpdms529/JpaShop/commit/04fddae48d5a2fb7f7ca0c23ae61b7ab3145313e

변경 감지와 병합(merge)

준영속 엔티티

  • 영속성 컨텍스트가 더는 관리하지 않는 엔티티
  • DB에 한번 저장되어서 식별자를 가지는 엔티티
  • JPA가 관리하지 않으므로 변경 감지가 일어나지 않음

준영속 엔티티를 수정하는 2가지 방법

https://github.com/dpdms529/JpaShop/commit/ab98c76be2759d5c47bc2cee756822dbe3d36a8c

  • 변경 감지 기능 사용
    • 영속성 컨텍스트에서 엔티티를 다시 조회한 후에 데이터를 수정
    • 트랜잭션 안에서 엔티티를 다시 조회, 변경할 값 선택
    • 트랜잭션 커밋 시점에 변경 감지해서 데이터베이스에 UPDATE 실행
  • 병합(merge) 사용
    • 준영속 상태의 엔티티를 영속 상태로 변경
    • em.merge()

병합 동작 방식

  1. merge() 실행
  2. 파라미터로 넘어온 준영속 엔티티의 식별자 값으로 1차 캐시에서 엔티티를 조회
    • 만약 1차 캐시에 엔티티가 없으면 데이터베이스에서 엔티티를 조회하고, 1차 캐시에 저장
  3. 조회한 영속 엔티티에 변경할 값을 가지는 엔티티의 값을 채워 넣음
  4. 영속 상태인 변경된 엔티티를 반환

병합 주의 사항

  • 변경 기능을 사요하면 원하는 속성만 선택해서 변경 가능
  • 병합을 사용하면 모든 속성이 변경됨
  • 병합시 값이 없으면 null로 업데이트 할 위험이 있음

엔티티를 변경할 때는 변경 감지 사용하는 것을 권장

  • 컨트롤러에서는 엔티티 생성 X
  • 트랜잭션이 있는 서비스 계층에 식별자와 변경할 데이터를 파라미터 또는 dto로 명확하게 전달
  • 트랜잭션이 있는 서비스 계층에서 영속 상태의 엔티티를 조회하고, 엔티티의 데이터를 직접 젼경
  • 트랜잭션 커밋 시점에 변경 감지가 실행

상품 주문

https://github.com/dpdms529/JpaShop/commit/59b167e90801d71590702c2aed54f7f143bbdb38

주문 목록 검색

https://github.com/dpdms529/JpaShop/commit/6d65bcac202d38197f40999c0ad4ef3d3c9c8536

주문 취소

https://github.com/dpdms529/JpaShop/commit/4f9aecae95736c8ecb83cd119f125979481cc3ec

 

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., 스프

www.inflearn.com

'LECTURES > 실전! 스프링 부트와 JPA 활용' 카테고리의 다른 글

지연 로딩과 조회 성능 최적화  (0) 2023.09.29
API 개발 기본 / 고급 준비  (0) 2023.09.29
주문 도메인 개발  (0) 2023.09.29
상품 도메인 개발  (0) 2023.09.29
회원 도메인 개발  (0) 2023.09.29