# Sentry 연결하기

Mocco는 Sentry 조직의 **internal integration**을 통해 Sentry 이슈 웹훅을 받습니다. Sentry가 새 이슈를 만들 때마다 Mocco는 이를 Discord에 게시할 수 있습니다.

Mocco의 소유자나 관리자여야 하고, Sentry에서 통합을 관리할 수 있어야 합니다.

## 1. Mocco에서 소스 시작

1. **Notifications**를 열고 **Sources** 탭으로 이동합니다.
2. **Add source**를 클릭하고 **Kind**에서 **Sentry**를 고릅니다.
3. `Sentry (acme)` 같은 **Name**을 입력합니다.

이 양식은 열어 두세요. **Signing secret**은 다음 단계에서 Sentry로부터 받습니다.

## 2. Sentry에서 internal integration 만들기

1. Sentry에서 조직의 **Settings > Developer Settings**로 이동합니다.
2. 새 **internal integration**을 만듭니다.
3. `Mocco` 같은 이름을 입력합니다.
4. 웹훅 URL을 이 소스의 Mocco ingest URL로 설정합니다. 아직 소스를 만들지 않았다면, 먼저 임시 시크릿으로 소스를 만들고 목록에서 **Ingest URL**을 복사해 쓰세요. 실제 시크릿은 나중에 **Rotate secret**으로 붙여 넣으면 됩니다.
5. 통합에 이슈와 이벤트에 대한 읽기 권한을 주고, 웹훅 구독에서 **issue**를 켭니다. Sentry에서는 통합의 권한이 포괄하는 리소스만 구독할 수 있습니다.
6. 통합을 저장합니다. Sentry가 통합 페이지에 **Client Secret**을 표시합니다.

통합의 alert action을 켜거나 알림 규칙을 만들 필요는 없습니다. Mocco는 Sentry가 새 이슈마다 보내는 issue 웹훅을 수신합니다. alert 웹훅은 `ignored`로 기록됩니다.

## 3. Mocco에서 마무리

1. Sentry의 **Client Secret**을 **Signing secret**에 붙여 넣습니다.
2. **Create source**를 클릭합니다.
3. 새 소스의 **Ingest URL**을 복사하고(**Copy** 클릭), 이 URL이 Sentry 통합의 웹훅 URL과 같은지 확인합니다.

Sentry는 모든 웹훅에 Client Secret으로 서명합니다(`Sentry-Hook-Signature` 헤더). Mocco는 전달마다 이를 확인하고, 일치하지 않는 요청은 모두 거부합니다.

Sentry에서 Client Secret을 재설정했다면, Mocco에서 해당 소스의 **Rotate secret**을 클릭하고 새 시크릿을 붙여 넣으세요. ingest URL은 그대로입니다.

## 받게 되는 이벤트

| Sentry 웹훅 | Mocco 이벤트 |
|---|---|
| issue, action `created` | `sentry.issue.created` |
| issue, 그 밖의 action(`resolved`, `assigned`, `archived`, `unresolved`) | `ignored`로 기록 |
| 그 밖의 모든 리소스 | `ignored`로 기록 |

`sentry.issue.created` 규칙에 쓸 수 있는 필터 키:

| 키 | 예시 | 비고 |
|---|---|---|
| `project` | `web` | Sentry가 보낸 경우의 Sentry 프로젝트 슬러그. |
| `environment` | `production` | 이슈에 environment가 없으면 `unknown`. |
| `level` | `error` | 소문자: `fatal`, `error`, `warning`, `info`, `debug`. |

예를 들어 `sentry.issue.created`에 `environment=production` 필터를 건 규칙은 프로덕션 이슈만 게시합니다. **Sentry** 프리셋은 필터 없이 `sentry.issue.created`를 추가합니다.

## 동작 확인

Sentry에서 새 이슈를 발생시킵니다(예를 들어 테스트 프로젝트에서 오류를 일으킵니다). 몇 초 안에 Mocco의 **Activity** 탭에 `published` 결과로 나타나고, 규칙이 일치하는 채널에도 게시됩니다. 아무것도 나타나지 않으면 [문제 해결](https://www.mocco.club/docs/ko/articles/pmzrkr-troubleshooting#nothing-shows-up-in-activity)을 참고하세요.

Sentry는 1초 안에 응답을 기대합니다. Mocco는 즉시 응답한 뒤에 Discord에 게시하므로, Discord가 느려도 Sentry가 시간 초과되는 일은 없습니다.
