Skip to content

feat: Sentry 연동#28

Merged
23tae merged 4 commits intodevelopfrom
feature/DND1302002-49
Aug 25, 2025
Merged

feat: Sentry 연동#28
23tae merged 4 commits intodevelopfrom
feature/DND1302002-49

Conversation

@23tae
Copy link
Copy Markdown
Member

@23tae 23tae commented Aug 25, 2025

📝 작업 내용

실시간 에러 트래킹 도구인 Sentry를 Spring Boot 애플리케이션에 연동했습니다.

⚡ 주요 변경사항

  1. Sentry 연동

    • Sentry Gradle Plugin을 도입하였습니다.
    • dev 환경에서만 Sentry가 활성화되도록 application-dev.yml에 설정을 추가하고, CI/CD 파이프라인에 관련 Secret(SENTRY_AUTH_TOKEN, SENTRY_DSN)을 연동했습니다.
  2. Slack 알림 설정

    • Sentry 대시보드에서 Slack Integration을 활성화했습니다.
    • 개발 서버(dev 환경)에서 새로운 유형의 에러(New Issue)가 발생하면, 지정된 Slack 채널로 즉시 알림이 오도록 Alert Rule을 설정했습니다.

📌 리뷰 포인트

  • 현재 Sentry Business Plan 평가판(14일)을 사용 중이므로 공식 Slack 연동 기능이 활성화되어 있습니다.
  • 평가판 종료 후 무료(Developer) 플랜으로 전환될 경우, 이 Slack 알림은 동작하지 않을 수 있습니다. 따라서 추후 알림 방식 전환이 필요합니다.

📋 체크리스트

  • ✍ PR 제목 규칙을 맞췄나요? (예: feat: 기능1 추가)
  • 📝 관련 이슈를 등록했나요?
  • ✅ 모든 테스트가 통과했나요?
  • 🏗 빌드가 정상적으로 완료되었나요?

Summary by CodeRabbit

  • Chores
    • 빌드·배포 파이프라인에 모니터링(Sentry) 연동을 추가해 빌드 시 비밀 토큰을 안전하게 주입하고 실행 컨테이너에 DSN를 전달하도록 개선했습니다.
    • 개발 환경 설정에 Sentry 항목(DSN, 환경, 트레이스 샘플링 비율, 기본 PII 전송, 활성화)을 추가했습니다.
    • 소스 컨텍스트 업로드 구성을 활성화해 이슈 분석 시 참고 정보를 포함하도록 했습니다.

@23tae 23tae self-assigned this Aug 25, 2025
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Aug 25, 2025

Walkthrough

CI/CD 파이프라인과 애플리케이션 설정에 Sentry 연동이 추가되었다. Gradle에 Sentry 플러그인과 설정이 도입되었고, 빌드 단계에서 SENTRY_AUTH_TOKEN이 비밀로 전달되어 사용되며, 배포 단계에서 SENTRY_DSN이 컨테이너 런타임으로 전달된다. Docker 빌드 단계가 BuildKit secret을 사용하도록 변경되었다.

Changes

