inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

해결된 질문

263

네스트

작성한 질문수 2

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('알 수 없는 오류');
      }
    }
  }

node.js 백엔드 예외처리

답변 1

0

인프런 AI 인턴

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

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

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

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

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

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

Editor Component의 최적화 불가능 이슈

0

38

2

useCallback ⊂ useMemo

0

38

2

nestjs 강의는 없나요??

1

41

2

라이브러리 설치 질문

0

34

2

linter 질문

0

40

2

리덕스 툴킷 맵다

0

37

1

11장 미션에 이메일 남기는걸 누락했어요.

0

42

1

감정일기장 vercel 배포 후 새로 고침 시 404페이지가 뜨는 이유

0

42

2

Sort 메서드 관련 아티클

0

43

2

4.1) React.js를 소개합니다 강의를 듣고 궁금한 점이 생겼습니다.

0

46

2

html, body에 적용하는 css 스타일 질문입니다.

0

42

2

소스코드즘 부탁드립니다.

0

48

1

6장 ORM 에 관하여 질문

0

57

1

git 초기설정하고 Next Js 설치하는게 너무 어렵습니다.

0

41

1

강의 목표

0

57

1

강의 노트 위주로 학습

0

70

1

프로덕션 부분 사용 불가

0

76

2

in-app purchasing 버튼의 install 버튼이 비활성화되어있을때 어떻게 해결해야하나요 ?

0

56

2

마감 인 경우.

0

77

1

5장부터는 미션 상세 내용이 없는데 어떻게 작성해야되나요?

0

73

1

MSA 와 BFF 아키텍처 설명 부분에 대한 문의

1

70

1

유니티 제외 설치한 프로그램들 및 파일 삭제 방법

0

63

1

깃허브에서 콤피유아이 매니저 설치하는게 안됩니다.

0

85

2

eslint.config.js 설정 질문입니다.

0

95

2