jpa repostiory의 메서드를 사용 -> @Transactional 없이도 DB에 반영
update 메서드 -> @Transactional 사용해야 반영
스프링 데이터 JPA가 제공하는 Repository의 모든 메서드는 기본적으로 트랜잭션이 적용되어있다.
=> JPA Entity Manager는 기본적으로 PersistenceContextType.TRANSACTION 로 사용됨
@Transactional 어노테이션이 붙은 경우에만 예외 발생 시 롤백이 수행된다.
Service가 Service를 주입받으면 순환참조가 생길 가능성이 높음
필드 주입방식, Setter 주입방식에서의 순환참조
: 실행 시 예외 발생 x -> 메서드가 순환호출 되고, 호출되는 시점에 예외 발생
생성자 주입방식에서의 순환참조
: A 클래스와 B 클래스가 서로 의존하는 상황 -> A 클래스의 Bean을 만드는 과정에서 B 클래스의 Bean이 필요해 B 클래스의 Bean을 먼저 생성하려고 한다. 하지만 B 클래스의 Bean을 만드는데에 A 클래스의 Bean이 필요하기 때문에 결국 어떠한 Bean도 생성하지 못하는 문제
: 실행 시 예외 발생 o
-> 애초에 순환참조가 발생할 수 있는 구조로 만들지 않는다
-> @Lazy 어노테이션을 사용해 임의로 해결한다(비추)
(어플리케이션 로딩 시점이 아니라 해당 Bean이 필요한 시점에 주입을 받기 때문에 특정 HTTP 요청을 받았을 때 Heap 메모리가 증가할 수 있으며 메모리가 충분하지 않을 경우 장애가 발생할 수 있기 때문)