Cohort / File(s) Summary
GitHub 워크플로우 (CI/배포)
.github/workflows/dev-ci-cd.yml, .github/workflows/ci.yml
빌드 단계에 SENTRY_AUTH_TOKEN을 환경/비밀로 노출(Gradle 빌드에 전달, Docker build secret 사용), 배포 단계에 SENTRY_DSN을 시크릿으로 선언하고 docker run-e SENTRY_DSN="$SENTRY_DSN" 전달
Gradle 설정
build.gradle.kts
io.sentry.jvm.gradle 플러그인(5.9.0) 추가 및 sentry { includeSourceContext.set(true); org.set("dnd1302"); projectName.set("eodigo-backend"); authToken.set(System.getenv("SENTRY_AUTH_TOKEN")) } 설정 추가
애플리케이션 구성 (dev)
src/main/resources/application-dev.yml
sentry: 블록 추가: dsn: ${SENTRY_DSN}, environment: dev, traces-sample-rate: 1.0, send-default-pii: true, enabled: true
도커 빌드 변경
Dockerfile
빌더 단계에서 BuildKit secret(sentryauthtoken)을 마운트하여 /run/secrets/sentryauthtoken에서 토큰을 읽고 SENTRY_AUTH_TOKEN으로 export한 후 ./gradlew bootJar 실행하도록 변경 (기존 최종 이미지 단계 변경 없음)

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as 개발자
  participant GH as GitHub Actions
  participant DockerBuild as Docker Build (BuildKit)
  participant Gradle as Gradle 빌드
  participant Sentry as Sentry (remote)
  participant EC2 as EC2 호스트
  participant Container as Docker 컨테이너
  participant App as Spring 앱

  Dev->>GH: push (dev CI/CD)
  GH->>DockerBuild: docker build --secret id=sentryauthtoken (env SENTRY_AUTH_TOKEN)
  DockerBuild->>DockerBuild: mount /run/secrets/sentryauthtoken, export SENTRY_AUTH_TOKEN
  DockerBuild->>Gradle: ./gradlew bootJar (SENTRY_AUTH_TOKEN env)
  Gradle->>Sentry: (옵션) 소스 컨텍스트 업로드 using authToken
  GH->>EC2: deploy (with secret SENTRY_DSN)
  EC2->>Container: docker run -e SENTRY_DSN="$SENTRY_DSN" image
  Container->>App: start
  App->>App: application-dev.yml reads SENTRY_DSN, init Sentry SDK
  App->>Sentry: send events/traces
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/DND1302002-49

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
build.gradle.kts (1)

27-70: 런타임 Sentry SDK 의존성이 누락되어 실제 전송이 되지 않습니다

현재는 Gradle 플러그인만 추가되어 있고, 애플리케이션 런타임에서 이벤트/트랜잭션을 캡처할 Sentry SDK 의존성이 없습니다. 최소한 Spring Boot 스타터와 로깅 연동을 추가해야 DSN 설정(application-dev.yml)이 효과를 냅니다.

다음과 같이 BOM을 통해 버전을 정렬하고 필수 모듈을 추가하는 것을 제안합니다:

 dependencies {
   implementation("org.springframework.boot:spring-boot-starter")
   implementation("org.springframework.boot:spring-boot-starter-web")
   implementation("org.springframework.boot:spring-boot-starter-actuator")
   implementation("org.jetbrains.kotlin:kotlin-reflect")
@@
   // Spring Webflux
   implementation("org.springframework.boot:spring-boot-starter-webflux")
@@
   // Jackson
   implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
+
+  // Sentry (runtime SDK)
+  implementation(platform("io.sentry:sentry-bom:7.17.0")) // 최신 BOM으로 정렬(버전은 조직 표준에 맞춰 조정)
+  implementation("io.sentry:sentry-spring-boot-starter-jakarta") // Spring Boot 3.x(Jakarta)용
+  implementation("io.sentry:sentry-logback") // Logback 로깅 연동
+  // (선택) Kotlin 확장
+  // implementation("io.sentry:sentry-kotlin-extensions")
 }

추가로, 로깅 패턴(로그백)이 Sentry appender를 통해 에러 레벨 이상이 전송되도록 설정되어야 합니다. 필요 시 logback 설정 스니펫도 제공하겠습니다.

.github/workflows/dev-ci-cd.yml (1)

41-56: SENTRY_AUTH_TOKEN이 Docker 빌드 컨텍스트로 전달되지 않습니다 (소스 컨텍스트 업로드 실패 가능)

env에 설정만으로는 컨테이너 내부 빌드 단계(Gradle)가 토큰을 못 받습니다. BuildKit secret 또는 build-arg로 전달해야 Sentry Gradle 플러그인이 릴리스/소스 업로드를 수행합니다. 토큰 노출 방지를 위해 secret 방식을 권장합니다.

