변경감지는 엔티티의 상태 변화를 감지하여 자동으로 데이터베이스에 반영하는 기능을 말합니다. 변경 감지를 통해 개발자는 별도의 SQL 쿼리를 작성하지 않고도 엔티티의 수정 내용을 간편하게 데이터베이스에 반영할 수 있습니다.
Spring Data JPA에는 update 쿼리가 따로 없기 때문에 변경 감지를 통해 update를 수행합니다.
엔티티 조회: JPA를 사용하여 데이터베이스에서 엔티티를 조회합니다. 조회한 엔티티는 영속 상태(Persistent)가 됩니다.
엔티티 수정: 영속 상태의 엔티티를 수정합니다. 이때 JPA는 엔티티의 상태 변화를 추적합니다.
트랜잭션 커밋: JPA는 트랜잭션을 커밋할 때 변경된 엔티티를 감지하고, 데이터베이스에 자동으로 반영합니다.
public ResponseEntity<PostResponse> updatePost(PostRequest postRequest) {
Post post = postRepository.findById(postRequest.getId()).orElse(null);
PostResponse postResponse;
if (post == null) {
postResponse = PostResponse.builder()
.status("FAIL")
.message("존재하지 않는 게시글입니다.")
.build();
return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE).body(postResponse);
}
post.setTitle(postRequest.getTitle());
post.setContents(postRequest.getContents());
post.setUpdateDate(LocalDateTime.now());
postRepository.save(post);
postResponse = PostResponse.builder()
.status("SUCCESS")
.message("게시글이 수정되었습니다.")
.build();
return ResponseEntity.ok(postResponse);
}
위 소스에서 updatePost
서비스 로직을 수행할때
수정된 엔티티는 트랜잭션 커밋 시 변경 감지가 작동하여 데이터베이스에 자동으로 반영됩니다. 변경된 필드만 데이터베이스에 업데이트되기 때문에 효율적인 업데이트가 가능합니다.
이와 같이 JPA의 변경 감지 기능을 사용하면 별도의 SQL 쿼리 작성 없이도 엔티티의 변경 사항을 데이터베이스에 반영할 수 있습니다. 이는 개발자의 생산성을 향상시키고 코드 유지 보수를 간편하게 만들어줍니다.