1 ) BigDecimal?
- 배경
- 처음 중간 테이블은 UserCurrency Entity를 생성할 때 금액 관련 필드를 모두 Double로 선언.
- 상황
- ExchangeService에서 환전 요청 Service 로직 코딩 중 환율 계산에서 Type Error 발생, 새로 만들었던 UserCurrency Eutity에선 Double로 선언되어 있는데 Currency에 선언된 환율은 BigDecimal로 선언되어 있어 타입 Error 발생과 사칙연산 사용불가능.
- 해결
- 기존에 먼저 작성되어 있던 rate의 타입인 BigDecimal로 다른 entity의 금액 관련 타입 변경 후에 BigDecimal의 계산법을 검색하여 찾은 뒤 코드 수정, 사용법은 두 개의 나눌 수를 각각 적어주고 가운데 '2' 는 소수점 자리 수를 의미하고 그 뒤에 ROUND_HALF_UP은 말그대로 반올림이다. 즉 소수점 2번째 자리에서 반올림 한다는 의미이다.
BigDecimal exchangeAmount = amountInKrw.divide(exchangeRate, 2, BigDecimal.ROUND_HALF_UP);
- 결론
- BigDecimal을 선택한 이유는 Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수라는 글을 보고 선택하게 되었고 접해본 적 없는 타입이기에 경험치를 쌓고 싶어서 선택하였다.
- 수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이 유실될 위험이 있다는 것을 알았으며 BigDecimal 사용 방식을 알 수 있었다.
2) API 예외처리 : GlobalException?? CustomException??
- 배경
- API 예외처리를 하기위해 GlobalException을 처음 사용하였고 작동 순서 및 원리가 내가 이해한 것이 확실한가 해서 튜터님에게 도움을 요청하여 내가 이해한 방식에 대해 설명을 하여 맞는지 확인하였다.
- 상황
- 기존에 illegalArgumentException으로 처리를 하면 예상치 못한 Exception에서 엉뚱한 에러 문구가 나올 수 있다는 튜터님의 말씀과 동시에 CustomException으로 직접 처리하는 방식이 좋다는 말씀과 동시에 시도하였으나 생각처럼 되지 않음.
- 직접적은 Error 코드를 사용하기 위해 여러 블로그를 찾아본 결과 enum을 이용하여 Errorcode를 직접 입력하여 문구를 정할 수 있었으며 CustomException에 RuntimeException을 상속시켜 사용.
- handler 작성 도중 Response가 없어 반환이 안되는 문제 발생.
- 해결
- 다시 여러 블로그를 찾아보니 ErrorResponse를 따로 만들어주어 반환해주는 방식을 선택.
- ErrorCode 객체를 받아서 ErrorResponse를 생성하고, 이를 ResponseEntity로 감싸 반환하며 이를 통해 에러 응답을 HTTP 형식으로 클라이언트에 전달할 수 있는 Response 생성.
- 결론
- 기존에 강의에서 들었던 GlobalException만 사용하는 방식에선 여러 클래스가 필요하지 않았지만 CustomException을 사용하기 위해서 여러 클래스가 필요한 것을 느꼈으며 순서대로 코딩을 하며 그 순간 필요한 클래스 또는 메서드를 생성하며 작업하는 능력을 기를 수 있었다.
'TIL > Project' 카테고리의 다른 글
TIL 2024-12-05 (outsourcing 2일차) (2) | 2024.12.05 |
---|---|
TIL 2024-12-04 (outsourcing 1일차) (1) | 2024.12.04 |
[KPT 회고록] (project : todo-log) (0) | 2024.11.25 |
TIL 2024-11-21 (todo-log 3일차) (0) | 2024.11.21 |
TIL 2024-11-20 (todo-log 2일차) (0) | 2024.11.20 |