BuildKit secret 사용 예시(권장):

       - name: Build and push Docker image
         id: build-image
         env:
           ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
           IMAGE_TAG: ${{ github.sha }}
-          SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
+          SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
         run: |
-          docker buildx build \
+          docker buildx build \
             --platform linux/amd64 \
             --tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG \
             --output type=image,push=true \
             --cache-from type=registry,ref=$ECR_REGISTRY/$ECR_REPOSITORY:buildcache \
             --cache-to type=registry,ref=$ECR_REPOSITORY:buildcache,mode=max \
+            --secret id=sentry_auth_token,env=SENTRY_AUTH_TOKEN \
             .

Dockerfile(빌드 스테이지) 내에서 Gradle 실행 시:

# syntax=docker/dockerfile:1.7
RUN --mount=type=secret,id=sentry_auth_token \
    export SENTRY_AUTH_TOKEN="$(cat /run/secrets/sentry_auth_token)" && \
    ./gradlew --no-daemon build

만약 secret 사용이 어렵다면 임시로 build-arg를 사용할 수 있으나, 이미지 레이어/히스토리에 남지 않도록 주의가 필요합니다.

🧹 Nitpick comments (5)
src/main/resources/application-dev.yml (3)

27-32: PII 전송 활성화(send-default-pii: true) 재검토 필요

dev 환경이라도 실제 사용자/운영 데이터가 유입될 수 있으면 PII 전송은 보안/컴플라이언스 리스크입니다. 기본값(false)을 유지하고, 필요한 경우 명시적으로 식별자만 설정하는 방향을 권장합니다.

다음처럼 비활성화하는 것을 제안드립니다:

 sentry:
   dsn: ${SENTRY_DSN}
   environment: dev
   traces-sample-rate: 1.0
-  send-default-pii: true
+  send-default-pii: false
   enabled: true

27-32: Sentry 활성화 제어 방식 단순화 제안

Sentry SDK는 dsn이 비어있으면 자동으로 비활성화됩니다. dev 프로필에서만 yml 블록을 두셨으므로 enabled: true는 사실상 중복입니다. 나중에 비밀값 누락 시 예측 가능한 동작을 위해 enabled 키를 제거하거나, 별도 환경변수로 토글하는 것을 권장합니다.

옵션 1(권장): enabled 제거

 sentry:
   dsn: ${SENTRY_DSN}
   environment: dev
   traces-sample-rate: 1.0
   send-default-pii: false
-  enabled: true

옵션 2: 외부 토글 사용

 sentry:
   dsn: ${SENTRY_DSN}
   environment: dev
   traces-sample-rate: 1.0
   send-default-pii: false
+  enabled: ${SENTRY_ENABLED:false}

29-31: 샘플링/프로파일링 설정 가이드

dev에서는 traces-sample-rate: 1.0이 무방하지만, 추후 stage/prod 전환 시 과도한 트래픽/비용을 유발할 수 있으니 sampler로 전환할 수 있도록 TODO를 남겨두면 좋습니다. 또한 성능 병목 분석이 필요하면 profiles-sample-rate(JFR 기반 프로파일링)도 고려ください.

예시:

sentry:
  # traces-sampler: com.example.SentrySampler  # 환경/경로/사용자에 따른 동적 샘플링
  # profiles-sample-rate: 0.2
build.gradle.kts (1)

76-82: AUTH 토큰 주입 방식 개선 및 Gradle 프로퍼티 폴백

CI에서 ENV만 기대하면 Docker 빌드 컨텍스트에 토큰이 전달되지 않을 수 있습니다(아래 워크플로우 코멘트 참고). 또한 환경변수 미설정 시 NPE/빈 문자열 문제를 피하기 위해 Gradle 프로퍼티 폴백을 두는 편이 안전합니다.

다음과 같이 Providers API로 안전하게 처리해 주세요:

-sentry {
-    includeSourceContext.set(true)
-
-    org.set("dnd1302")
-    projectName.set("eodigo-backend")
-    authToken.set(System.getenv("SENTRY_AUTH_TOKEN"))
-}
+sentry {
+    includeSourceContext.set(true)
+    org.set("dnd1302")
+    projectName.set("eodigo-backend")
+
+    // ENV 우선, 없으면 -P 또는 gradle.properties 값 사용
+    val envToken = providers.environmentVariable("SENTRY_AUTH_TOKEN")
+    val propToken = providers.gradleProperty("sentry.auth.token")
+    authToken.set(envToken.orElse(propToken))
+}

빌드시 -Psentry.auth.token=$SENTRY_AUTH_TOKEN로도 주입 가능해집니다.

.github/workflows/dev-ci-cd.yml (1)

64-107: 런타임 DSN 주입은 적절함. 환경값 명시 또는 릴리스 식별자 추가 제안

컨테이너에 SENTRY_DSN을 전달하는 구성이 올바르게 되어 있습니다. 추가로 이 배포가 dev임을 더 명확히 추적하려면 SENTRY_ENVIRONMENT=dev를 함께 넘기거나, 플러그인/SDK가 Git SHA를 릴리스로 인식하도록 SENTRY_RELEASE를 빌드 시점에 지정하는 것도 고려해 주세요.

예시(선택):

   docker run -d --name $CONTAINER_NAME -p $HOST_PORT:8080 --restart always \
   -e SPRING_PROFILES_ACTIVE=dev \
+  -e SENTRY_ENVIRONMENT=dev \
   -e DB_URL="$DB_URL" \
@@
   -e SENTRY_DSN="$SENTRY_DSN" \
   $IMAGE_URI

빌드 단계에서(선택):

export SENTRY_RELEASE=$GITHUB_SHA
# Gradle가 자동 감지하지 못할 경우 -Psentry.release=$SENTRY_RELEASE 전달
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7054a1c and 7a1655e.

📒 Files selected for processing (3)
  • .github/workflows/dev-ci-cd.yml (3 hunks)
  • build.gradle.kts (2 hunks)
  • src/main/resources/application-dev.yml (1 hunks)
🔇 Additional comments (2)
build.gradle.kts (1)

8-9: 확인: Sentry Gradle 플러그인 5.9.0 호환성

현재 사용 중인 id("io.sentry.jvm.gradle") version "5.9.0"

  • 최신 배포 버전으로, 2025년 8월 12일 기준 5.9.0이 릴리스되었습니다. (mvnrepository.com)
  • Gradle 8.x와 호환되며(플러그인 v3.4.3에서 이미 Gradle 8 지원이 추가됨) (github.com)
  • Sentry Java SDK가 Java 1.8 이상을 지원하므로 Java 17에서도 문제없이 동작합니다. (docs.sentry.io)
  • Spring Boot 3.x 환경에서는 sentry-spring-boot-starter-jakarta를 자동으로 적용하므로 Spring Boot 3.5.x와 함께 사용할 수 있습니다. (docs.sentry.io)

따라서 별도의 버전 변경 없이 현재 설정을 유지해도 무방합니다.

.github/workflows/dev-ci-cd.yml (1)

57-131: 배포 실패 시 로그 노출 가드 검증 완료

다음 위치에서 SENTRY_DSNSENTRY_AUTH_TOKEN 환경변수를 참조하고 있으나, 애플리케이션 로그나 스크립트 내 직접 출력 코드는 없습니다. 안전하게 배포 파이프라인을 유지하셔도 좋습니다.

  • build.gradle.kts (81행): authToken.set(System.getenv("SENTRY_AUTH_TOKEN")) – Gradle Sentry 플러그인 설정용 참조
  • src/main/resources/application-dev.yml (28행): dsn: ${SENTRY_DSN} – 스프링 프로퍼티로 주입

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (5)
.github/workflows/ci.yml (1)

