Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

♻️ 예외 응답 개선 #16

Merged
merged 2 commits into from
Oct 3, 2024
Merged

♻️ 예외 응답 개선 #16

merged 2 commits into from
Oct 3, 2024

Conversation

waterfogSW
Copy link
Member

@waterfogSW waterfogSW commented Oct 3, 2024

Summary by CodeRabbit

  • New Features

    • API의 응답 코드에 대한 개선 사항이 추가되었습니다.
    • 여러 엔드포인트에 대해 500 Internal Server Error 응답이 포함되었습니다.
    • /auth/token/refresh 엔드포인트에 400 InvalidRefreshToken 응답이 추가되었습니다.
  • Bug Fixes

    • /users 엔드포인트에서 401 Unauthorized 응답이 403 RegisterTokenExpired로 변경되었습니다.
    • /auth/token/refresh 엔드포인트에서 401 Unauthorized 응답이 403 RefreshTokenExpired로 변경되었습니다.
  • Documentation

    • 오류 응답에 대한 예제가 추가되어 API 문서의 명확성이 향상되었습니다.
    • ErrorResponse 스키마의 속성이 변경되어 오류 응답 구조가 개선되었습니다.

Copy link

coderabbitai bot commented Oct 3, 2024

Walkthrough

이번 변경 사항은 API 사양을 수정하여 여러 엔드포인트에 대한 응답 코드를 추가하고, 오류 응답 구조를 개선하는 내용을 포함합니다. 특히, 여러 경로에 대해 500 Internal Server Error 응답이 추가되었으며, /users 엔드포인트에서는 401 Unauthorized 응답이 403 RegisterTokenExpired로 변경되었습니다. 또한, ErrorResponse 스키마의 속성이 수정되어 오류 응답의 명확성이 향상되었습니다.

Changes

파일 변경 요약
openapi.yaml - 여러 경로에 500 Internal Server Error 응답 추가
- /users 엔드포인트의 401 응답을 403 RegisterTokenExpired로 변경
- /auth/token/refresh 엔드포인트의 401 응답을 403 RefreshTokenExpired로 변경
- /auth/token/refresh400 InvalidRefreshToken 응답 추가
- ErrorResponse 스키마 속성 변경: timestamp, status, error에서 time, type, code로 수정
- 오류 응답 예제 추가 및 전역 응답에서 Unauthorized 응답 제거
- InternalServerError 응답을 컴포넌트 섹션에 추가

Possibly related PRs

Suggested labels

fix

Suggested reviewers

  • dojinyou
  • moondev03
  • jisu15-kim

🐰 변화의 소식 전해요,
오류 응답이 더 명확해져요.
500의 고통, 이제는 잊고,
403의 새 길로 나아가요.
API의 세상, 더 나아질 거예요! 🌟


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (4)
openapi.yaml (4)

134-136: 오류 응답 개선 승인 및 제안

401 Unauthorized를 403 RegisterTokenExpired로 변경한 것은 매우 적절합니다. 이는 더 구체적인 오류 상황을 나타내며, 클라이언트에게 더 명확한 정보를 제공합니다. 500 Internal Server Error 응답 추가도 일관성 있는 변경입니다.

제안: 403 응답에 대한 설명을 더 자세히 제공하는 것이 좋겠습니다. 예를 들어, "회원 가입 토큰이 만료되어 접근이 거부되었습니다."와 같이 설명을 추가할 수 있습니다.


323-330: 오류 응답 예시 추가 승인 및 제안

BadRequest 오류 응답에 대한 예시를 추가한 것은 매우 좋습니다. 이는 API 문서의 품질을 향상시키고 개발자들이 오류 응답 구조를 더 쉽게 이해할 수 있게 해줍니다.

제안: 'type' 필드에 대한 가능한 값들(예: "COMMON", "AUTH" 등)을 문서화하는 것이 좋겠습니다. 이를 통해 개발자들이 다양한 오류 유형을 더 잘 이해하고 처리할 수 있을 것입니다.


359-372: InternalServerError 응답 추가 승인 및 제안

