inflearn logo
강의

講義

知識共有

本当! Spring Bootの商品 - 注文API開発で学ぶTDD

POJO商品修正機能の実装

ProductService의 updateProduct 로직 질문입니다.

556

2dongyeop

投稿した質問数 1

0

 updateProduct 로직을 보면, 맨 첫줄에

productPort.getProduct로 조회를 해온 뒤
product.update(~~~)로 변경을 하면, 변경 감지가 일어날텐데

굳이 save를 호출하신 이유가 뭐에용??

tdd spring-boot pojo 소프트웨어-테스트 api

回答 2

0

Jinwoo Cheon

저도 궁금하긴 하네요. 제 생각은,

변경 감지를 위해서는 트랜잭션을 만들어야 하는데(@Transactional 등), 그럴 필요가 없어 보이기 때문이라고 생각합니다.

굳이 명시적 트랜잭션을 통해서 조회와 수정을 트랜잭션으로 묶을 필요가 없지 않은가 생각됩니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴이에요.

updateProduct 메서드에서 getProduct로 조회를 해온 뒤에 변경사항을 update할 때 변경 감지가 일어날텐데 굳이 save를 호출하는 이유는 두 가지가 있습니다.

첫 번째는 만약 변경사항이 없다면 update 메서드가 호출되지 않습니다. 따라서 save를 통해 변경사항이 있을 때만 DB에 저장할 수 있습니다.

두 번째는 product.update(~~~) 메서드에서 update 쿼리를 수행할 때 미리 로딩된 영속성 컨텍스트 내의 엔티티와의 차이를 감지하면서 변경 사항을 찾아 update 쿼리를 만들게 됩니다. 하지만 만약 영속성 컨텍스트와 불일치하는 엔티티가 있다면, JPA에서는 그 객체의 변경 내역을 추적할 수 없기 때문에 save를 호출하여 새로운 엔티티를 생성해줌으로써 문제를 해결해줄 수 있습니다.

이처럼 save를 호출하는 이유는 두 가지 이유가 있을 수 있습니다. 이번 예제에서도 두 가지 이유가 모두 있을 수 있으니 참고해주세요. 감사합니다.

POJO에서 Spring Test로 넘어갈 때 누락(해결됨)

0

33

1

DatabaseCleanup 코드입니당 필요한 분들 쓰세요

0

125

1

이 방법이 TDD가 맞나요?

0

1109

2

POJO로 개발했는데 비즈니스 로직을 로깅해야 할 경우, 어떻게 해야 할까요?

0

337

1

generate -> add Dependency 이 메뉴가 안보이던데, 어떻게 보이게할까요?

0

355

1

실무 Asserta 사용여부가 궁금합니다.

0

455

1

테스트 코드 내의 지역변수를 final로 선언하는 이유가 궁금합니다.

0

530

1

통합테스트와 단위 테스트

0

964

1

의존성 및 설계? 부분 질문드립니다.

0

400

1

테스트 더블

0

394

1

리뷰반영 강의에서 shortcut ctrl + esc 는 어떻게 설정하나요?

0

483

1

POJO

0

597

1

POJO 상품 등록 기능 구현하기 강의 질문

1

543

1

steps 클래스를 사용하는 이유

0

340

1

랜덤 포트를 사용하는 이유

0

1104

1

상품등록 API 개발, JPA로 변환하기 에서

0

875

2

패키지 구조에 대해서 궁금합니다!

0

645

1

BeforeEach 를 하위 클래스에서 다시 사용하는것에 대해서 질문 드립니다.

1

562

1

TRUNCATE TABLE 시 AUTO_INCREMENT 컬럼 1로 초기화

2

3498

1

POJO로 개발 후 스프링으로 전환, 이후 JPA 전환하는 이유

4

1283

1

TestRestTemplate 대신에 RestAssured를 사용하는 이유가 있을까요?

0

1190

1

API 테스트로 전환하기

0

1019

1

코드 스타일에 대해서 질문드립니다.

2

1138

1

혹시 강의 중에 나오는 플러그인 좀 알 수 있을까요

0

1221

1