[Spring] Transactional의 ReadOnly는 왜 써야할까
·
CS/Spring
스프링에서 백엔드 Repository를 구현하다보면 사용하는 어노테이션이 있다.바로 @Transactional! AOP를 활용해서 커밋, 롤백 등 트랜잭션을 관리하는 기능이다.만약 해당 repository에서 읽기작업만 수행할 경우, readOnly=true 속성을 사용하기도 한다.@Transactional(readOnly = true) 위 설정을 통해 성능상의 이점을 가져올 수 있다고 하는데, 좀더 구체적으로 어떤 이점이 있는지 공부해보려고 한다. Transcational과 Dirty ChekingTransactional은 begin()부터 commit()작업 전까지 영속성 컨텍스트를 유지한다.또한, 영속성 컨텍스트로 불러온 Entity의 변경사항을 DB에 바로 적용하지 않고, Dirty Chekin..
[JPA] JpaRepository에서 @Repository 생략이 가능한 이유
·
CS/Spring
두번째 리팩토링의 주제는 @Reposiotry 생략했는데 왜 정상작동? 이다. 과거 MyBatis를 활용해서 프로젝트를 진행했던적이 있다. Controller, Service, Repository 등 클래스들은 어노테이션을 통해 꼭 빈으로 등록했었다(당시에 몇번 빼먹었다가 오류가 나서 수정했던 기억이ㅎ) 그런데 프로젝트의 경우, @Repository 어노테이션을 생략해도 정상적으로 동작하는것을 발견했다. 초반에 작성했던 클래스를 제외하고는 대부분 명시하지 않았다. 구현에 급급하다보니 살피지 못했던 부분이다. 다른점이라면 기술스택으로 인한 차이가 있다. JPA를 채택하고있기 때문에 Repository는 모두 JpaRepository를 extends하는 인터페이스 기반의 레포지토리이다. 그렇다면 지금 발..