Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
04fed99
docs: add agent coding guidelines
jung-min-ju Aug 10, 2026
e856a21
Merge pull request #1 from ktb-BootcampChat-13/agent/add-agents-guide…
jung-min-ju Aug 10, 2026
a7dfe7a
Merge pull request #2 from ktb-BootcampChat-13/develop
jung-min-ju Aug 10, 2026
c5f1456
refactor: Redis 기반 세션 인증 방식으로 개선
jaksfj Aug 11, 2026
c89071f
Merge pull request #3 from jaksfj/feature/redis-세션-인증방식-개선
jaksfj Aug 11, 2026
173f94c
perf(load): add rooms API k6 scenario
jung-min-ju Aug 10, 2026
8a3a543
perf(rooms): batch room list lookups
jung-min-ju Aug 10, 2026
46d9df8
perf(observe): add API bottleneck diagnostics
jung-min-ju Aug 11, 2026
7ba1bc0
docs(pr): add metric-focused template
jung-min-ju Aug 11, 2026
de1b0fc
Merge pull request #6 from ktb-BootcampChat-13/docs/metric-focused-pr…
jung-min-ju Aug 11, 2026
a7a9dd0
Merge pull request #7 from jaksfj/feature/redis-세션-인증방식-개선
jaksfj Aug 11, 2026
5372bc5
docs(pr): clarify review evidence flow
jung-min-ju Aug 11, 2026
6f729b2
docs(pr): add result metric table
jung-min-ju Aug 11, 2026
9f8bfea
docs(pr): allow change-specific metrics
jung-min-ju Aug 11, 2026
2cdb306
Merge pull request #4 from ktb-BootcampChat-13/perf/rooms-list-batch-…
jaksfj Aug 11, 2026
fe5a2b3
Merge pull request #8 from ktb-BootcampChat-13/docs/metric-focused-pr…
jung-min-ju Aug 11, 2026
ce10785
Merge pull request #5 from ktb-BootcampChat-13/perf/api-bottleneck-ob…
jung-min-ju Aug 11, 2026
074b76b
Merge pull request #9 from ktb-BootcampChat-13/develop
jung-min-ju Aug 11, 2026
c31df8a
s3개발
rkdwlss2 Aug 11, 2026
c0455b8
Merge pull request #10 from ktb-BootcampChat-13/feature/s3
rkdwlss2 Aug 11, 2026
a81291b
perf: add room timestamp message index
jaksfj Aug 11, 2026
441479a
perf: add room detail load test
jaksfj Aug 11, 2026
4d2f9de
test: wait for registration outcome
jaksfj Aug 11, 2026
296104d
Merge pull request #13 from jaksfj/test/stabilize-register-navigation
jaksfj Aug 11, 2026
914caf3
Merge pull request #12 from jaksfj/perf/room-detail-load-test
jaksfj Aug 11, 2026
8fde958
Merge pull request #11 from jaksfj/perf/message-room-timestamp-index
jaksfj Aug 11, 2026
01b725d
Merge pull request #14 from ktb-BootcampChat-13/develop
jaksfj Aug 11, 2026
64b9e63
s3config
rkdwlss2 Aug 11, 2026
2e15747
Merge pull request #16 from ktb-BootcampChat-13/feat/s3-config
rkdwlss2 Aug 11, 2026
63e9bf7
s3config
rkdwlss2 Aug 11, 2026
9d846a8
Merge pull request #17 from ktb-BootcampChat-13/feat/s3-config-master
rkdwlss2 Aug 11, 2026
9f797b8
s3config
rkdwlss2 Aug 11, 2026
a76daf5
Merge pull request #18 from ktb-BootcampChat-13/feat/s3-config
rkdwlss2 Aug 11, 2026
3ecaa8a
fix encoded chat room IDs
jaksfj Aug 11, 2026
078db68
Merge pull request #19 from jaksfj/agent/decode-chat-room-id
jaksfj Aug 11, 2026
907cfbb
perf(room): make joins atomic
jung-min-ju Aug 11, 2026
4bdede9
perf: optimize room detail and REST join queries
jaksfj Aug 11, 2026
f598e55
Merge pull request #20 from ktb-BootcampChat-13/agent/optimize-room-join
jung-min-ju Aug 11, 2026
d4456cc
feat: migrate unique users email index
jaksfj Aug 11, 2026
69e0074
perf: record room detail and join experiments
jaksfj Aug 11, 2026
e5e419c
Merge master into develop
jung-min-ju Aug 11, 2026
581916c
Merge pull request #21 from ktb-BootcampChat-13/agent/sync-master-int…
jung-min-ju Aug 11, 2026
f28a62e
Merge pull request #22 from ktb-BootcampChat-13/develop
jung-min-ju Aug 11, 2026
ece990f
fix(frontend): 로그인과 채팅 화면 안정화
jung-min-ju Aug 11, 2026
c26ea4a
perf(mongo): 파일 참조 조회 인덱스 추가
jung-min-ju Aug 11, 2026
b579e97
build(frontend): webpack 빌드로 고정
jung-min-ju Aug 11, 2026
ecda477
Merge upstream/master and adopt measured room optimizations
jaksfj Aug 11, 2026
cb027aa
Merge pull request #23 from ktb-BootcampChat-13/codex/stability-fixes
jung-min-ju Aug 11, 2026
0201025
Merge pull request #24 from jaksfj/perf/room-detail-join-final
jaksfj Aug 11, 2026
a790293
fix(frontend): 로그인과 채팅 화면 안정화
jung-min-ju Aug 11, 2026
347b7e5
perf(mongo): 파일 참조 조회 인덱스 추가
jung-min-ju Aug 11, 2026
ed4b774
build(frontend): webpack 빌드로 고정
jung-min-ju Aug 11, 2026
4cf1448
Merge pull request #25 from ktb-BootcampChat-13/codex/stability-fixes…
jung-min-ju Aug 11, 2026
89f3f27
Merge pull request #26 from ktb-BootcampChat-13/develop
jaksfj Aug 11, 2026
869cdb2
perf(socket): batch room join critical path
jung-min-ju Aug 11, 2026
ee43cbd
Merge pull request #27 from ktb-BootcampChat-13/feature/nplus
jung-min-ju Aug 11, 2026
9ee29bc
Merge pull request #28 from ktb-BootcampChat-13/develop
jung-min-ju Aug 11, 2026
43ea501
채팅방 생성 안정화 및 진단 강화
jung-min-ju Aug 11, 2026
caa6f5e
Merge pull request #29 from ktb-BootcampChat-13/codex/room-creation-s…
jung-min-ju Aug 11, 2026
8cf1ea0
Merge pull request #30 from ktb-BootcampChat-13/develop
jung-min-ju Aug 11, 2026
bc50f45
test(e2e): diagnose login fill failures under load
Aug 11, 2026
e7d3dd1
Merge pull request #31 from ktb-BootcampChat-13/codex/login-fill-fail…
jung-min-ju Aug 11, 2026
f1e8341
feat(upload): S3 보조 미러 업로드 추가
jung-min-ju Aug 11, 2026
6ff3ae5
Merge pull request #33 from ktb-BootcampChat-13/feature/s3-presigned-…
jung-min-ju Aug 11, 2026
86e85a1
fix(chat): stabilize room list under E2E load
Aug 11, 2026
aeef7a7
Merge pull request #35 from ktb-BootcampChat-13/fix/room-list-load-te…
dddf-1 Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
## 한눈에 보기

