IOS Sentry 도입기

yong·2025년 1월 23일

Swift

목록 보기
6/7

IOS앱을 개발하다 보니 Android와 마찬가지로 에러 추적 및 성능을 분석하기 위해 Sentry를 적용시키는게 좋을거 같아 이 글을 작성하게 되었습니다. 저는 이미 Android 앱에 Sentry를 적용시켜 서비스를 하고 있으며 sentry를 사용하면 어떤 이점이 있는지에 대해 알려드리겠습니다.
(Android 기준이며 주니어 개발자 입장에서 편한걸 말씀드리겠습니다 ..^^)

센트리(Sentry)란?

Sentry는 에러 모니터링 및 어플리케이션의 성능 분석 도구입니다. 저희 회사에선 이미 백엔드 , 웹 ,Androi 등 다양한 플랫폼에서 이미 적용시키고 있었습니다.

센트리의 주요 기능

  • 실시간 에러 추적 가능

    • 에러가 발생한 코드 위치, 스택 트레이스를 제공합니다.
    • 앱에서 발생하는 에러와 크래시를 자동으로 감지해 대시보드에 기록할수 있습니다.
  • 성능 모니터링

    • 트랜잭션(뷰 로드시간) 을 추적하여 사용자가 어느 뷰에서 멈췄는지도 파악이 가능하며 몇분동안 그 view화면에서 머물렀는지도 파악이 가능합니다.
    • onPremise 서버도 제공을 하여 저희가 커스텀해서 사용할수 있습니다. (보안적으로 좋다! )
  • 사용자별 태그도 추가 가능하다

    • 사용자별로 정보를 추가하여 더욱 정확하게 개별로 구분이 가능함.(에러 추적할때 용이함)
  • 알림 기능도 있어서 특정 에러 발생 시 슬랙이나 이메일(우린 하이웍스쓰는데 가능)에도 알림을 쓸수 있다.

    여기까지가 제가 직접 써본 Sentry의 장점들입니다.
    앱의 특성상 에러 추적이 어렵고 사용자가 crash일어난 곳을 특정하기 어려운데 view계층에서 어디서 에러가 났는지를 알수있어 매우 편함..심지어 위에 말한 기능을 써도 onPremise로 사용해도 무료임!!

    IOS Sentry 도입기

    제가 개발하고 있는 IOS의 개발 환경은 Swift언어를 사용하고 있으며 SwiftUI로 앱을 개발하고 있습니다. cocoapod으로 의존성을 관리하고 있습니다. 이번 포스팅에서는 어떻게 센트리를 도입하는지에 대해 알려드리겠습니다.

    1. 센트리에서 IOS 프로젝트 추가

IOS 선택 후 -> 원하는 프로젝트 이름 선택 -> Create Project클릭

Create 를 누르면 다음과 같이 Install부분에서 설치마법사라고 있는데 이걸 프로젝트에서 입력하게 되면 자동으로 sentry에 필요한 부분을 설정해준다! (편리함 ㅎㅎ)

brew install getsentry/tools/sentry-wizard && sentry-wizard -i ios

다음과 같이 복붙을 하게 되면


이렇게 질문리스트가 나옴

Q.프로젝트가 깃허브 저장소 안에 있지 않은데 그냥 계속 진행해도 괜찮겠냐?

A. Yes

Q. Are you using Sentry SaaS or self-hosted Sentry? (센트리가 saas인지 아니면 onPremise인지?)

A. 저는 테스트를 위해 Saas환경에서 진행했기 떄문에 SentrySaaS 선택

Q. Do you already have a Sentry account? (센트리 계정이 있는지?)

A. 있다고 누르면 자동으로 링크가 열리고 만약 안열리면 빨간색 선이 그어져있는 링크를 타고 들어가면 됨 . 그 다음 내가 생성한 프로젝트로 로그인을 해주면 끝-

2. 프로젝트 확인

1번까지 완료를 하면

이렇게 자동으로 Sentry library가 추가됨.

또한

이렇게 App 메인에서 자동으로 DSN과 설정들을 추가를 해준다.(매우 편함ㅎㅎ)

만약 수동으로 하실거면 1번의 기능을 생략하시고 cocoapod에 sentry추가하고

sentry-cli upload-dsym

을 입력하여 dSYM(디버그 심볼파일)을 추가해줘야 됩니다.
**(만약 디버스 심볼 파일 추가 안하면 sentry가 앱의 크래시 로그를 제대로 볼수가 없습니다)

그 다음 Xcode에서 TARGETS -> Build Phases -> +버튼 누른 뒤 New Run Script Phase로 생성을 해주고 아래의 코드를 추가해줍니다.

# This script is responsable to upload debug symbols and source context for Sentry.
if [[ "$(uname -m)" == arm64 ]]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
if which sentry-cli >/dev/null; then
export SENTRY_ORG=AccountNAME
export SENTRY_PROJECT=YOUR-PROJECT-NAME
export SENTRY_AUTH_TOKEN=YOUR_TOKEN
    sentry-cli upload-dif "$DWARF_DSYM_FOLDER_PATH"
ERROR=$(sentry-cli debug-files upload --include-sources "$DWARF_DSYM_FOLDER_PATH" 2>&1 >/dev/null)
if [ ! $? -eq 0 ]; then
echo "warning: sentry-cli - $ERROR"
fi
else

이제 앱을 실행해보면 SentrySDK.capture(message: "This app uses Sentry! :)")가 뜨게 되는걸 볼수 있습니다. 정상적으로 ㅎㅎ

profile
배우고 경험한거 꾸준히 복습

0개의 댓글