개발자
유저 로그인 관련 메서드를 구현하던 중, 예외처리 방법 두가지 중 어느 것이 더 효율적(가독성, 유지보수 측면 등등..)인지 여쭤보고 싶습니다 첫번째 방법: try문에 NotFoundException을 던지고, catch문에서 instanceof를 사용해서 예외의 타입을 확인하고 처리하기 async userLogin(nickname: string, password: string) { try { const user = await this.usersRepository.findOne({ where: { nickname } }); // console.log(user) if (user && (await bcrypt.compare(password, user.password))) { return user; } else { throw new NotFoundException('아이디 또는 비밀번호가 일치하지 않습니다.'); } } catch (e) { console.error(e); if (e instanceof NotFoundException) { throw e; // NotFoundException은 그대로 던지기 } else { throw new InternalServerErrorException('알 수 없는 오류'); } } } 두번째 방법: try문에서는 일반적인 Error객체를 던진 후 catch문에서 error.message를 확인하여 예외 유형을 판단하기 async userLogin(nickname: string, password: string) { try { const user = await this.usersRepository.findOne({ where: { nickname } }); // console.log(user) if (user && (await bcrypt.compare(password, user.password))) { return user; } else { throw new Error('아이디 또는 비밀번호가 일치하지 않습니다.'); } } catch (error) { if (error.message === '아이디 또는 비밀번호가 일치하지 않습니다.') { throw new NotFoundException('아이디 또는 비밀번호가 일치하지 않습니다.'); } else { // 다른 예외 처리 throw new InternalServerErrorException('알 수 없는 오류'); } } }
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 11월 27일
두 방법 모두 적합하나, 가독성과 유지보수 측면에서는 첫 번째 방법이 더 나을 수 있습니다. 첫 번째 방법은 명확한 에러 타입(`NotFoundException`)을 사용하여 예외를 처리합니다. 이렇게 하면 나중에 코드를 읽는 사람(또는 나중에 코드를 수정하는 당신)이 어떤 종류의 예외가 발생할 수 있는지 바로 이해할 수 있습니다. 추가로, 특정 예외를 처리하는 로직이 변경되어야 할 경우, 클래스의 구현만 변경하면 되므로 유지보수하기도 쉽습니다. 반면에 두 번째 방법에서는 `Error` 객체에 메시지를 저장하고, 이 메시지를 파싱하여 에러 타입을 결정합니다. 이것은 실수로 메시지가 변경되었을 때 예상치 못한 버그가 발생할 가능성이 있으며, 코드의 의미를 파악하기 위해 메시지 문자열까지 찾아봐야 합니다. 따라서 첫 번째 방법인 에러 타입을 확인하는 것이 일반적으로 권장되는 패턴입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!