본문 바로가기
Spring/boot

[JPA] DB의 data가 update 되는 플로우 정리

by 코딩균 2022. 2. 18.

유져가 회원가입을 완료한 후에 마이페이지 같은 곳에서 자신의 정보를 바꾼다고 가정

JPA는 이러한 update 에서 어떠한 과정을 거치는가에 대해 정리해보려 한다

 

예시 코드

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor // final에 해당되는 필드에 대한 constructor 자동 생성 어노테이션
public class UserService{

	private final UserRepository userRepository;
    
	@Autowired // constructor injection
		public UserService(UserRepository userRepository){
    		this.userRepository = userRepository;
        }
    
 
 	@Transactional
	public void update(Long id, String name){
    		User user = userRepositroy.findById(id);
    		user.setName(name);
        }
}

update service 메소드를 살펴보며 JPA 의 동작과정 이해하기

  1. findById - id 값을 가지고 영속성 컨텍스트 1차 캐시를 살펴본다
  2. findById - 영속성 컨텍스트에 영속 entity가 없다면 DB에서 가져와 영속 entity로 만든다
  3. setName - 영속 entity에 변화를 주어서 JPA가 변경 감지를 하도록 한다
  4. transaction - 변경이 감지되고 spring AOP가 동작하면서 transaction이 끝나는 시점에서 영속성 컨텍스트에서 flush가 발생
  5. transaction - transaction commit