43-45: CI 빌드 시 Sentry 업로드 토큰 검증 로직 추가 제안

Gradle 설정에서 Sentry 플러그인(io.sentry.jvm.gradle v5.9.0)이 적용되어 있고, sentry { … } 블록(includeSourceContext.set(true), org.set("…"))이 정의되어 있으나, authToken.set(…) 같은 토큰 관련 설정이 코드상에 없습니다.
이 경우, SENTRY_AUTH_TOKEN이 주입되지 않는 포크 PR 환경에서는 업로드 태스크가 실패하거나 예기치 않은 동작을 일으킬 수 있습니다. CI의 안정성을 위해, 토큰이 있을 때만 업로드를 시도하도록 워크플로우에 조건부 가드를 추가해 주세요.

– 대상 파일: .github/workflows/ci.yml (43–45행)
– 추가 작업: SENTRY_AUTH_TOKEN 환경변수 존재 여부 확인 후 빌드 및 업로드 수행

적용 예시(diff):

       - name: Build with Gradle
-        env:
-          SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
-        run: ./gradlew build
+        env:
+          SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
+        run: |
+          if [ -n "${SENTRY_AUTH_TOKEN}" ]; then
+            echo "🔒 SENTRY_AUTH_TOKEN detected: enabling Sentry upload tasks."
+            ./gradlew build
+          else
+            echo "⚠️ SENTRY_AUTH_TOKEN not set: skipping Sentry upload."
+            ./gradlew build
+          fi
Dockerfile (1)

18-20: BuildKit 시크릿 사용 적절함. Gradle 캐시 마운트로 빌드 시간을 단축하세요.

현재 시크릿은 안전하게 RUN 레이어에서만 사용되어 이미지/레이어에 남지 않습니다. 추가로 Gradle 캐시를 마운트하면 CI/CD 빌드 시간이 크게 줄어듭니다.

적용 제안(diff):

-RUN --mount=type=secret,id=sentryauthtoken \
-    export SENTRY_AUTH_TOKEN=$(cat /run/secrets/sentryauthtoken) && \
-    ./gradlew bootJar --no-daemon
+RUN --mount=type=secret,id=sentryauthtoken \
+    --mount=type=cache,target=/home/gradle/.gradle/caches \
+    --mount=type=cache,target=/home/gradle/.gradle/wrapper \
+    export SENTRY_AUTH_TOKEN="$(cat /run/secrets/sentryauthtoken)" && \
+    ./gradlew bootJar --no-daemon

로컬에서 Docker 이미지를 빌드할 때 --secret id=sentryauthtoken,env=SENTRY_AUTH_TOKEN를 전달하지 않으면 BuildKit이 에러를 반환합니다. 로컬 개발 편의를 위해 “시크릿 없이도 빌드되되, 업로드는 생략”하는 플로우가 필요하면 아래 두 가지 중 하나를 택해 주세요.

  • Dockerfile 대안: 별도의 “local” 스테이지를 만들어 시크릿 마운트 없이 빌드(업로드 태스크가 비활성화되도록 Gradle 설정 필요).
  • Gradle 대안: SENTRY_AUTH_TOKEN이 비어 있으면 업로드 태스크를 등록하지 않거나 no-op 처리.

원하시면 두 방식 중 선호하시는 쪽으로 Dockerfile/Gradle 설정 패치를 제안드리겠습니다.

.github/workflows/dev-ci-cd.yml (3)

46-51: 시크릿 전달 방식 적절. 릴리스 상관관계를 위해 SENTRY_RELEASE/이미지 라벨을 함께 전파하세요.

Sentry 이슈와 배포 아티팩트(이미지/커밋)를 정확히 매핑하려면 릴리스 식별자를 일관되게 전달하는 것이 좋습니다. 현재는 DSN만 전달되고 있어, Sentry 측 릴리스/아티팩트 상관관계가 약합니다.

적용 제안(diff):

       - name: Build and push Docker image
         id: build-image
         env:
           ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
           IMAGE_TAG: ${{ github.sha }}
           SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
+          SENTRY_RELEASE: ${{ github.sha }}
         run: |
           docker buildx build \
             --platform linux/amd64 \
             --secret id=sentryauthtoken,env=SENTRY_AUTH_TOKEN \
+            --label org.opencontainers.image.revision=$IMAGE_TAG \
+            --label org.opencontainers.image.source=${{ github.repository }} \
+            --label org.opencontainers.image.created=${{ github.event.head_commit.timestamp }} \
+            --build-arg SENTRY_RELEASE=$IMAGE_TAG \
             --tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG \
             --output type=image,push=true \
             --cache-from type=registry,ref=$ECR_REGISTRY/$ECR_REPOSITORY:buildcache \
             --cache-to type=registry,ref=$ECR_REGISTRY/$ECR_REPOSITORY:buildcache,mode=max \
             .

추가로 Dockerfile에서 다음을 받아 적용하면 릴리스 값이 런타임/플러그인 모두에 전달됩니다.

  • Dockerfile(빌더 스테이지 상단 등)에 추가:
    ARG SENTRY_RELEASE
    ENV SENTRY_RELEASE=${SENTRY_RELEASE}
    
  • Gradle 플러그인/애플리케이션에서 SENTRY_RELEASE 환경변수를 사용하도록 설정.

Sentry Gradle 플러그인이 릴리스 값을 어떻게 해석하는지 현재 설정을 점검해 주세요. 릴리스가 커밋 SHA(IMAGE_TAG)로 설정되면 추후 배포 추적/이슈 회귀 분석이 수월해집니다.


76-78: Secrets 개수 증가: 운영/보안 관점에서 AWS SSM/Secrets Manager로 이전 고려

DB 자격증명, 각종 API 키, SENTRY_DSN이 모두 런너 환경변수로 주입되고 있습니다. dev 환경이라도, self-hosted 러너 보안/감사 요건을 고려하면 AWS SSM Parameter Store 또는 Secrets Manager에서 컨테이너 기동 시 주입(예: init 컨테이너, 혹은 애플리케이션 부팅 시 fetch)으로 전환하는 방안을 검토해 주세요.

원하시면 Parameter Store를 사용하는 진입 스크립트/권한 최소화 정책(IAM Role + 최소 권한) 샘플을 드리겠습니다.


107-108: 런타임에서도 SENTRY_ENVIRONMENT/SENTRY_RELEASE를 명시적으로 설정하세요.

application-dev.yml에서 environment를 dev로 설정했더라도, 컨테이너 실행 시 명시적으로 전달하면 오동작 가능성을 줄일 수 있습니다. 또한 릴리스 값을 함께 넘기면 Sentry 이슈-릴리스 연결이 좋아집니다.

적용 제안(diff):

           -e ADMIN_API_KEY="$ADMIN_API_KEY" \
-          -e SENTRY_DSN="$SENTRY_DSN" \
+          -e SENTRY_DSN="$SENTRY_DSN" \
+          -e SENTRY_ENVIRONMENT="dev" \
+          -e SENTRY_RELEASE="$IMAGE_TAG" \
           $IMAGE_URI

컨테이너 내부에서 다음을 확인해 보세요.

  • echo $SENTRY_DSN, echo $SENTRY_ENVIRONMENT, echo $SENTRY_RELEASE 값이 기대대로 설정되는지
  • Spring 설정(application-dev.yml)이 환경변수 값을 우선 사용하거나 충돌 없이 병합되는지
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7a1655e and 4758eb8.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml (1 hunks)
  • .github/workflows/dev-ci-cd.yml (3 hunks)
  • Dockerfile (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build-and-test

@23tae 23tae merged commit 2b68a68 into develop Aug 25, 2025
2 checks passed
@23tae 23tae deleted the feature/DND1302002-49 branch August 25, 2025 10:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant