inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

벌크성 수정 쿼리

update 관련해서 질문 드립니다.

775

narashine

작성한 질문수 3

1

안녕하세요. 김영한님:)

영한님의 JPA강의를 들으면서 실무에 바로바로 적용하는 중에 있는데요. 

1. 엔티티에 setter를 사용 하지 않고 수정 및 데이터 저장시 entity내에 메소드를 만들어서 사용하는걸 권장해주셨는데, 큰 덩어리(?)에 entity에서 하나의 컬럼만 수정이 될 때도 말씀주신 메소드를 만들어서 사용 하는게 좋을까요? 

2. prodQty = prodQty + 1 이렇게 바로 DB 컬럼만으로 update가 가능한것도 select한 것을 param으로 넘겨서 메소드로 만들어서 하는게 좋은걸까요?

개인적으로 repository내에 @Modifying을 이용해서 만드는게 더 가식적인고, 한개의 업데이트를 사용하기에도 더 편리해보인다는 라는 생각도 들어서요(물론 @Modifying은 벌크성 update에 주로 이용한다고 하셨지만...)

JPA에 익숙하지 않는 습성(?)때문에 그렇게 느껴지는 부분일까요? 더티체킹이라는 JPA는 장점을 살리지 못한 생각일까요?

강의 들을때 이해가 퐉퐉! 되었는데 막상 실무에선 작은것도 많은 고민을 하게 되네요 ㅠㅠ 

감사합니다.

JPA spring java spring-boot

답변 1

4

김영한

안녕하세요. narashine님^^

1. 엔티티에 setter를 사용 하지 않고 수정 및 데이터 저장시 entity내에 메소드를 만들어서 사용하는걸 권장해주셨는데, 큰 덩어리(?)에 entity에서 하나의 컬럼만 수정이 될 때도 말씀주신 메소드를 만들어서 사용 하는게 좋을까요? 

-> 이 경우는 그냥 setter를 사용하셔도 됩니다^^ setter를 과하게 사용하는 것이 문제이지, 실제 하나의 필드만 변경해야 한다면, 사용해도 됩니다. 다만 의미있는 이름을 부여할 수 있는 상황이라면 setter 보다는 의미 있는 이름을 부여하는 것을 추천드립니다.

2. prodQty = prodQty + 1 이렇게 바로 DB 컬럼만으로 update가 가능한것도 select한 것을 param으로 넘겨서 메소드로 만들어서 하는게 좋은걸까요?

-> 

사실 저도 iBatis로 개발을 오랜기간 해왔어서, 처음에 더티체킹 기반으로 애플리케이션을 개발하는 것에 부담이 있어서 충분히 이해가 됩니다^^

그런데 지금은 오히려 update를 위한 별도의 리포지토리 로직을 호출하는게 더 부담이더라구요.

JPA의 데이터 변경은 항상 더티체킹이 우선입니다.

만약 동시성 이슈가 걱정된다면 벌크 연산(jpql update set...)으로 처리하시는 것이 좋습니다.

더티체킹을 기반으로 코드를 작성해보면, 깔끔하게 유지보수 가능한 코드가 나오는지 알 수 있습니다.

그리고 수 많은 update 쿼리가 없어도 되지요.

엔티티를 항상 조회해야 하는 성능 부담도 사실 PK 기반의 데이터 단건 조회이기 때문에 전체 애플리케이션으로 보면 성능에 거의 영향을 미치지 않습니다.

감사합니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

64

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

100

3

MemberRepository 구현체

0

55

1

pdf 표현 질문드립니다.

0

59

1

로그가 남지 않는 문제.

0

78

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

67

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

68

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

88

2

Sort 인터페이스는 잘 사용 안하나요?

0

50

1

스캔대상 질문드립니다.

0

45

1

하이버네이트6에서의 최적화에 이은 질문

0

81

1

save() vs saveAndFlush DB 통신 횟수

0

50

1

순수 JPA 리포지토리 코드 수정부분

0

85

2

bulk연산 후 flush하는 이유를 모르겠어요

0

147

3

bulk insert 질문입니다.

0

174

2

교만했던 것 같아요.

0

142

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

143

2

동적 테이블에 대한 질문

0

84

1

영속성 전이와 연관관계

0

128

2

강의 10:25 질문

0

71

1

단건 update 질문

0

94

2

엔티티 와 도메인의 경계

0

124

1

UsernameOnlyDto 타입 type mismatch 오류

0

114

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

131

1