[66해빗 페이백 챌린지] 26일차

tree·2023년 5월 28일
0

트랜잭션 문제 해결 - 트랜잭션 AOP 적용

  • @Transactional은 메소드, 클래스에 붙힐 수 있다.
    • 클래스에 붙히면 외부에서 호출 가능한 public 메서드에 모두 트랜잭션 AOP가 적용.
  • @Transactional을 적용해 트랜잭션 AOP를 사용하기 위해서는 스프링 컨테이너가 필요하다.
    • @Transactional이 적용된 클래스를 테스트할 때도 @SpringBootTest를 적용해 스프링 컨테이너를 사용해 테스트해야 한다.
  • @TestConfiguration
    • 테스트 안의 내부 클래스에 이걸 붙히면 추가적인 빈 설정이 가능하다.

트랜잭션 문제 해결 - 트랜잭션 AOP 정리

  • 선언적 트랜잭션 관리 vs 프로그래밍 트랜잭션 방식
    • 선언적 트랜잭션 관리(Declarative Transaction Management)
      • 어딘가에 트랜잭션을 사용하겠다고 선언해두면 트랜잭션이 적용되는 방식
      • @Transactional, XML 설정 등
    • 프로그래밍 트랜잭션 관리(Programmatic Transaction Management)
      • 개발자가 직접 트랜잭션 처리 코드를 직접 작성하는 방식
      • 트랜잭션 매니저, 트랜잭션 템플릿 등

스프링 부트의 자동 리소스 등록

  • 스프링 부트는 application.properties를 참고해 데이터 소스와 트랜잭션 매니저를 자동으로 등록한다.

    • 개발자가 직접 등록하는 경우에는 스프링 부트가 자동으로 등록하지 않는다.
  • 데이터 소스 자동 등록

    • 기본적으로 커넥션 풀을 제공하는 HikariDataSource를 등록한다.
    • 만약 application.propertiesspring.datasource.url 속성이 없으면 내장 DB를 생성한다.
  • 트랜잭션 매니저 자동 등록

    • 등록된 라이브러리에 맞게 적절한 PlatformTransactionManager 구현체를 등록한다.

예외 계층

  • Throwable
    • 예외 계층의 최상위
    • 예외 잡을 때, Throwable로 잡으면 안 된다. Error도 같이 잡히기 때문이다.
  • Error
    • 애플리케이션에서 복구 불가능한 시스템 예외
  • Exception
    • 체크 예외
    • 예외 처리가 되어있는지 컴파일러가 체크한다.
  • RuntimeException
    • 런타임 예외
    • 예외 처리를 컴파일러가 체크하지 않는다.

예외 기본 규칙

  • 기본 규칙
    1. 예외는 잡아서 처리하거나 밖으로 던짐.
    2. 잡거나 던질 때, 지정한 예외의 자식까지 모두 잡음.
  • 예외를 처리 못하면 WAS가 받아서 처리(주로 오류 페이지 보여줌)

0개의 댓글