Replies: 3 comments 3 replies
|
수고하셨습니다 ~~ 👍 |
1 reply
|
수고하셨습니당 !! |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
스프링과 문제 해결 - 예외 처리, 반복
1️⃣ 체크 예외와 인터페이스
✅ 인터페이스 도입
이렇게 인터페이스를 도입하면 MemberService는 MemberRepository 인터페이스만 의존하면 된다.
구현 기술을 변경하고 싶으면 DI를 사용해서 MemberService코드의 변경 없이 구현 기술을 변경할 수 있다.
MemberRepository 인터페이스
✅ 특정 기술에 종속되는 인터페이스
2️⃣ 런타임 예외 적용
✅ 예외 변환
✅ 남은 문제
3️⃣ 데이터 접근 예외 직접 만들기
✅ H2 데이터베이스의 키 중복 오류 코드
✅ H2 데이터베이스 예시
23505 : 키 중복 오류
42000: SQL 문법 오류
MyDuplicateKeyException
같은 ID를 저장했지만, 중간에 예외를 잡아서 복구한 것을 확인할 수 있다.
리포지토리 중요한 부분
e.getErrorCode() == 23505 :오류코드가 키 중복 오류(23505)인경우
MyDuplicateKeyException을 새로 만들어서 서비스 계층에 던진다.
나머지 경우 기존에 만들었던 MyDbException 을 던진다.
서비스에 중요한 부분
✅남은 문제
데이터베이스가 전달하는 오류는 키 중복 뿐만 아니라 락이 걸린 경우, SQL 문법에 오류 있는 경우 등등 수십 수
백가지 오류 코드가 있다. 이 모든 상황에 맞는 예외를 지금처럼 다 만들어야 할까? 추가로 앞서 이야기한 것 처럼
데이터베이스마다 이 오류 코드는 모두 다르다.
4️⃣ 스프링 예외 추상화 이해
스프링은 데이터 접근과 관련된 예외를 추상화해서 제공한다.
스프링 데이터 접근 예외 계층
✅스프링이 제공하는 예외 변환기
스프링은 데이터베이스에서 발생하는 오류 코드를 스프링이 정의한 예외로 자동으로 변환해주는 변환기를 제공한다.
SpringExceptionTranslatorTest - 추가 exceptionTranslator
스프링은 예외 변환기를 제공한다.각각의 DB마다 SQL ErrorCode는 다르다. 스프링은 어떻게 각각의 DB가 제공하는 SQL ErrorCode까지 고려해서 예외를 변환할 수 있을까 ?
sql-error-codes.xml
✅ 정리
5️⃣ 스프링 예외 추상화 적용
추가된 부분
MemberRepositoryV4Test - 수정
✅ 정리
6️⃣ JDBC 반복 문제 해결 - JdbcTemplate
반복 문제를 해결해보자.위와 같은 반복 문제를 해결 할 수 있는 방법은 JdbcTemplate를 사용하면 없앨 수 있다.
MemberRepositoryV5
✅ 정리
JdbcTemplate으로 대부분 제거되었다.🔗 출처
All reactions