InternalServerError 응답을 추가한 것은 매우 적절합니다. 이는 서버 내부 오류에 대한 표준화된 처리 방식을 제공하며, 새로운 오류 응답 형식과 일치합니다. 이러한 변경은 API의 오류 처리를 더욱 일관되고 예측 가능하게 만듭니다.

제안: 보안상의 이유로, 실제 운영 환경에서는 내부 서버 오류에 대해 더 일반적인 메시지를 사용하는 것이 좋습니다. 예를 들어, "서버 오류가 발생했습니다. 나중에 다시 시도해 주세요."와 같은 메시지를 사용할 수 있습니다.


386-390: ErrorResponse 스키마 추가 개선 승인 및 제안

ErrorResponse 스키마의 추가 변경사항도 적절합니다:

  1. 'status'를 'code'로 변경한 것은 오류 응답에 더 적합합니다.
  2. 'code'를 정수에서 문자열로 변경한 것은 더 유연한 오류 코딩 체계를 가능하게 합니다.

이러한 변경은 오류 응답의 표현력을 향상시킵니다.

제안: 'code' 필드에 대한 가능한 값들과 그 의미를 문서화하는 것이 좋겠습니다. 이를 통해 API 사용자들이 오류 코드를 더 쉽게 이해하고 처리할 수 있을 것입니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 88f3df7 and 394dad9.

📒 Files selected for processing (1)
  • openapi.yaml (9 hunks)
🔇 Additional comments (11)
openapi.yaml (11)

71-72: 서버 오류 응답 추가 승인

500 Internal Server Error 응답을 추가한 것은 좋은 변경사항입니다. 이는 API의 오류 처리를 개선하고 클라이언트에게 더 명확한 정보를 제공합니다.


100-101: 서버 오류 응답 추가 승인

/auth/codes/{authCodeId}/newUser 엔드포인트에 500 Internal Server Error 응답을 추가한 것은 적절합니다. 이는 API 전반에 걸쳐 일관된 오류 처리를 제공합니다.


158-161: 오류 응답 추가 승인

/auth/token/refresh 엔드포인트에 400 Bad Request와 500 Internal Server Error 응답을 추가한 것은 매우 적절합니다. 이러한 변경으로 API의 오류 처리가 더욱 완전해졌으며, 클라이언트에게 더 많은 정보를 제공할 수 있게 되었습니다.


177-178: 서버 오류 응답 추가 승인

/locations 엔드포인트에 500 Internal Server Error 응답을 추가한 것은 적절합니다. 이는 다른 엔드포인트들과 일관성을 유지하며, API의 전반적인 오류 처리를 개선합니다.


198-199: 서버 오류 응답 추가 승인

/companies 엔드포인트에 500 Internal Server Error 응답을 추가한 것은 적절합니다. 이는 API 전체의 일관성을 유지하며, 오류 처리를 개선합니다.


219-220: 서버 오류 응답 추가 승인

/companies/{companyId} 엔드포인트에 500 Internal Server Error 응답을 추가한 것은 적절합니다. 이는 다른 엔드포인트들과 일관성을 유지하며, API의 전반적인 오류 처리를 개선합니다.


240-241: 서버 오류 응답 추가 승인

/jobs 엔드포인트에 500 Internal Server Error 응답을 추가한 것은 적절합니다. 이는 API 전체의 일관성을 유지하며, 오류 상황에 대한 명확한 응답을 제공합니다.


331-343: RegisterTokenExpired 오류 응답 추가 승인

RegisterTokenExpired 오류 응답을 추가한 것은 매우 적절합니다. 이는 특정 오류 상황(회원 가입 토큰 만료)에 대해 명확하고 구체적인 응답을 제공합니다. 예시도 새로운 오류 응답 형식과 일치하여 일관성을 유지하고 있습니다. 이러한 변경은 API의 사용성과 명확성을 크게 향상시킵니다.


351-358: NotFound 오류 응답 예시 추가 승인

NotFound 오류 응답에 대한 예시를 추가한 것은 매우 적절합니다. 이는 새로운 오류 응답 형식과 일치하며, 개발자들에게 NotFound 오류가 어떻게 구조화되는지 명확하게 보여줍니다. 이러한 일관된 예시 제공은 API 문서의 품질을 크게 향상시킵니다.


