You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sentry 의 Discord 연동은 Team 플랜(유료)부터라 연동을 해제했고, 그 뒤로는 Sentry 를 직접 열지 않으면 에러를 알 수 없었습니다. 무료 플랜은 이벤트를 30일만 보관해서 지난 에러 기록도 사라집니다.
예전 실시간 알림도 제목이 AuthorizationDeniedException, Error 처럼 타입만 보여서 결국 Sentry 에 들어가야 원인을 알 수 있었습니다. Rage Click 은 위치가 Tailwind 클래스를 나열한 선택자뿐이라 같은 스타일 버튼끼리 구분되지 않았습니다.
변경
.github/workflows/sentry-daily-digest.yml
매일 01:00 UTC(10:00 KST) 예약 실행과 수동 실행을 받고, 시크릿을 넘겨 스크립트만 실행합니다
.github/scripts/sentry-daily-digest.sh
예약 실행 워크플로우는 dev 머지 전에 돌려볼 수 없어서 로직을 스크립트로 분리했습니다. DRY_RUN=1 이면 Discord 로 보내지 않고 메시지와 이슈별 원본 값을 출력합니다
조회 순서: 프로젝트 숫자 ID, 지난 24시간 미해결 이슈(발생 수 순, 최대 100건), 30일 미해결 건수, 메시지에 나갈 이슈만 최근 이벤트
Sentry 조회가 실패하면 채널에 실패 메시지를 보내고 실패로 끝냅니다. 조용히 실패하면 "에러 없는 날"과 구분되지 않기 때문입니다
새 이슈·재발이 없는 날은 한 줄만 보내고, 2000자를 넘으면 최다 발생 섹션부터 빼고 섹션당 건수를 줄입니다
섹션
기준
새 이슈
처음 발생이 24시간 이내
재발
Sentry 하위 상태 regressed, 새 이슈 제외
최다 발생
24시간 발생 수 상위 3건
표시 항목
출처
무엇이
이슈 제목. 제목에 메시지가 없으면 에러 메시지를 붙임
발생 페이지
최근 이벤트의 url 태그, 없으면 transaction 태그
발생 위치
컴포넌트 이름, 함수 이름, culprit 순으로 있는 값
apps/web/next.config.mjs
_experimental.turbopackReactComponentAnnotation 을 켭니다. 화면 요소에 data-sentry-component 가 붙어 Rage Click 선택자에 컴포넌트 이름이 나옵니다
webpack 용 reactComponentAnnotation 은 Next 16 기본 빌드인 Turbopack 에서 동작하지 않아 Turbopack 용 실험 옵션을 씁니다
메시지 예시:
🆕 새 이슈
• AuthorizationDeniedException: Access Denied
📍 /wishlist · getWishlist
12회 · 유저 5명 · [Sentry](<link>)
🔁 재발 (해결 처리 뒤 다시 발생)
• Rage Click
📍 /home · NavTabButton
41회 · 유저 2명 · [Sentry](<link>)
영향
dev 머지 다음 날 오전 10시부터 자동 실행됩니다. 필요한 시크릿 SENTRY_READ_TOKEN, DISCORD_SENTRY_CHANNEL_ID 는 등록돼 있습니다
컴포넌트 이름은 다음 웹 배포 이후 생긴 이슈부터 보입니다
운영 HTML 에 data-sentry-source-file="SplashClient.tsx" 처럼 소스 파일 이름이 들어갑니다. 코드 내용은 노출되지 않습니다
확인
가짜 curl 로 Sentry·Discord 응답을 흉내 내 아래 경우를 돌렸습니다
경우
결과
새 이슈·재발·최다 발생 혼합
세 섹션이 발생 수 순으로 나오고 제목 특수문자가 이스케이프됨
새 이슈·재발 0건
한 줄 요약
이슈 40건
최다 발생 섹션이 빠지고 섹션당 3건으로 줄어듦
Sentry 500 응답
채널에 실패 메시지, 종료 코드 1
토큰 없음
즉시 종료
실제 전송 형식
멘션 차단 설정 포함
로컬 production 빌드 결과물 47개 청크에서 data-sentry-component 를 확인했습니다
메시지의 발생 횟수·유저 수가 누적이 아니라 지난 24시간·production 기준인 것을 Sentry 서버 소스에서 확인했습니다. 누적 값은 응답의 lifetime 에 따로 오고 메시지에는 쓰지 않습니다
범위 밖
실제 Sentry 응답으로는 아직 돌려보지 않았습니다. regressed 하위 상태, url 태그, X-Hits 헤더, Rage Click 선택자의 컴포넌트 이름 형식은 머지 후 수동 실행으로 확인합니다. 값이 없으면 그 정보만 빠지고 요약은 전송됩니다
No actionable comments were generated in the recent review. 🎉
ℹ️ Recent review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Advanced
Run ID: bc0cb030-edfe-41b5-a158-5c6ecf2a9777
📥 Commits
Reviewing files that changed from the base of the PR and between c039e4b and 9669e75.
📒 Files selected for processing: 3
.github/scripts/sentry-daily-digest.sh
.github/workflows/sentry-daily-digest.yml
apps/web/next.config.mjs
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.
📝 Walkthrough
매일 실행하거나 수동으로 실행할 수 있는 Sentry 일간 요약 워크플로를 추가했습니다. 스크립트는 최근 이슈를 분류해 Discord로 전송합니다. Turbopack의 Sentry React 컴포넌트 어노테이션 설정도 활성화했습니다.
Changes: Sentry 일간 요약
Layer / File(s)
Summary
환경 검증과 Sentry 조회 .github/scripts/sentry-daily-digest.sh
필수 환경 변수를 검증하고, 최근 24시간의 미해결 이슈 최대 100건과 30일 미해결 건수를 조회합니다.
이슈 분류와 발생 위치 조회 .github/scripts/sentry-daily-digest.sh
이슈를 새 이슈, 재발 이슈, 최다 발생 이슈로 분류합니다. 대상 이슈의 최신 이벤트에서 발생 페이지를 조회하며, DRY_RUN=1이면 원본 필드와 조회 결과를 출력합니다.
메시지 생성과 워크플로 연결 .github/scripts/sentry-daily-digest.sh, .github/workflows/sentry-daily-digest.yml
Discord 메시지에 이슈 정보와 Sentry 링크를 포함하고 2000자 제한에 맞춰 항목을 줄입니다. 워크플로는 매일 01:00 UTC에 실행되며 수동 실행도 지원합니다.
sequenceDiagram
participant GitHub Actions
participant Digest Script
participant Sentry API
participant Discord
GitHub Actions->>Digest Script: 실행 및 환경 변수 전달
Digest Script->>Sentry API: 프로젝트와 이슈 조회
Sentry API-->>Digest Script: 프로젝트와 이슈 응답
Digest Script->>Discord: 요약 메시지 전송
Loading
Merge Risk:⚪ Minimal · up to 9669e
This adds a daily Sentry summary to Discord and enables component annotations. No actionable merge-blocking risk was found; the real Sentry field formats will be checked manually after merge.
Pre-merge checks: 3 · 2
Failed checks: 2 warnings
Check name
Status
Explanation
Resolution
Linked Issues check
직접 연결된 #744의 핵심 기능은 대부분 구현되었습니다. 워크플로우는 0 1 * * *와 workflow_dispatch를 사용하고, production 환경의 최근 24시간 이슈를 조회하며, 새 이슈·재발·최다 발생을 분류합니다. 그러나 .github/scripts/sentry-daily-digest.sh의 topSection은 최다 …
topSection의 각 이슈 항목에 users 값을 포함해 영향 유저 수를 표시하십시오. 배포 전에 DISCORD_BOT_TOKEN 시크릿의 등록을 보장하고, 등록하지 않을 경우 워크플로우의 인증 방식과 문서를 일치시키십시오.
Docstring Coverage
Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 2 files. (1 skipped: 1…
Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed checks: 3 passed
Check name
Status
Explanation
Description Check
Check skipped - CodeRabbit’s high-level summary is enabled.
Title check
PR 제목은 Sentry 일간 에러 요약을 Discord로 전송하는 주요 변경 사항을 정확하고 간결하게 설명합니다.
Out of Scope Changes check
변경 사항은 #744의 일간 Sentry 요약 범위와 연결됩니다. 워크플로우와 스크립트는 조회·분류·Discord 전송을 구현합니다. DRY_RUN과 메시지 길이 처리는 운영 지원 기능입니다. turbopackReactComponentAnnotation 설정은 요약의 발생 위치 표시를 지원합니다. staging 실행과 실시간 알림을 활성화하는 변경은…
Full details: Out of Scope Changes check
Explanation
변경 사항은 #744의 일간 Sentry 요약 범위와 연결됩니다. 워크플로우와 스크립트는 조회·분류·Discord 전송을 구현합니다. DRY_RUN과 메시지 길이 처리는 운영 지원 기능입니다. turbopackReactComponentAnnotation 설정은 요약의 발생 위치 표시를 지원합니다. staging 실행과 실시간 알림을 활성화하는 변경은 확인되지 않습니다.
Full details: Linked Issues check
Explanation
직접 연결된 #744의 핵심 기능은 대부분 구현되었습니다. 워크플로우는 0 1 * * *와 workflow_dispatch를 사용하고, production 환경의 최근 24시간 이슈를 조회하며, 새 이슈·재발·최다 발생을 분류합니다. 그러나 .github/scripts/sentry-daily-digest.sh의 topSection은 최다 발생 이슈에 발생 횟수와 Sentry 링크만 표시하고 영향 유저 수를 표시하지 않습니다. #744는 각 이슈에 발생 횟수·영향 유저 수·Sentry 링크를 요구합니다. 또한 워크플로우는 DISCORD_BOT_TOKEN 시크릿을 추가로 요구하지만, PR 설명과 이슈가 등록 완료로 명시한 시크릿에는 이 항목이 없습니다.
Resolution
topSection의 각 이슈 항목에 users 값을 포함해 영향 유저 수를 표시하십시오. 배포 전에 DISCORD_BOT_TOKEN 시크릿의 등록을 보장하고, 등록하지 않을 경우 워크플로우의 인증 방식과 문서를 일치시키십시오.
Full details: Docstring Coverage
Explanation
Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 2 files. (1 skipped: 1 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
Fix all pre-merge checks with AI
✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
Commit to this branch
Create a new PR
🧪 Generate unit tests (beta)
Commit to this branch
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Warning
Some tools did not complete. Review the errors below.
🔧 ESLint
If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.
apps/web/next.config.mjs
ESLint skipped: missing config or dependency (missing-dependency). The ESLint configuration references a package that is not available in the sandbox.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
작업 요약
작업 세부 내용
배경
Sentry 의 Discord 연동은 Team 플랜(유료)부터라 연동을 해제했고, 그 뒤로는 Sentry 를 직접 열지 않으면 에러를 알 수 없었습니다. 무료 플랜은 이벤트를 30일만 보관해서 지난 에러 기록도 사라집니다.
예전 실시간 알림도 제목이
AuthorizationDeniedException,Error처럼 타입만 보여서 결국 Sentry 에 들어가야 원인을 알 수 있었습니다. Rage Click 은 위치가 Tailwind 클래스를 나열한 선택자뿐이라 같은 스타일 버튼끼리 구분되지 않았습니다.변경
.github/workflows/sentry-daily-digest.yml.github/scripts/sentry-daily-digest.shDRY_RUN=1이면 Discord 로 보내지 않고 메시지와 이슈별 원본 값을 출력합니다regressed, 새 이슈 제외url태그, 없으면transaction태그apps/web/next.config.mjs_experimental.turbopackReactComponentAnnotation을 켭니다. 화면 요소에data-sentry-component가 붙어 Rage Click 선택자에 컴포넌트 이름이 나옵니다reactComponentAnnotation은 Next 16 기본 빌드인 Turbopack 에서 동작하지 않아 Turbopack 용 실험 옵션을 씁니다메시지 예시:
영향
SENTRY_READ_TOKEN,DISCORD_SENTRY_CHANNEL_ID는 등록돼 있습니다data-sentry-source-file="SplashClient.tsx"처럼 소스 파일 이름이 들어갑니다. 코드 내용은 노출되지 않습니다확인
가짜 curl 로 Sentry·Discord 응답을 흉내 내 아래 경우를 돌렸습니다
로컬 production 빌드 결과물 47개 청크에서
data-sentry-component를 확인했습니다메시지의 발생 횟수·유저 수가 누적이 아니라 지난 24시간·production 기준인 것을 Sentry 서버 소스에서 확인했습니다. 누적 값은 응답의
lifetime에 따로 오고 메시지에는 쓰지 않습니다범위 밖
regressed하위 상태,url태그,X-Hits헤더, Rage Click 선택자의 컴포넌트 이름 형식은 머지 후 수동 실행으로 확인합니다. 값이 없으면 그 정보만 빠지고 요약은 전송됩니다연관 이슈
closes #744
Summary by CodeRabbit