| 구분 | 내용 |
|---|---|
| 문제 | |
| 확인된 원인 | |
| 해결 방법 | |
| 사용자·개발자 영향 | |

<!-- PR 전체를 읽지 않아도 변경 이유와 결론을 이해할 수 있게 한 문장씩 작성합니다. -->

## 확인 과정

| 단계 | 확인한 내용 | 판단 근거 |
|---:|---|---|
| 1. 재현 | | |
| 2. 원인 확인 | | |
| 3. 해결안 선택 | | |

<!-- 추측이 아니라 로그, 쿼리, 화면 동작, 테스트 실패처럼 직접 확인한 근거를 작성합니다. -->

## 구현 내용

| 영역 | 변경 내용 | 변경 이유 |
|---|---|---|
| | | |

<!-- API 응답, 이벤트, 데이터 형식처럼 유지한 동작이 있으면 함께 작성합니다. -->

## 검증 조건

| 항목 | 조건 |
|---|---|
| 테스트 대상 | |
| 데이터·환경 | |
| 실행 횟수·부하 | |
| 통과 기준 | |

<!-- 별도 측정이 필요 없는 PR은 불필요한 행을 삭제합니다. -->

## 검증 결과

| 확인 항목 | 변경 전 | 변경 후 | 판정 |
|---|---:|---:|---|
| | | | |

