@Transactional

    [Spring] Select에 @Transaction을 사용하는 이유

    '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 공부하던 중 궁금한 점이 생겨 이를 정리하고자 한다. @Transactional(readOnly = true) public List findAllDesc(){ return postsRepository.findAllDesc().stream()// postsRepository의 결과로 넘어온 Posts의 stream을 .map(PostsListReponseDto::new) // map을 통해 PostsListResponseDto로 변환하고 .collect(Collectors.toList()); // 이를 List로 반환하는 메소드 } 위의 코드를 보면, DB에서 posts들을 Select하는 메서드이다. 하지만 @Transactional(readOnly ..

    [Spring] 영속성 컨텍스트와 @Transactional 어노테이션

    들어가기에 앞서 스프링 Todo List 프로젝트 중 JPA의 Dirty Checking 기능이 작동하지 않아 이유에 대해 함께 프로젝트를 진행 중이던 팀원에게 물어보니, @Transactional을 Update Service에 붙이지 않아서 Dirty Check가 이루어지지 않았다는 사실을 알려주었다. 단순히 @Transactional은 오류 발생 시 롤백을 위함으로 알고 있던 나에게는 충격으로 다가왔다. 그렇기에 @Transactional 어노테이션에 대해 제대로 정리를 해야겠다는 생각을 하게 되었다. @Transactional과 영속성 컨텍스트에 대해 알아보기 전에 먼저 JPA의 Dirty Checking 기능에 대해 알아보겠다. JPA Dirty Checking JPA는 Entity Manager..