예외처리 4

외부 시스템에 덜 의존하게 만들기

이전 글 예외처리에 대한 잡설에 이어서 지난 몇 달 간 아파트 입주민이 사용하는 방문예약 시스템을 개발했다. 입주민이 방문 차량을 예약하면 우리 시스템은 아파트 차단기를 관리하는 외부 시스템에 요청을 보내서, 예약된 차량이 간편하게 입차할 수 있게 하는 서비스다. 이 시스템의 아이덴티티는 예약하면 차단기가 열린다는 것이다. 그런데 우리는 차단기 회사가 아니고 차단기로 예약을 요청을 대신 보내주는 대리자 역할이다. 따라서 외부 시스템에 크게 의존적일 수밖에 없는 서비스다. 플로우는 복잡하지 않는데 간략하게 설명하면 세 단계로 볼 수 있다. 사용자가 앱에서 방문 차량을 예약한다. 메인 서버에서 방문 예약 서버로 요청을 위임한다. 방문 예약 서버는 외부 시스템인 차단기 관제 서버에 예약 내역을 전송한다. 사용..

ERROR!!!!!!! 2022.07.13

예외처리에 대한 잡설

예외처리에 대해 별 생각 없었다. 문제 생기면 throw 날리고, Advice에서 적절히 변환해서 클라이언트에 전달하면 되는 거 아닌가? 이런 생각은 서비스에 대한 몰이해에서 오는 것 같다. 예외처리는 그렇게 간단하지 않다. 오히려 몹시 까다로운 영역이다. 내가 담당하는 방문차량 예약 서비스에서 자주 발생하는 예외는 이렇다. 사용자가 예약을 신청함. 시스템은 예약이 들어오면 단지의 차단기 서버로 예약 내역을 전송함. 이때 차단기 서버가 죽어있음. 차단기 서버는 우리가 관리할 수 있는 영역이 아니다. 또 우리는 정확히 어떤 이유로 요청이 전송이 안 되는 것인지 알 수도 없다. Connection time out이 발생하면 단지 저쪽 서버에 문제가 생겼다고 추측할 수 있을 뿐이다. 그러면 차단기 서버 관제사..

메모 2022.05.05

@ControllerAdivce를 사용한 예외 처리 로직 분리

@ControllerAdvice를 사용하여 예외처리 로직 분리하기 과제 프로젝트를 개선하면서 받은 피드백 중 하나는 @ControllerAdvice를 통해 예외 처리 로직을 분리하라는 것이었습니다. 아래 코드를 보면 예외를 잡고 발생하는 예외마다 다른 Http Status code를 반환했습니다. 예시 코드 @PostMapping fun requestApartmentToBeMoved(@RequestBody apartmentRequest: ApartmentRequest, httpSession: HttpSession) : ResponseEntity { logger.info("apartmentRequest:{}", apartmentRequest) z try { val apartment = apartmentVi..

Spring 2021.05.15

예외처리

예외 Exception 이미지 출처 예외 클래스 다이어그램 자바에서 에러는 크게 두 갈래로 나눌 수 있다. error exception 예외exception는 처리할 수 있지만, 에러는 손 쓸 방법이 없다. Exception은 RunTimeException과 그 외 Exception 두 갈래로 다시 나뉜다. 다이어그램을 자세히 보면 RuntimeException은 Unckecked, 그 외 Exception은 Checked라고 표시되어 있다. checked - unchecked check : 컴파일러가 예외 체크 (Exception클래스) unchecked : 컴파일러가 예외 체크 x (RuntimeException) 언체크드 예외인 RuntimeException은 선택적으로 처리할 수 있다. 그러니까 ..

Java 2020.09.10