378-383: ErrorResponse 스키마 개선 승인

ErrorResponse 스키마의 변경사항은 매우 적절합니다:

  1. 'timestamp'를 'time'으로 변경하고 ISO 8601 형식을 사용한 것은 표준화와 가독성을 향상시킵니다.
  2. 'type' 필드를 추가한 것은 오류를 더 잘 분류할 수 있게 해줍니다.

이러한 변경은 오류 응답의 명확성과 유용성을 크게 개선합니다.


395-397: ErrorResponse 필수 필드 업데이트 승인

ErrorResponse 스키마의 필수 필드를 'time', 'type', 'code'로 업데이트한 것은 매우 적절합니다. 이 변경으로 모든 필수적인 오류 정보가 항상 응답에 포함되도록 보장됩니다. 또한 이는 앞서 ErrorResponse 스키마에 적용된 수정사항과 일관성을 유지합니다. 이러한 변경은 API의 오류 처리를 더욱 견고하고 예측 가능하게 만듭니다.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
openapi.yaml (1)

407-426: ErrorResponse 스키마 개선에 대한 승인 및 제안

ErrorResponse 스키마의 변경사항은 전반적으로 좋은 개선입니다:

  1. timestamptime으로 변경하고 ISO 8601 형식을 사용한 것은 더 표준화되고 가독성이 높아 좋습니다.
  2. typecode 속성을 추가한 것은 오류에 대한 더 의미 있는 정보를 제공합니다.

하지만 한 가지 제안사항이 있습니다:

  1. status 속성이 제거되었는데, 이는 HTTP 상태 코드 정보의 손실로 이어질 수 있습니다. API 사용자에게 유용할 수 있으므로, httpStatus와 같은 이름으로 HTTP 상태 코드를 나타내는 속성을 유지하거나 추가하는 것을 고려해보시기 바랍니다.

다음과 같이 httpStatus 속성을 추가하는 것을 고려해보세요:

  ErrorResponse:
    type: object
    properties:
      time:
        type: string
        format: date-time
        description: 에러 발생 시각 (ISO 8601)
        example: "2024-05-01T00:00:00Z"
      type:
        type: string
        description: 에러 유형
        example: COMMON
      code:
        type: string
        description: 에러 코드
        example: "1001"
+     httpStatus:
+       type: integer
+       description: HTTP 상태 코드
+       example: 400
      message:
        type: string
        description: 상세 에러 메시지
    required:
      - time
      - type
      - code
+     - httpStatus

이렇게 하면 오류 응답에 HTTP 상태 코드 정보를 유지하면서도 새로운 구조의 이점을 모두 활용할 수 있습니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 394dad9 and 8cf2c38.

📒 Files selected for processing (1)
  • openapi.yaml (9 hunks)
🔇 Additional comments (7)
openapi.yaml (7)

71-72: 500 응답 추가에 대한 승인

500 Internal Server Error 응답을 추가한 것은 좋은 변경사항입니다. 이는 예기치 않은 서버 오류를 적절히 처리하고 API 사용자에게 더 많은 정보를 제공할 수 있게 해줍니다.


100-101: 500 응답 추가 및 일관성 유지에 대한 승인

500 Internal Server Error 응답을 추가한 것은 적절한 변경사항입니다. 이전 엔드포인트와 일관된 방식으로 오류 처리를 개선하고 있어 좋습니다. 여러 엔드포인트에서 일관된 오류 처리 방식을 유지하는 것은 API의 품질을 높이는 좋은 접근 방식입니다.


134-136: 오류 응답 개선에 대한 승인

  1. 401 응답을 403 RegisterTokenExpired로 변경한 것은 매우 적절합니다. 이는 만료된 등록 토큰에 대해 더 구체적이고 정확한 오류 정보를 제공합니다.
  2. 500 Internal Server Error 응답을 추가한 것도 다른 엔드포인트들과 일관성을 유지하는 좋은 변경사항입니다.

