Sentry로 트랜잭션과 에러 추적하기

2024년 8월 7일 수요일

Today I Learned

날짜

2024년 8월 7일 수요일

내용

템플릿에 아이디가 필요한 이유

저번주에 고민했던 방식대로, 템플릿 정보를 데이터베이스에 저장하고 불러와서 사용하는 방식으로 변경했다. 현재는 129개 정도의 템플릿이 존재하는데 각자의 id값은 데이터베이스에서 사용하는 id값으로 지정해줬다. 딱히 새로운 고윳값을 줄 이유를 못 느꼈기 떄문..

그런데 문득 든 생각이, 따로 만들어줘야한다. 예를 들어, 3번 템플릿이 있다고 가정해보면 어떤 유저들의 데이터에는 “3번 템플릿”을 사용하고 있다고 저장된다. 만약, 관리자가 이 3번 템플릿 정보를 바꾸기 위해, 삭제하고 다시 추가한다면? 데이터베이스에서 primary key로 관리되는 id는 한번 사용된 값이 재사용되지 않기 떄문에, 새로운 id를 받게 된다. 예를 들어, 129번까지 사용하고 있었으니 3번을 삭제하고 추가하면 130이라는 id를 갖게 된다. 그럼 유저 정보를 참조하다가 3번 템플릿을 찾으려면 당연히 없을 것이다.

물론, 새로 생성된 값으로 변경하면 되겠지만 id값이 계속 커지면서 발생하는 불편함(한참 뒤에는 가장 첫번쨰 데이터의 id가 2700 쯤이라면?)과 GA4를 위해 리포트 넘버를 1부터 부여했다. GA4에 만든 템플릿 정보를 보낼 때 한글이 아닌 숫자로 보내게 되는데, 이걸 다시 한글로 처리하도록 만들수 있다고 한다. 저번주에는 ABC 라는 템플릿이 숫자를 29였다가 갑자기 이번주부터 205로 변하면 매번 그걸 고쳐줘야 하는데.. 데이터베이스에서 primary key로 사용되는 id와 별개로 리포트 넘버를 사용하면, 데이터를 새롭게 만들어도 다시 기존에 번호를 부여할 수 있으니 이 문제가 해결된다.

Sentry

아임리포트에도 에러처리와 성능 확인을 위해 AWS X-Ray를 도입하려 했다. 근데 너무 어렵다… 그러다 이 Sentry라는 서비스를 추천받았는데 기가 막히다.

1
2
3
4
5
6
7
8
9
10
import sentry_sdk
from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration

sentry_sdk.init(
  dsn="DNS 주소",
  traces_sample_rate=1.0,
  profiles_sample_rate=1.0,
  integrations=[SqlalchemyIntegration()],
)

이것만 하면 세팅 끝. 홈페이지 가독성도 괜찮다. 각 에러별로 해결 처리해서 다루기도 편하다. 그리고 hotjar 처럼 에러가 떴을 당시의 화면도 보여준다.

기존 프로덕트 리뷰에서 프론트쪽 오류가 상당히 많이 나오고 있었는데, 타입스크립트가 컴파일 된 이후의 상태에서 에러가 떠서 정확히 어떤 코드에서 에러가 발생했는지 알 수 없었다. 프로덕트리뷰 프론트에도 이걸 도입했는데 이제 그 많은 에러들이 도대체 어디서 뜨는건지 추적할 수 있다!

일단 무료플랜이니 잘 써보고 인스타그램 피드 때도 데이터독과 함께 고민해볼 예정

회고

팔목 부상 on