본문 바로가기

Spring&SpringBoot/<토비의 스프링 3.1 Vol1.1>, 이일민29

DB 종류로부터 예외 추상화하기 (feat. SQLExceptionTranslator 뜯어보기) 목차 1. 개요 2. DB 종류 추상화하기 3. SQLException -> DataAccessException : 예외 전환 4. JdbcTemplate의 DB 추상화 전략 : 데이터베이스 벤더의 오류 코드 활용해서 예외 포장하기 5. JdbcTemplate에서 예외 전환 찾기 6. SQLExceptionTranslator 분석하기 - a. 예외 판단에 필요한 정보를 가진 클래스 확인 - b. 템플릿 메소드 패턴 적용하여 번역기의 에러 매핑 코드 추상화 - c. 커스텀 예외 정의해보기 : 세 가지 방법 소개 7. 마치며 개요 스프링이 제공하는 DataAccessException은 DB 종류나 데이터 액세스 기술 종류의 차이를 추상화한다. DB 종류 추상화에서는 JdbcTemplate이 SQLExcept.. 2023. 3. 26.
좋은 예외 처리에 대한 고찰 예외에 대한 오해와 진실 좋은 예외 처리 방법을 살펴보기에 앞서, 체크 예외와 런타임 예외에 대해서 내가 가지고 있던 오해들을 해결해보고자 한다. 보시는 분은 답답할 수 있겠지만.. 이건 나를 위한 공부니까요.. 썰 풀어보겠습니다. 복구 불가능한 체크 예외? 이건 사실 이전 게시글 내용을 작성하면서 해소한 의문이다. 그래도 정리해봐야지. 분명히 체크 예외는 복구할 가능성이 있는 상황을 가정한다고 했다. 그런데 책을 읽을수록 이게 웬걸? SQLException은 체크 예외인데 복구할 수 있는 방법이 없다네? 그럼 이걸 대체 왜 체크 예외로 만든거야? 물음표 백만개인 상태로 쭉 읽었다. 알고보니 자바 초기에 사용되던 독립형 애플리케이션에서는 상황에 대한 복구 가능성보다는 복구 강제에 초점을 둔 것 같다. 그.. 2023. 3. 21.
낙관적인 예외 처리 이번주에 토비 4장 예외를 읽으면서 정말 많은 생각을 했다. 머리속에 안개가 낀 것처럼 막막했는데 조금씩 풀어보려고 한다. 지금까지 예외에 대해서 깊이 고민해본 적 없이, 프로그래머의 의도와 다르게 동작하는 모든 상황에 대해 무조건 예외를 던졌는데 반성한다. 첫번째 절에서는 예외의 종류와 처리 방법, 예외 처리 전략을 다루었다. 추가적으로 예외에 대한 조사를 하면서 어떻게 하면 예외를 잘 사용할 수 있을지 고민한 내용을 공유해보도록 하겠습니다. (이 내용은 다음 게시물에 이어집니다) Error vs Exception 에러와 예외의 차이는 프로그램에서의 처리 가능 여부다. 에러는 프로그램에서 처리할 방법이 없지만, 예외는 프로그램에서 처리가 가능하다. Error java.lang.Error 클래스의 서브클.. 2023. 3. 21.
JdbcTemplate에서 콜백 찾기 스프링은 Jdbc를 이용한 dao에서 사용할 수 있도록 준비된 다양한 템플릿과 콜백을 제공한다. 자주 사용되는 패턴을 가진 콜백은 다시 템플릿에 결합시켜서 간단한 메소드 호출만으로 사용이 가능하도록 만들어져있다. 공식 문서 Data Access Data Access The Data Access Object (DAO) support in Spring is aimed at making it easy to work with data access technologies (such as JDBC, Hibernate, or JPA) in a consistent way. This lets you switch between the aforementioned persistence technologies fairly ea.. 2023. 3. 13.
콜백 분리 연습 3장 5절에서 Calculator 예제를 이용해 콜백(반복되지 않는 부분)을 분리하는 연습을 했다. 텍스트 파일의 숫자를 한줄씩 읽어 누적합과 누적곱 계산, 문자열처럼 연결하는 기능을 구현했다. 세 단계를 거쳐서 콜백을 분리했다. 콜백 분리 : 리소스 생성, 예외 처리, 리소스 닫기로 구성된 변하지 않는 부분으로부터, 파일 내용으로 무언가를 하는 변경되는 부분을 분리했다. Row 콜백 분리 : 라인을 하나씩 읽어 기존값에 연산을 적용하는 변하지 않는 부분으로부터, 합 혹은 곱이 적용되는 연산 종류를 분리했다. 콜백에 제네릭 적용 : 라인을 하나씩 읽어 기존값에 연산을 적용하는 변하지 않는 부분으로부터, 타입과 연산 종류를 분리했다. (제네릭 타입 콜백) 중복이 발생한 코드의 모습 filePath를 인자로.. 2023. 3. 13.
반복되는 부분으로부터 반복되지 않는 부분을 분리하는 패턴 동일한 목적을 수행하는 세 가지 패턴 코드를 작성하다보면 반복되는 요구사항에 대해 중복된 코드가 만들어지기 마련이다. 중복 코드는 가시적인 코드 스멜의 주범이다. 이 문제를 해결하기 위한 디자인 패턴을 알아보자. 반복되는 부분과 반복되지 않는 부분을 분리하기 위한 패턴은 총 세 가지다. (1) 전략 패턴 (2) 템플릿 메소드 패턴 (3) 템플릿 콜백 패턴. 목적이 동일하므로 필요로 하는 역할도 동일하다. 반복되는 부분을 담는 역할, 반복되지 않는 부분을 담는 역할, 이 둘의 의존성을 주입하는 역할, 그리고 이 연결관계가 만들어진 두 객체를 사용하는 역할이다. 세 가지 패턴을 구분하는 것은 구현 방법이다. 목적은 동일하지만 구현 방법이 약간 다르다. 전략 패턴은 인터페이스를 두어 전략 클래스를 구현하고, .. 2023. 3. 13.