inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD

POJO 상품 수정 기능 구현하기

ProductService의 updateProduct 로직 질문입니다.

558

ldy_1204

작성한 질문수 1

0

 updateProduct 로직을 보면, 맨 첫줄에

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

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

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

답변 2

0

Jinwoo Cheon

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

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

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

0

인프런 AI 인턴

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

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

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

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

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

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

0

36

1

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

0

127

1

이 방법이 TDD가 맞나요?

0

1110

2

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

0

338

1

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

0

357

1

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

0

457

1

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

0

530

1

통합테스트와 단위 테스트

0

964

1

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

0

400

1

테스트 더블

0

395

1

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

0

487

1

POJO

0

598

1

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

1

545

1

steps 클래스를 사용하는 이유

0

340

1

랜덤 포트를 사용하는 이유

0

1105

1

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

0

877

2

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

0

647

1

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

1

563

1

TRUNCATE TABLE 시 AUTO_INCREMENT 컬럼 1로 초기화

2

3500

1

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

4

1285

1

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

0

1194

1

API 테스트로 전환하기

0

1021

1

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

2

1140

1

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

0

1221

1