| 지표 | 변경 전 | 변경 후 | 변화 |
|---|---:|---:|---:|
| p95 | | | |
| p99 | | | |
| 오류율 | | | |
| 병목 지표 | | | |

<!-- 기능 PR은 첫 표에 성공·실패 케이스를 작성합니다. 성능 PR은 두 표를 모두 사용합니다. 표의 기본 지표는 예시이며 구현사항에 따라 쿼리 수, 처리량, 자원 사용량, 성공 케이스 등 필요한 지표를 추가하거나 교체합니다. 결과가 나온 이유도 2~3문장으로 설명합니다. -->

## 영향 범위와 후속 작업

- 영향받는 기능:
- 이번 PR에서 제외한 범위:
- 다음 작업:

## 체크리스트

- [ ] 문제를 재현하고 원인을 확인했습니다.
- [ ] 변경에 직접 관련된 테스트를 통과했습니다.
- [ ] 기존 API·이벤트·화면 동작의 유지 여부를 확인했습니다.
- [ ] 실행하지 못한 검증이나 남은 위험을 작성했습니다.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.DS_Store
apps/backend/target/
65 changes: 65 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# AGENTS.md

Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.

**Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.

## 1. Think Before Coding

**Don't assume. Don't hide confusion. Surface tradeoffs.**

Before implementing:
- State your assumptions explicitly. If uncertain, ask.
- If multiple interpretations exist, present them - don't pick silently.
- If a simpler approach exists, say so. Push back when warranted.
- If something is unclear, stop. Name what's confusing. Ask.

## 2. Simplicity First

**Minimum code that solves the problem. Nothing speculative.**

- No features beyond what was asked.
- No abstractions for single-use code.
- No "flexibility" or "configurability" that wasn't requested.
- No error handling for impossible scenarios.
- If you write 200 lines and it could be 50, rewrite it.

Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.

## 3. Surgical Changes

**Touch only what you must. Clean up only your own mess.**

When editing existing code:
- Don't "improve" adjacent code, comments, or formatting.
- Don't refactor things that aren't broken.
- Match existing style, even if you'd do it differently.
- If you notice unrelated dead code, mention it - don't delete it.

When your changes create orphans:
- Remove imports/variables/functions that YOUR changes made unused.
- Don't remove pre-existing dead code unless asked.

The test: Every changed line should trace directly to the user's request.

## 4. Goal-Driven Execution

**Define success criteria. Loop until verified.**

Transform tasks into verifiable goals:
- "Add validation" → "Write tests for invalid inputs, then make them pass"
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
- "Refactor X" → "Ensure tests pass before and after"

For multi-step tasks, state a brief plan:
```
1. [Step] → verify: [check]
2. [Step] → verify: [check]
3. [Step] → verify: [check]
```

Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.

---