이러한 변경사항들은 API의 오류 처리를 개선하고 클라이언트에게 더 정확한 정보를 제공하여 전반적인 API 품질을 향상시킵니다.


158-163: 토큰 갱신 엔드포인트의 오류 처리 개선에 대한 승인

  1. 400 InvalidRefreshToken 응답 추가: 유효하지 않은 리프레시 토큰에 대해 더 구체적인 오류 처리를 제공합니다.
  2. 401에서 403 RefreshTokenExpired로 변경: 만료된 리프레시 토큰에 대해 더 정확한 상태 코드를 사용합니다.
  3. 500 Internal Server Error 응답 추가: 다른 엔드포인트들과 일관성을 유지합니다.

이러한 변경사항들은 리프레시 토큰 작업에 대한 오류 처리를 더욱 세분화하고 정확하게 만들어 API의 품질을 향상시킵니다. 클라이언트 개발자들이 각 오류 상황을 더 쉽게 구분하고 처리할 수 있게 될 것입니다.


179-180: 모든 엔드포인트에 500 응답 추가에 대한 승인

/locations, /companies, /companies/{companyId}, /jobs 엔드포인트에 500 Internal Server Error 응답을 일관되게 추가한 것은 매우 적절한 변경사항입니다. 이는 다음과 같은 이점을 제공합니다:

  1. 모든 엔드포인트에서 일관된 오류 처리를 보장합니다.
  2. 예기치 않은 서버 오류에 대해 적절한 응답을 제공합니다.
  3. API 사용자에게 더 신뢰할 수 있고 예측 가능한 인터페이스를 제공합니다.

이러한 일관된 접근 방식은 API의 전반적인 품질과 사용성을 향상시킵니다.

Also applies to: 200-201, 221-222, 242-243


325-401: 오류 응답 스키마 및 예시 개선에 대한 승인

ErrorResponse 스키마 업데이트와 다양한 오류 응답에 대한 예시 추가는 매우 긍정적인 변경사항입니다:

  1. 새로운 ErrorResponse 구조 (time, type, code):

    • 더 상세하고 표준화된 오류 정보를 제공합니다.
    • 시간 정보를 통해 오류 발생 시점을 정확히 파악할 수 있습니다.
    • 오류 유형과 코드를 통해 문제를 더 쉽게 분류하고 처리할 수 있습니다.
  2. 다양한 오류 응답 예시 추가:

    • API 문서의 품질을 향상시킵니다.
    • 개발자들이 예상되는 오류 형식을 쉽게 이해할 수 있게 합니다.
    • 클라이언트 측 오류 처리 로직 구현을 용이하게 합니다.

이러한 변경사항들은 API의 사용성과 개발자 경험을 크게 개선할 것입니다.


Line range hint 1-743: 전체 변경사항에 대한 종합 평가

이번 PR의 변경사항들은 API의 오류 처리와 문서화를 크게 개선했습니다. 주요 개선 사항은 다음과 같습니다:

  1. 모든 엔드포인트에 걸쳐 일관된 오류 처리 구현
  2. 더 상세하고 유용한 정보를 제공하는 새로운 오류 응답 구조
  3. API 문서화 개선을 위한 예시 추가
  4. 특정 오류 상황(예: 토큰 만료)에 대한 더 정확한 HTTP 상태 코드 사용

이러한 변경사항들은 다음과 같은 이점을 제공합니다:

  • API 사용자에게 더 명확하고 일관된 오류 정보 제공
  • 클라이언트 측 오류 처리 로직 구현 용이성 향상
  • API 문서의 품질과 이해도 개선
  • 전반적인 API 품질과 사용자 경험 향상

종합적으로, 이번 PR은 API의 안정성과 사용성을 크게 개선하는 매우 가치 있는 변경사항들을 포함하고 있습니다. 앞서 제안한 httpStatus 속성 추가를 고려해보시고, 그 외에는 이 PR을 승인하여 병합하는 것이 좋겠습니다.

@waterfogSW waterfogSW merged commit 4982296 into main Oct 3, 2024
3 checks passed
@waterfogSW waterfogSW deleted the improve-error-response branch October 3, 2024 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants