JPA 변경 감지(Dirty Checking)

청포도봉봉이·2023년 6월 27일
0

Spring

목록 보기
20/35
post-thumbnail

변경 감지(Dirty Checking)

변경감지는 엔티티의 상태 변화를 감지하여 자동으로 데이터베이스에 반영하는 기능을 말합니다. 변경 감지를 통해 개발자는 별도의 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 쿼리 작성 없이도 엔티티의 변경 사항을 데이터베이스에 반영할 수 있습니다. 이는 개발자의 생산성을 향상시키고 코드 유지 보수를 간편하게 만들어줍니다.

profile
서버 백엔드 개발자

0개의 댓글