이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 예외 계층 스프링은 예외 추상화를 통해 Repository 계층에서 Service 계층으로 예외가 누수되는 문제를 해결해준다. 스프링의 예외 추상화를 공부하기 전에 먼저 자바의 기본적인 예외와 관련된 내용을 정리하고자 한다. 예외 계층 살펴보기 자바 예외는 Throwable 클래스에서 시작된다. Throwable은 각각 Exception / Error 클래스로 나누어진다. 상위 예외를 Catch로 잡으면 하위 계층의 예외까지 함께 잡힌다. Throwable은 Catch로 잡으면 안된다. Error 예외까지 함께 잡히기 때문이다. → Exception 계층부터 예외를 잡는다. Error 메모리 부족 / 심각한 시스템 오류처럼 어플리케이션이 복구 ..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 스프링 부트의 자동 리소스 등록 스프링 부트가 등장하기 이전에 개발자들은 DataSource와 TransactionManager를 개발자가 직접 스프링 빈으로 등록해서 사용했다. 그런데 스프링 부트로 개발을 시작한 개발자라면 DataSource나 TransactionManager를 직접 등록한 적이 없다. 레거시 스프링 : DataSource + TransactionManager 직접 등록 @Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(URL); dataSource.setUsername(..
이 글은 인프런 김영한님의 강의를 복습하며 정리한 글입니다. 현재까지의 상태 트랜잭션이 없었다 DB 데이터 정합성 문제가 발생함. 트랜잭션을 도입함 → set autoCommit 트랜잭션이 적용되어, 원자 단위로 일이 처리되었다. 각 DB 접근 기술마다 트랜잭션 사용 방법이 다름 → TransactionManager TranscationManager는 트랜잭션 접근 방법을 추상화했다. 이를 통해 Jdbc / JPA 기술에 대한 의존성을 제거했다. 서비스 계층에 Transcation 관련 반복 코드 다수 발생 → TranscationTemplate TranscationTemplate은 트랜잭션의 시작 / Commit / Rollback / 자원회수등을 처리해준다. 1~4번까지 점진적으로 코드의 개선이 있었..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. TransactionTemplate을 통한 코드 개선 public void accountTransfer(String fromId, String toId, int money) throws SQLException { TransactionStatus transaction = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { bizLogic(fromId, toId, money); transactionManager.commit(transaction); } catch (Exception e) { transactionManager.rollback(transaction);..
이 글은 인프런 김영한님의 강의를 수강하고 복습하며 작성한 글입니다. PlatformTransactionManager의 역할 각 DB마다 트랜잭션 접근 방법이 다르기 때문에 트랜잭션 접근의 추상화가 필요했다. 스프링은 PlatformTransactionManager를 통해 이 부분을 추상화 해준다. 여기서 PlatformTransactionManager가 하는 일은 두 가지 일이 있다. 트랜잭션 추상화 리소스 동기화 여기서 트랜잭션을 추상화 하는 방법은 앞선 게시글에서 정리가 되었다. 그렇다면 트랜잭션(리소스) 동기화는 무엇을 의미하는 것일까? 트랜잭션 동기화 트랜잭션을 유지하려면 트랜잭션의 시작 ~ 끝까지 같은 DB 커넥션을 유지해야한다. 이전의 MemberServiceV2에서는 같은 Connectio..