Skip to content

Conversation

kimyu0218
Copy link
Collaborator

@kimyu0218 kimyu0218 commented Feb 22, 2024

🔮 resolved #569

변경 사항

  • 커스텀 에러를 위한 인터페이스 정의
  • 모듈별 커스텀 에러 코드 정의
  • 커스텀 에러 적용에 따른 테스트 파일 수정

고민과 해결 과정

1️⃣ 예외 메타데이터

kakao developers를 참고하여 커스텀 에러를 작성했다. 커스텀 에러는 다음 구조를 갖는다.

export interface ExceptionMetadata {
  status: number;        // HTTP 응답 코드
  message: string;       // HTTP 에러 메시지
  code: string;          // 커스텀 에러 코드
  description?: string;  // 에러에 대한 부연설명
}

사용자에게는 message만 표기하여 민감한 정보를 노출하지 않고, 개발자는 고유한 에러 코드를 통해 원인을 빠르게 파악할 수 있다. 아래는 에러코드의 예시다. 사용자에게는 로그인 실패에 대한 메시지만 전달하여 구체적인 에러에 대한 정보를 노출하지 않는다.

export const AUTH_CODEMAP: ExceptionCodemap = {
  KAKAO_TOKEN_REQUEST_FAILED: {
    status: 400,
    message: '카카오 로그인에 실패했습니다.',
    code: 'MAE001',
    description: '카카오 토큰 발급에 실패했습니다.',
  },
  ...
}

2️⃣ 고유 에러코드

고유 에러코드의 명명 규칙인 다음과 같다. 카카오의 경우, KOE001 형태의 에러코드를 사용하고 있는데 이와 유사하게 작성했다.

M(모듈)E(세 자리 번호)
ex. MCE001
  • M : 마법의 소라고둥의 앞 글자
  • (모듈) : 모듈의 첫 글자 (현재 프로젝트 기준, 모듈명이 겹치지 않아 사용 가능)
  • E : 에러

(선택) 테스트 결과

@kimyu0218 kimyu0218 marked this pull request as ready for review February 22, 2024 11:55
@Doosies
Copy link
Collaborator

Doosies commented Feb 23, 2024

👍 오 좋다!! 이제 프론트에서도 에러 처리하기 더 좋아졌어👍 👍

@kimyu0218
Copy link
Collaborator Author

모듈의 앞 글자가 같은 경우도 있을 것 같아서 이렇게 어때?

MCE001

  • M : 마법의 소라고둥 심볼
  • C : c로 시작하는 모듈
  • E : 에러 심볼
  • 0 : c로 시작하는 심볼이 여러 개인 경우 1씩 증가
  • 마지막 두 글자 : MCE0 내 에러 번호

@kimyu0218 kimyu0218 requested a review from HeoJiye February 23, 2024 09:41
Copy link
Collaborator

@HeoJiye HeoJiye left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍👍

@kimyu0218 kimyu0218 merged commit 54e3388 into dev Feb 23, 2024
@kimyu0218 kimyu0218 deleted the BE/refactor/#569-API-커스텀-에러-정의 branch February 23, 2024 11:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

🔄 API 커스텀 에러 정의
3 participants