예외처리가 더 효율적인 코드

23.11.27 11:45 작성 조회수 127

0

유저 로그인 관련 메서드를 구현하던 중, 예외처리 방법 두가지 중 어느 것이 더 효율적(가독성, 유지보수 측면 등등..)인지 여쭤보고 싶습니다

첫번째 방법: 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('알 수 없는 오류');
      }
    }
  }

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.27

안녕하세요, 인프런 AI 인턴입니다.

두 가지 예외처리 방식에 대해서 가독성과 유지보수 측면에서 접근해보겠습니다.

첫 번째 방법(타입 확인 방식)은 명시적으로 에러 타입을 검사하여 에러를 던집니다. 이 방식은 가독성이 좋고, 에러 타입에 따라 다른 처리를 쉽게 구분할 수 있다는 장점이 있습니다. 특히 TypeScript와 같은 타입이 있는 언어에서는 이 방식을 사용함으로써 컴파일 타임에 에러 핸들링의 안정성을 높일 수 있습니다. 하지만 많은 종류의 에러를 핸들링해야 한다면 catch 블록 내부가 길어질 수 있습니다.

두 번째 방법(메시지 확인 방식)은 에러 메시지의 내용을 비교하여 처리합니다. 이 방식은 타입에 의존하지 않기 때문에 유연하게 예외를 처리할 수 있다는 장점이 있습니다. 하지만, 에러 메시지가 변경되었을 경우 해당 문자열을 비교하는 모든 부분을 업데이트해야 하며, 오타나 문자열 일치 오류로 인한 버그가 발생할 수 있어 유지보수 측면에서 취약할 수 있습니다. 또한, 메시지 비교 방식은 일반적으로 타입을 이용한 방식에 비해 가독성이 떨어집니다.

총체적으로 봤을 때, 첫 번째 방법이 타입 스트립트의 장점을 살리면서 가독성이 좋고 에러를 구체적으로 관리하는 측면에서 더 효율적이라고 할 수 있습니다. 일관된 에러 핸들링을 통해 프로젝트의 유지보수성을 높이는 것이 중요합니다. 단, 프로젝트의 요구사항과 팀의 코딩 규약에 맞게 적절한 방식을 선택하는 것이 좋습니다.

이승현님의 프로그래밍에 도움이 되었기를 바랍니다. 추가적으로 궁금한 사항이 있으시면 언제든지 질문해 주세요.