I can do it(Feat. DEV)

예약 관련 프로세스 오류 처리 본문

개발자 모드/오류처리

예약 관련 프로세스 오류 처리

까짓거 해보자 개발자 2022. 10. 14. 14:16
728x90

시설을 대관해주는 사이트를 개발하여 유지보수를 맡고 있었는데

시설이 사용 중이 아닌데 예약이 되었다는 담당자의 연락을 받음.

 

사용자 화면에서 예약 1, 예약 2 화면이 있는데

시설이 사용 중이지 않으면 예약 1 화면에서 예약 2 화면으로 넘어가지 못하도록 처리를 했었음(개발 당시).

사용자가 뚫은 건지 오류 때문인지 확실히 알 수 없으나,

재발하면 안되는 상황이기에 처리가 필요했음.

먼저 react를 사용한 뷰단에 처리를 시작할려는데, react는 데이터를 주고받는 게 rest ful API형태라서

jsp 같이 화면에서 화면으로 넘어갈 때 처리를 할 수가 없었음.

 

고심 끝에 이와 같이 처리하기로 함.

1. 예약 1 화면 > 예약 2 화면으로 넘어갈 때 클릭 이벤트 맨 위에 시설의 사용 유무를 판단하여 처리.
    if (!facility.enabled) {	//시설이 사용중이지 않다면  
        alert("현재 예약가능한 시설이 아닙니다.");
        history.push({	//시설목록화면으로 return
            pathname: "/sisulSearch/" + facility.type.id
        });
        return;
    }

 

2. 예약 2 화면에서 예약 데이터를 insert 할 때 서버 쪽에서 시설 사용 유무를 판단하여 true/false를 리턴하여 처리.
//서버 코드(예약 isnert하는 메소드 부분)
if(!rent.getFacility().isEnabled()){    //시설이 사용중이지 않다면 null 리턴
    return null;
}
axios.post(url, {data})	//해당 부분은 실제 코드가 아님.
    .then(response => {
        if (
            response.data 	//서버와 통신했을 때 data가 있으면 예약완료
        ) {
            history.push({
                pathname: "/rent/result",
                state: {
                    result: response.data
                }
            });
        } else {   	//시설 미사용으로 인해 null을 받으면 에러창 표시 후 시설목록화면으로 리턴
            alert(
                "해당 시설 예약이 가능하지 않거나 예약 신청에 오류가 발생하였습니다. 관리자에게 문의해주세요."
            );
            history.push({
                pathname:
                    "/sisulSearch/" + rent.facility.type.id
            });
        }
    })

2번은 결과적으로 뷰단과 서버단 모두 처리를 한 것임.

이와 같이 처리한 이유는 먼저 사용자 편의 때문임.

예약을 하는데 예약 1 화면> 예약 2 화면까지는 잘 넘어갔는데 마지막 예약 완료 때 실패 처리가 되면,

사용자 입장에서는 불만이 나올 것이고 결국 코드를 수정해야 할 수 있음.

두 번 째는 예약을 할 때 오류가 난 것이라서 결국 예약을 insert 할 때 체크하는 게 로직 상 깔끔하다고 생각했음.

이상 끝. 이제 똑같은 오류는 안 떴으면..

728x90