Skip to content

Conversation

@Jjiggu
Copy link
Contributor

@Jjiggu Jjiggu commented Jul 28, 2025

작업 요약

  • 디스코드 웹훅 에러 알림 시스템 구축

Issue Link

#171

문제점 및 어려움

해결 방안

Reference

Summary by CodeRabbit

  • 신규 기능

    • 모든 예외 발생 시 Discord 알림 기능이 추가되어, 에러 발생 시 Discord 채널로 자동 알림이 전송됩니다.
    • Feign 클라이언트 기반의 Discord 연동이 도입되어, REST 호출로 Discord 메시지 전송이 가능해졌습니다.
  • 버그 수정

    • 예외 핸들러의 응답 메시지 및 로깅 메시지 일부가 더 명확하게 수정되었습니다.
  • 리팩터링

    • 예외 처리 로직이 개선되어, 예외 발생 시 WebRequest 정보를 함께 활용합니다.
    • 예외 핸들러 메서드 시그니처가 일관적으로 변경되었습니다.
  • 환경설정/빌드

    • Spring Cloud 및 OpenFeign 의존성이 추가되어 클라우드 환경 및 외부 API 연동이 강화되었습니다.
    • 기존 로그백 관련 설정 파일이 삭제되어, 로깅 방식이 변경되었습니다.

@Jjiggu Jjiggu self-assigned this Jul 28, 2025
@Jjiggu Jjiggu added enhancement New feature or request refactor 리팩토링 labels Jul 28, 2025
@Jjiggu Jjiggu merged commit b331d3e into develop Jul 28, 2025
1 of 2 checks passed
@coderabbitai
Copy link

coderabbitai bot commented Jul 28, 2025

Caution

Review failed

The pull request is closed.

## Walkthrough

이 변경사항은 Discord 알람 기능을 위한 Feign 클라이언트 및 서비스 도입, 예외 처리 핸들러의 알람 연동, Spring Cloud OpenFeign 지원 추가, 그리고 기존 Logback 기반 Discord 연동 로깅 설정 파일 삭제를 포함합니다. 인프라와 각 API 모듈의 빌드 스크립트 및 예외 처리 로직이 업데이트되었습니다.

## Changes

| Cohort / File(s) | Change Summary |
|------------------|---------------|
| **Spring Cloud & Feign 도입**<br>nowait-app-admin-api/build.gradle<br>nowait-app-user-api/build.gradle<br>nowait-infra/build.gradle | Spring Cloud BOM 및 OpenFeign 의존성 추가, 일부 로깅 관련 의존성 제거, Feign-Gson 추가 |
| **Feign 클라이언트 및 DTO, 설정 추가**<br>nowait-infra/src/main/java/com/nowait/discord/client/DiscordClientAdmin.java<br>nowait-infra/src/main/java/com/nowait/discord/client/DiscordClientUser.java<br>nowait-infra/src/main/java/com/nowait/discord/config/DiscordFeignConfiguration.java<br>nowait-infra/src/main/java/com/nowait/discord/dto/DiscordMessage.java | Discord용 Feign 클라이언트(Admin/User), 메시지 DTO, Feign 로깅 설정 클래스 추가 |
| **Discord 알람 서비스 추가**<br>nowait-infra/src/main/java/com/nowait/discord/service/DiscordAlarmService.java | 예외 발생 시 Discord로 알람을 발송하는 서비스 클래스 신규 추가 |
| **예외 처리기 Discord 알람 연동**<br>nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/exception/GlobalExceptionHandler.java<br>nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java | 모든 예외 핸들러에 Discord 알람 호출 추가, WebRequest 파라미터 추가, User API에 StoreNotFoundException 핸들러 신설 |
| **Feign 클라이언트 활성화**<br>nowait-app-admin-api/src/main/java/com/nowait/ApiAdminApplication.java<br>nowait-app-user-api/src/main/java/com/nowait/ApiUserApplication.java | @EnableFeignClients 애노테이션 추가로 Feign 클라이언트 사용 활성화 |
| **Logback Discord 연동 설정 삭제**<br>nowait-app-admin-api/src/main/resources/logback-admin-dev.xml<br>nowait-app-admin-api/src/main/resources/logback-variables.properties<br>nowait-app-user-api/src/main/resources/logback-user-dev.xml<br>nowait-app-user-api/src/main/resources/logback-variables.properties | 기존 환경별 Discord 연동 Logback 설정 파일 및 변수 파일 삭제 |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Client
    participant Controller
    participant GlobalExceptionHandler
    participant DiscordAlarmService
    participant DiscordClient (Feign)

    Client->>Controller: API 요청
    Controller-->>GlobalExceptionHandler: 예외 발생
    GlobalExceptionHandler->>DiscordAlarmService: sendDiscord[User/Admin]Alarm(e, request)
    DiscordAlarmService->>DiscordClient: sendAlarm(DiscordMessage)
    DiscordClient-->>DiscordAlarmService: (응답 없음)
    DiscordAlarmService-->>GlobalExceptionHandler: (void)
    GlobalExceptionHandler-->>Client: ErrorResponse 반환

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • HyemIin

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->

---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 290432e5ef57190ad027abf7dd3cc21c54260cda and c31771dfed631e0aa5231ec64987a8ee8bfad91b.

</details>

<details>
<summary>📒 Files selected for processing (16)</summary>

* `nowait-app-admin-api/build.gradle` (2 hunks)
* `nowait-app-admin-api/src/main/java/com/nowait/ApiAdminApplication.java` (1 hunks)
* `nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/exception/GlobalExceptionHandler.java` (3 hunks)
* `nowait-app-admin-api/src/main/resources/logback-admin-dev.xml` (0 hunks)
* `nowait-app-admin-api/src/main/resources/logback-variables.properties` (0 hunks)
* `nowait-app-user-api/build.gradle` (2 hunks)
* `nowait-app-user-api/src/main/java/com/nowait/ApiUserApplication.java` (1 hunks)
* `nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java` (2 hunks)
* `nowait-app-user-api/src/main/resources/logback-user-dev.xml` (0 hunks)
* `nowait-app-user-api/src/main/resources/logback-variables.properties` (0 hunks)
* `nowait-infra/build.gradle` (1 hunks)
* `nowait-infra/src/main/java/com/nowait/discord/client/DiscordClientAdmin.java` (1 hunks)
* `nowait-infra/src/main/java/com/nowait/discord/client/DiscordClientUser.java` (1 hunks)
* `nowait-infra/src/main/java/com/nowait/discord/config/DiscordFeignConfiguration.java` (1 hunks)
* `nowait-infra/src/main/java/com/nowait/discord/dto/DiscordMessage.java` (1 hunks)
* `nowait-infra/src/main/java/com/nowait/discord/service/DiscordAlarmService.java` (1 hunks)

</details>

</details>
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings
<details>
<summary>🧪 Generate unit tests</summary>

- [ ] <!-- {"checkboxId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} -->   Create PR with unit tests
- [ ] <!-- {"checkboxId": "07f1e7d6-8a8e-4e23-9900-8731c2c87f58", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} -->   Post copyable unit tests in a comment
- [ ] <!-- {"checkboxId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} -->   Commit unit tests in branch `feature/#171-add-error-logging`

</details>

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=GTable/NoWait_BE_MultiModule&utm_content=173):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `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 explain this code block.`
  -	`@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 explain its main purpose.`
  - `@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.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

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 generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai generate unit tests` to generate unit tests for this 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](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@github-actions github-actions bot requested a review from HyemIin July 28, 2025 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request refactor 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants