TIL/Project

TIL 2024-11-28 (Trouble Shooting (통화 환율) )

myoma 2024. 11. 28. 22:45

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