TIL(Today I Learned)

TIL 53th day

keepgoing 2021. 12. 14. 20:22

@Transactional

  • JPA 데이터 변경 하는 서비스 클래스에 선언해줘야한다.
  • @Transactional(readOnly = true)
    • JPA가 트랜잭션을 읽는 기능만 수행한다.
    • 반면에, 쓰기 기능이 있는 메소드에는 Transactional 어노테이션만 생성한다.(default 값이 false이기 때문)

생성자 주입

  • 필드 주입, 수정자(setter) 주입, 일반 메서드 주입 등이 있지만 생성자 주입이 가장 이상적이다.
    • 수정자 주입은 애플리케이션 실행 도중 변경할 가능성이 매우 희박하기 때문에 잘 사용하지 않는다. 또한 수정하지 않는 것이 더 좋다.
  • 생성자 주입은 개발 중간에 변경할 일이 없기 때문에 좋다.
  • 테스트 코드를 작성 할 수 있다.
  • 의존 관계를 명확히 구분 할 수 있다.(어디에 의존하는지)
  • 생성자가 1개일 뿐일 떄는 @Autowired를 생략해도 좋다.
  • 변경할 일이 없기 때문에 필드를 final로 선언하는 것이 좋다.
  • @RequiredArgsConstructor를 선언하여 final이 붙은 필드의 생성자를 자동으로 생성해준다.
  • 스프링 데이터 JPA에선 @PersistentContext를 지우고 클래스 위에 @RequiredArgsConstructor를 선언할 수 있다.

@RunWith, @SpringBootTest

  • 스프링과 테스트를 integration 해준다.

@Transactional

  • DB 롤백 어노테이션

@Rollback(false)

  • @Transactional이 커밋하지 않고 롤백시키는걸 막아줄 수 있는 어노테이션
  • insert 구문을 보고싶을 때 사용