**These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes.
1 change: 1 addition & 0 deletions apps/backend/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
uploads/*
.env

# Eclipse JDT / LSP 생성 파일
.classpath
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/DEPLOY.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@ tail -f logs/app.log
REDIS_HOST=localhost
REDIS_PORT=6379

# 원본 파일은 서버에 유지하고, 선택적 S3 mirror는 IAM Role로 PUT만 수행
FILE_STORAGE_TYPE=local
S3_BUCKET=your-s3-bucket
AWS_REGION=ap-northeast-2
S3_ENDPOINT=
S3_PATH_STYLE_ACCESS=false

# 서버 포트
PORT=5001
WS_PORT=5002
Expand Down
5 changes: 5 additions & 0 deletions apps/backend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ make verify-java
| `MONGO_URI` | ✅ | 없음 | MongoDB 연결 문자열 |
| `REDIS_HOST` | ✅ | 없음 | Redis 호스트 |
| `REDIS_PORT` | ✅ | 없음 | Redis 포트 |
| `FILE_STORAGE_TYPE` | ❌ | `local` | 원본 파일 저장 방식. S3 mirror 모드에서도 `local` 유지 |
| `S3_BUCKET` | ✅ | 없음 | 이미지 및 첨부 파일을 저장할 S3 버킷 |
| `AWS_REGION` | ❌ | `ap-northeast-2` | S3 버킷 리전 |
| `S3_ENDPOINT` | ❌ | 빈 값 | AWS S3 호환 스토리지의 사용자 지정 엔드포인트 |
| `S3_PATH_STYLE_ACCESS` | ❌ | `false` | path-style S3 URL 사용 여부 |
| `PORT` | ❌ | `5001` | HTTP API 포트 (`server.port`) |
| `WS_PORT` | ❌ | `5002` | Socket.IO 서버 포트 |
| `CORS_ALLOWED_ORIGINS` | ❌ | `*` | REST API CORS 허용 Origin 목록. 쉼표로 구분 |
Expand Down
37 changes: 37 additions & 0 deletions apps/backend/docs/S3_DIRECT_UPLOAD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# S3 PutObject mirror upload

`NEXT_PUBLIC_FILE_UPLOAD_MODE=mirror`는 기존 multipart 업로드가 성공한 뒤 같은 파일을
S3 `pending/mirror/`에 best-effort로 복제한다. 서비스 원본과 응답 계약은 기존 서버
저장소를 유지하며, S3 실패는 사용자 업로드 성공을 되돌리지 않는다. 기본값은 `server`다.

백엔드는 `FILE_STORAGE_TYPE=local`, `S3_BUCKET`, `AWS_REGION`을 사용한다. IAM Role에는
`s3:PutObject`만 필요하고 애플리케이션은 미러 객체에 GET, HEAD, Copy, Delete를 호출하지
않는다. AWS 자격증명은 이미지나 환경변수에 넣지 않는다.

## Bucket CORS

`https://frontend.example.com`을 실제 운영 origin으로 바꾸고 `*`는 사용하지 않는다.

```json
[
{
"AllowedOrigins": ["https://frontend.example.com"],
"AllowedMethods": ["PUT"],
"AllowedHeaders": ["content-type", "x-amz-*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 300
}
]
```

`pending/` prefix 객체를 1일 후 삭제하는 lifecycle rule을 설정한다. PUT URL은 5분,
MongoDB intent는 15분 후 만료된다.

## Rollout

1. 기존 서버 저장소가 정상인지 확인한다.
2. 운영 이미지를 `--build-arg NEXT_PUBLIC_FILE_UPLOAD_MODE=mirror`로 빌드한다.
3. `mirror_presign_success`, `mirror_put_success`, `mirror_put_failure`를 관찰한다.
4. 문제가 생기면 프론트만 `server`로 다시 빌드한다.

이 모드는 백엔드 업로드 부하를 제거하거나 S3를 영구 원본으로 사용하지 않는다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"uid": "ktb-chat-monitoring",
"title": "KTB Chat Monitoring",
"tags": ["ktb", "loadtest"],
"timezone": "browser",
"schemaVersion": 39,
"version": 1,
"refresh": "5s",
"time": { "from": "now-15m", "to": "now" },
"templating": { "list": [] },
"panels": [
{
"id": 1,
"type": "stat",
"title": "Monitored targets",
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 0 },
"targets": [{ "expr": "count(up{job!=\"cadvisor\"})", "legendFormat": "targets", "refId": "A" }],
"fieldConfig": { "defaults": { "unit": "none", "color": { "mode": "thresholds" }, "thresholds": { "mode": "absolute", "steps": [{ "color": "red", "value": null }, { "color": "green", "value": 1 }] } }, "overrides": [] },
"options": { "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "orientation": "auto", "textMode": "auto", "colorMode": "value" }
},
{
"id": 2,
"type": "timeseries",
"title": "HTTP requests / sec",
"gridPos": { "h": 8, "w": 18, "x": 6, "y": 0 },
"targets": [{ "expr": "sum by (status) (rate(http_server_requests_seconds_count{application=\"ktb-chat-backend\"}[1m]))", "legendFormat": "status {{status}}", "refId": "A" }],
"fieldConfig": { "defaults": { "unit": "reqps", "color": { "mode": "palette-classic" } }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }
},
{
"id": 3,
"type": "timeseries",
"title": "HTTP average latency",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 },
"targets": [{ "expr": "sum(rate(http_server_requests_seconds_sum{application=\"ktb-chat-backend\"}[1m])) / sum(rate(http_server_requests_seconds_count{application=\"ktb-chat-backend\"}[1m]))", "legendFormat": "average", "refId": "A" }],
"fieldConfig": { "defaults": { "unit": "s" }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }
},
{
"id": 4,
"type": "timeseries",
"title": "JVM heap used",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 },
"targets": [{ "expr": "sum(jvm_memory_used_bytes{application=\"ktb-chat-backend\",area=\"heap\"})", "legendFormat": "heap", "refId": "A" }],
"fieldConfig": { "defaults": { "unit": "bytes" }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }
},
{
"id": 5,
"type": "timeseries",
"title": "JVM CPU",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 16 },
"targets": [{ "expr": "process_cpu_usage{application=\"ktb-chat-backend\"}", "legendFormat": "process", "refId": "A" }],
"fieldConfig": { "defaults": { "unit": "percentunit", "min": 0, "max": 1 }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } }
},
{
"id": 6,
"type": "timeseries",
"title": "MongoDB and Redis exporter up",
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 16 },
"targets": [
{ "expr": "up{job=\"mongodb\"}", "legendFormat": "mongodb", "refId": "A" },
{ "expr": "up{job=\"redis\"}", "legendFormat": "redis", "refId": "B" }
],
"fieldConfig": { "defaults": { "unit": "none", "min": 0, "max": 1 }, "overrides": [] },
"options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "multi" } }
}
]
}
17 changes: 2 additions & 15 deletions apps/backend/monitoring/prometheus/prometheus.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ scrape_configs:

- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
# Performance diagnostics need to see short-lived pool saturation spikes.
scrape_interval: 1s
static_configs:
- targets: ['host.docker.internal:5001']
labels:
Expand All @@ -31,17 +32,3 @@ scrape_configs:
- targets: ['redis-exporter:9121']
labels:
environment: 'dev'

- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
labels:
environment: 'dev'
metric_relabel_configs:
# Extract container name from container_label_com_docker_compose_service
- source_labels: [container_label_com_docker_compose_service]
target_label: container_name
# Extract container name from id (fallback)
- source_labels: [id]
regex: '/docker/([a-f0-9]+)'
target_label: container_id
12 changes: 12 additions & 0 deletions apps/backend/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,17 @@
<properties>
<java.version>25</java.version>
<spring-ai.version>2.0.0</spring-ai.version>
<aws-sdk.version>2.47.3</aws-sdk.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws-sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
Expand Down Expand Up @@ -61,6 +69,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
Expand Down
20 changes: 20 additions & 0 deletions apps/backend/src/main/java/com/ktb/chatapp/config/MongoConfig.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
package com.ktb.chatapp.config;

import com.ktb.chatapp.model.MessageType;
import java.util.List;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.mongodb.config.EnableMongoAuditing;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
import org.springframework.data.convert.ReadingConverter;

@Configuration
@EnableMongoAuditing
public class MongoConfig {

@Bean
MongoCustomConversions mongoCustomConversions() {
return new MongoCustomConversions(List.of(new MessageTypeReadConverter()));
}

@ReadingConverter
static class MessageTypeReadConverter implements Converter<String, MessageType> {
@Override
public MessageType convert(String source) {
return MessageType.valueOf(source.toLowerCase(Locale.ROOT));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.ktb.chatapp.config;

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.mongodb.DefaultMongoConnectionPoolTagsProvider;
import io.micrometer.core.instrument.binder.mongodb.MongoMetricsConnectionPoolListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Supplies Micrometer's standard MongoDB pool listener. Spring Boot's Mongo metrics
* auto-configuration attaches this bean to the auto-configured MongoClient.
*/
@Configuration(proxyBeanMethods = false)
public class MongoPoolMetricsConfig {

@Bean
MongoMetricsConnectionPoolListener mongoMetricsConnectionPoolListener(MeterRegistry registry) {
return new MongoMetricsConnectionPoolListener(
registry, new DefaultMongoConnectionPoolTagsProvider());
}
}
Loading