이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 예외 전환 시, 기존 예외 체크 예외를 런타임 예외로 바꾼다면, 반드시 기존 예외를 포함해야한다. 기존 예외를 포함하지 않으면 Stack Trace에서 어떤 문제 때문에 실제 예외가 발생했는지 확인할 수 있는 방법이 없어진다. 코드 실습 (StackTraceTest.java) 체크 예외를 런타임 예외로 변경할 때, 체크 예외를 런타임 예외로 반드시 한번 더 감싸준다. 그렇게 해야지만 StackTrace에서 예외 히스토리를 정상적으로 확인할 수 있다. Repository static class Repository{ public void call() { try { runSQL(); }catch (SQLException e){ // 예외를 포함한다 ..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 체크 예외와 언체크 예외는 언제 사용하지? 내가 고려해야 할 수많은 문제 100개가 있다고 가정해보자. 이 때, 이 문제를 모두 해결하기 위한 방법은 하나씩 모든 문제를 처리하는 방법이 있을 것이다. 또 다른 방법은 대원칙을 하나 정하고, 그 대원칙에서 벗어나는 문제들을 하나씩 처리하는 방법이 있을 것이다. 개발자 입장에서는 후자의 방법이 더 좋다. 앞으로 예외를 처리할 때는 다음과 같이 처리하자! 기본적으로 런타임 예외를 사용한다. 런타임 예외를 잘 사용하기 위해 Document에 잘 정리한다. 체크 예외는 비즈니스 로직상 의도적으로 던지는 예외에만 사용한다. 그렇다면 어떤 경우가 체크 예외를 사용하는 예시일까? 계좌 이체 실패 예외 → 비즈..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 예외 계층 스프링은 예외 추상화를 통해 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번까지 점진적으로 코드의 개선이 있었..