| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- vscode
- 문자열
- 정규식
- Eclipse
- 배열
- 자바
- ArrayList
- html
- HashMap
- java테스트
- 단위테스트
- Java
- junit5
- js
- 자바문법
- 자바스크립트
- math
- input
- list
- IntelliJ
- 스프링부트
- SpringBoot
- CSS
- Visual Studio Code
- 테스트자동화
- Array
- string
- javascript
- 인텔리제이
- junit
- Today
- Total
어제 오늘 내일
[Spring Boot] "사용자가 신고하기 전까지 몰랐다고?" 실시간 에러 추적: Sentry 연동 (feat. Slack 알림) 본문
[Spring Boot] "사용자가 신고하기 전까지 몰랐다고?" 실시간 에러 추적: Sentry 연동 (feat. Slack 알림)
hi.anna 2026. 3. 28. 00:52
서버 개발자의 가장 큰 수치심은 "사용자가 먼저 에러를 발견하는 것"입니다.
"로그 파일에 다 남아있는데요?"라고 변명해 봤자 소용없습니다. 이미 고객은 떠났으니까요.
우리는 수동적(Passive)인 로그 파일 확인에서 벗어나, 능동적(Active)인 알림 시스템을 구축해야 합니다. 전 세계 개발자들이 가장 사랑하는 도구, Sentry가 정답입니다.
1. Sentry가 뭔가요?
단순히 "에러 났다"고 알려주는 게 아닙니다.
- 어떤 사용자가 (ID, 이메일)
- 어떤 환경에서 (OS, 브라우저 버전)
- 어떤 코드 몇 번째 줄에서 (Stack Trace)
- 무슨 값을 넣었길래 (Request Body)
이 모든 정보를 스냅샷처럼 찍어서 예쁜 대시보드로 보여줍니다. 심지어 Jira 이슈를 자동으로 생성하거나 Slack으로 알림을 쏴줍니다.
2. 가입 및 프로젝트 생성 (무료)
- Sentry.io에 접속해서 회원가입을 합니다. (Developer 플랜은 개인에게 무료입니다.)
- Create Project -> Spring Boot 선택 -> Create Project 클릭.
- 화면에 나오는 DSN (Data Source Name) 주소를 복사해 둡니다. (이게 우리 서버랑 Sentry를 연결하는 열쇠입니다.)
3. 스프링 부트 연동 (3분 컷)
Sentry는 스프링 부트용 스타터를 제공해서 설정이 너무 쉽습니다.
① 의존성 추가 ()
dependencies {
implementation 'io.sentry:sentry-spring-boot-starter:7.3.0' // 최신 버전 확인 필요
implementation 'io.sentry:sentry-logback:7.3.0' // Logback 연동 (선택)
}
② 설정 파일 ()
복사해 둔 DSN을 붙여넣습니다.
sentry:
dsn: "https://your-public-key@o0.ingest.sentry.io/0" # 복사한 DSN 주소
# 1.0 = 100% (모든 에러 전송), 0.5 = 50% (샘플링)
traces-sample-rate: 1.0
# 프로덕션 환경에서만 동작하게 설정 가능
environment: production
4. 사용법: 자동 감지와 수동 전송
① 자동 감지 (Uncaught Exception)
스프링 부트가 시작되면 Sentry가 자동으로 감시를 시작합니다.Controller에서 예외(throw new RuntimeException("테스트"))를 던져보세요.
5초 뒤에 Sentry 대시보드에 "New Issue Created"라며 에러가 뜹니다.
② 수동 전송 ()
try-catch로 잡은 에러는 밖으로 던져지지 않아서 Sentry가 모를 수 있습니다. 이럴 땐 직접 알려줘야 합니다.
@Service
@Slf4j
public class OrderService {
public void order() {
try {
// 위험한 로직...
} catch (Exception e) {
log.error("주문 실패", e); // 로그 파일엔 남지만...
Sentry.captureException(e); // ★ Sentry에도 알려줘!
}
}
}
5. 핵심 기능: Slack 연동 (알림봇)
이게 핵심입니다. Sentry 웹사이트를 계속 보고 있을 순 없으니까요.
- Sentry 웹 -> Settings -> Integrations
- Slack 검색 -> Add Installation
- 내 슬랙 워크스페이스 선택 -> 채널 지정 (
#server-errors) - 이제 에러가 터지면 슬랙으로 즉시 알림이 옵니다.
"망했다... NullPointerException 터짐 (OrderService.java:45)"
이 메시지를 받고 바로 노트북을 열면, 사용자가 고객센터에 전화하기 전에 문제를 해결할 수 있습니다. 🚀
6. 민감 정보 필터링 (개인정보 보호)
Sentry는 기본적으로 HTTP 요청의 헤더와 바디를 수집합니다.
하지만 사용자의 비밀번호나 주민번호가 Sentry 서버에 저장되면 큰일 나겠죠?
@Bean
public SentryOptions.BeforeSendCallback beforeSendCallback() {
return (event, hint) -> {
// 특정 예외는 무시하거나
if (event.getThrowable() instanceof IgnoredException) {
return null;
}
// 민감한 정보 마스킹 처리 (User IP 제거 등)
event.getRequest().getHeaders().remove("Authorization");
return event;
};
}
마치며
오늘의 결론입니다.
- 로그 파일은 기록용이지 알림용이 아니다.
- Sentry를 쓰면 에러 발생 상황(Context)을 완벽하게 파악할 수 있다.
- Slack 연동을 통해 "사용자보다 먼저" 에러를 인지하는 개발자가 되자.
이제 여러분은 퇴근 후에도 안심할 수 있습니다. (혹은 슬랙 알림 때문에 더 불안해질 수도... 😂 농담입니다. 빠른 대응이 서비스의 생명이니까요!)
