Skip to content

Commit b278fe7

Browse files
committed
docs: update contributor research after testcontainers#10359 PR submission
- Added PR testcontainers#11577 to active PRs tracking - Updated testcontainers#10359 status from "무주공산" to "PR 제출 완료" - Updated priority list to reflect all 3 PRs now in review - Softened liveness check impact description per review feedback - Added deprecated class test coverage rationale
1 parent c172099 commit b278fe7

File tree

2 files changed

+108
-28
lines changed

2 files changed

+108
-28
lines changed

docs/contributor-research/README.md

Lines changed: 102 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,33 @@ Spring / Java / Kotlin 백엔드 엔지니어가 `testcontainers/testcontainers-
1010

1111
- 업스트림: `testcontainers/testcontainers-java`
1212
- 포크: `PreAgile/testcontainers-java`
13-
- 최종 업데이트: 2026-03-18
13+
- 최종 업데이트: 2026-03-22
1414

1515
활발하게 관리되고 있다는 신호:
1616

1717
- `good first issue` 라벨이 아직 사용 중
1818
- 2025 후반 ~ 2026 초반까지 머지된 PR이 있음
19-
- 최근 사람이 머지한 PR:
20-
- `#11564``2026-03-12` 머지 (우리 K6 docs PR)
19+
- 최근 머지된 PR:
20+
- `#11573``2026-03-19` 머지 (docs 버전 업데이트)
21+
- `#11572``2026-03-18` 머지 (docker-java 3.7.1 업데이트)
22+
- `#11564``2026-03-10` 머지 (**우리 K6 docs PR**)
2123
- `#11498``2026-02-26` 머지
22-
- `#11223``2026-03-02` 머지
2324

24-
## 완료된 PR
25+
## 기여 현황 요약
2526

26-
| PR | 이슈 | 상태 | 날짜 |
27-
|----|------|------|------|
28-
| `#11564` | `#8780` K6 docs/example | **머지됨** | 2026-03-12 |
27+
### 완료된 PR
28+
29+
| PR | 이슈 | 상태 | 날짜 | 비고 |
30+
|----|------|------|------|------|
31+
| `#11564` | `#8780` K6 docs/example | **머지됨** | 2026-03-10 | `eddumelendez` 리뷰 후 승인, +15/-2 |
32+
33+
### 진행 중인 PR
34+
35+
| PR | 이슈 | 상태 | 제출일 | 비고 |
36+
|----|------|------|--------|------|
37+
| `#11577` | `#10359` MariaDB liveness 포트 버그 수정 | **리뷰 대기** | 2026-03-22 | 코드 2줄 수정 + 테스트 1개. PR #5734 선례와 동일 패턴. 이슈에 코멘트 완료 |
38+
| `#11569` | `#11568` LocalStack 인증 토큰 문서 | **리뷰 대기** | 2026-03-18 | docs-only, +819줄. CI 코어 통과, Netlify 프리뷰 실패. 메인테이너 리뷰 아직 없음. 데드라인 **2026-03-23 (내일)** |
39+
| `#11571` | `#8797` R2DBC getR2dbcUrl 헬퍼 | **리뷰 대기** | 2026-03-18 | PostgreSQL + MySQL + MariaDB 3개 모듈 구현. 경쟁 PR 5개 중 가장 포괄적이고 메인테이너 합의 설계를 따름 |
2940

3041
## 메인테이너 선호 패턴
3142

@@ -42,31 +53,95 @@ Spring / Java / Kotlin 백엔드 엔지니어가 `testcontainers/testcontainers-
4253
- `eddumelendez` (주 리뷰어, 가장 활발)
4354
- `kiview` (설계 논의 참여, 빈도 낮음)
4455

45-
## 현재 TOP 5 후보 (2026-03-18)
56+
## 현재 이슈별 상세 현황 (2026-03-22)
57+
58+
### 1. `#11568` LocalStack 인증 토큰 문서 — 긴급
59+
60+
- **상태:** 이슈 OPEN, PR `#11569` 제출 완료 (리뷰 대기)
61+
- **긴급도:** 매우 높음 — 2026-03-23부터 `localstack/localstack:latest``LOCALSTACK_AUTH_TOKEN` 필수
62+
- **경쟁:** 없음. 이슈 작성자(`HarshCasper`, LocalStack 팀)가 우리 PR에 감사 코멘트
63+
- **다음 액션:** 메인테이너 리뷰 기다리기. Netlify 프리뷰 실패는 docs 빌드 이슈이므로 블로커 아님
64+
- **머지 확률:** 매우 높음 — 긴급한 실제 문제, 경쟁 없음, 이슈 작성자 지지
65+
- 상세: [issue-11568-localstack-auth-token.md](issue-11568-localstack-auth-token.md)
66+
67+
### 2. `#8797` R2DBC getR2dbcUrl 헬퍼 — 경쟁 치열
68+
69+
- **상태:** 이슈 OPEN, PR `#11571` 제출 완료 (리뷰 대기)
70+
- **메인테이너 합의 설계:** 각 구체 클래스(`MySQLR2DBCDatabaseContainer` 등)에 `static getR2dbcUrl(container)` 메서드 추가. `JdbcDatabaseContainer` 베이스에 넣지 않음
71+
- **경쟁 PR 현황:**
72+
| PR | 작성자 | 범위 | 설계 준수 | 상태 |
73+
|----|--------|------|----------|------|
74+
| `#11571` | **PreAgile (우리)** | PostgreSQL + MySQL + MariaDB | **준수** | OPEN |
75+
| `#11252` | papa-piton-2256 | MySQL만 | 준수 | OPEN (2025-11~) |
76+
| `#11340` | taole33 | MariaDB만 | 준수 | OPEN (2025-12~) |
77+
| `#11364` | NiMv1 | 베이스 클래스 | **미준수** | OPEN |
78+
| `#11131` | jan-knoblich | PostgreSQL + 베이스 | **미준수** | OPEN |
79+
- **우리 PR의 강점:** 3개 DB를 한 번에 커버하면서 메인테이너 합의 설계를 정확히 따름. 경쟁 PR 중 유일하게 종합적
80+
- **리스크:** 메인테이너가 "PR 하나에 모듈 하나" 원칙을 적용해 쪼개라고 요청할 수 있음
81+
- **다음 액션:** 리뷰 기다리기. 쪼개라는 요청 오면 즉시 대응
82+
- **머지 확률:** 중상 — 설계는 맞지만 경쟁이 많고, 범위가 넓어 리뷰 부담 있음
83+
- 상세: [issue-8797-r2dbc-url-strategy.md](issue-8797-r2dbc-url-strategy.md)
84+
85+
### 3. `#10359` MariaDB liveness 포트 버그 — PR 제출 완료
4686

47-
| 순위 | 이슈 | 유형 | 머지 확률 | 상세 문서 |
48-
|------|------|------|----------|----------|
49-
| 1 | `#11568` LocalStack 인증 토큰 문서 | 긴급 docs | 매우 높음 | [issue-11568-localstack-auth-token.md](issue-11568-localstack-auth-token.md) |
50-
| 2 | `#8797` R2DBC getR2dbcUrl 헬퍼 | 코드 + 설계 | 높음 | [issue-8797-r2dbc-url-strategy.md](issue-8797-r2dbc-url-strategy.md) |
51-
| 3 | `#11565` ContainerLessJdbcDelegate NPE | 버그 수정 | 중상 | [issue-11565-jdbc-npe-fix.md](issue-11565-jdbc-npe-fix.md) |
52-
| 4 | `#10359` MariaDB liveness 포트 버그 | 버그 수정 | 높음 | [issue-10359-mariadb-liveness-port.md](issue-10359-mariadb-liveness-port.md) |
53-
| 5 | `#11231` MSSQL GO 배치 구분자 | 기능 추가 | 중간 | [issue-11231-mssql-go-separator.md](issue-11231-mssql-go-separator.md) |
87+
- **상태:** 이슈 OPEN, PR `#11577` 제출 완료 (리뷰 대기), 이슈 코멘트 완료
88+
- **문제:** `MariaDBContainer.getLivenessCheckPortNumbers()`가 internal 포트를 리턴 → `HostPortWaitStrategy` and other liveness checks may inspect the wrong port
89+
- **수정 내용:**`MariaDBContainer` 구현체에서 `Sets.newHashSet(MARIADB_PORT)``super.getLivenessCheckPortNumbers()`. 미사용 `Sets` import 제거. 테스트 1개 추가 (MySQL/PostgreSQL/MSSQL과 동일 패턴)
90+
- **경쟁:** 없음
91+
- **머지 확률:** 매우 높음 — PR #5734 선례와 완전히 동일한 수정
92+
- **다음 액션:** 메인테이너 리뷰 기다리기
93+
- 상세: [issue-10359-mariadb-liveness-port.md](issue-10359-mariadb-liveness-port.md)
5494

55-
## 추천 실행 순서
95+
### 4. `#11565` ContainerLessJdbcDelegate NPE — 대기
5696

57-
### 1단계: 빠른 성과 (이번 주)
97+
- **상태:** 이슈 OPEN, PR 없음
98+
- **문제:** `closeConnectionQuietly()`에서 NPE. `ContainerLessJdbcDelegate`가 super의 connection 필드를 null로 남김
99+
- **경쟁:** `himi-sh`가 "작업하겠다"고 코멘트했지만 PR 미제출 (4일 경과)
100+
- **머지 확률:** 높음 — 명확한 버그, 작은 수정
101+
- **다음 액션:** `himi-sh`가 1주일 내 PR 안 올리면 진행 고려. 그 전에 PR 올리면 예의에 어긋남
102+
- 상세: [issue-11565-jdbc-npe-fix.md](issue-11565-jdbc-npe-fix.md)
58103

59-
1. **#11568 LocalStack 문서** — 데드라인 2026-03-23, 최대한 빨리 올릴 것
60-
2. **#10359 MariaDB 포트 수정** — 2줄 수정, 경쟁자 없음, 가장 빠른 버그 수정
104+
### 5. `#11231` MSSQL GO 배치 구분자 — 장기
61105

62-
### 2단계: 강한 시그널 코드 PR
106+
- **상태:** 이슈 OPEN, PR 없음, 코멘트 0개
107+
- **문제:** `ScriptUtils.java`가 separator를 하드코딩 → MSSQL의 `GO` 배치 구분자 지원 불가
108+
- **라벨 오류:** `modules/mysql`로 잘못 라벨링됨 (실제는 `modules/mssqlserver`)
109+
- **경쟁:** 없음
110+
- **머지 확률:** 중간 — 기능 추가라 설계 논의 필요, `ScriptUtils`는 공용 유틸이라 영향 범위 넓음
111+
- **다음 액션:** 메인테이너와 신뢰 쌓은 후 이슈에 설계 제안 코멘트 먼저
112+
- 상세: [issue-11231-mssql-go-separator.md](issue-11231-mssql-go-separator.md)
63113

64-
3. **#8797 R2DBC 헬퍼** — 이슈에 먼저 코멘트, 그 후 PostgreSQL/MySQL/MariaDB만 구현
114+
## 업데이트된 우선순위 (2026-03-22)
65115

66-
### 3단계: 기회가 될 때
116+
### 리뷰 대기 중 (모니터링)
67117

68-
4. **#11565 JDBC NPE**`himi-sh`가 PR을 안 올렸을 때만 진행
69-
5. **#11231 MSSQL GO** — 메인테이너와 신뢰가 쌓인 후에만 진행
118+
| 순위 | PR | 예상 대기 시간 | 주의사항 |
119+
|------|-----|---------------|---------|
120+
| **1** | `#11577` MariaDB 포트 | 수일 내 | 가장 작은 수정, 선례 명확 |
121+
| **2** | `#11569` LocalStack 문서 | 데드라인 내일, 빠른 리뷰 기대 | Netlify 실패 해결 필요할 수 있음 |
122+
| **3** | `#11571` R2DBC 헬퍼 | 1-2주 | 경쟁 PR 많아 시간 걸릴 수 있음. 쪼개기 요청 대비 |
123+
124+
### 대기 (조건부)
125+
126+
| 순위 | 이슈 | 조건 |
127+
|------|------|------|
128+
| **4** | `#11565` JDBC NPE | `himi-sh`~2026-03-25까지 PR 미제출 시 진행 |
129+
| **5** | `#11231` MSSQL GO | 머지 3개 이상 달성 후 진행 |
130+
131+
## 머지 확률 기반 전략 분석
132+
133+
**확실한 머지 (90%+):**
134+
- `#10359` MariaDB — PR `#11577` 제출 완료, 리뷰 대기
135+
- `#11568` LocalStack — PR `#11569` 제출 완료, 리뷰 대기
136+
137+
**높은 확률 (70%+):**
138+
- `#11565` JDBC NPE — 명확한 버그, 작은 수정 (경쟁자 선점 리스크만 있음)
139+
140+
**중간 확률 (50%+):**
141+
- `#8797` R2DBC — 설계는 맞지만 경쟁 치열, 메인테이너가 기존 PR 중 하나를 택할 수 있음
142+
- `#11231` MSSQL GO — 설계 논의 필요, 공용 유틸 변경
143+
144+
**핵심 인사이트:** `#10359` PR 제출 완료. 머지되면 기여 이력 2개(`#11564` + `#10359`)가 되면서 나머지 PR 리뷰 시 신뢰도가 올라감. 현재 3개 PR이 동시에 리뷰 대기 중 — "신뢰 축적" 전략이 전체 머지율을 높이는 핵심.
70145

71146
## PR 전략: 묶지 말고 하나씩
72147

@@ -78,6 +153,8 @@ Spring / Java / Kotlin 백엔드 엔지니어가 `testcontainers/testcontainers-
78153
- 별도 PR이 기여 이력을 보기 좋게 만듦
79154
- 머지된 PR 하나하나가 다음 PR의 신뢰도를 올려줌
80155

156+
**`#8797` R2DBC 참고:** 현재 3개 모듈을 하나의 PR에 넣었는데, 메인테이너가 쪼개라고 할 가능성 있음. 요청 시 즉시 모듈별로 분리할 것.
157+
81158
## 제외한 후보
82159

83160
| 이슈 | 이유 |

docs/contributor-research/issue-10359-mariadb-liveness-port.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
## 버그 내용
1212

13-
`MariaDBContainer.getLivenessCheckPortNumbers()`가 매핑된 외부 포트 대신 하드코딩된 내부 포트 `3306`을 반환함. 이 때문에 `HostPortWaitStrategy`가 컨테이너 준비 상태를 확인할 때 잘못된 포트를 체크함.
13+
`MariaDBContainer.getLivenessCheckPortNumbers()`가 매핑된 외부 포트 대신 하드코딩된 내부 포트 `3306`을 반환함. 이 때문에 `HostPortWaitStrategy` and other liveness checks may inspect the wrong port.
1414

1515
## 근본 원인
1616

@@ -87,9 +87,12 @@ public Set<Integer> getLivenessCheckPorts() {
8787
}
8888
```
8989

90-
### 테스트 파일 수정
90+
### 테스트 파일
9191

92-
`modules/mariadb/src/test/java/org/testcontainers/mariadb/MariaDBContainerTest.java`
92+
| 파일 | 범위 | 비고 |
93+
|------|------|------|
94+
| `modules/mariadb/src/test/java/org/testcontainers/mariadb/MariaDBContainerTest.java` | 새 패키지 검증 | 주 테스트 |
95+
| deprecated `containers.MariaDBContainer` | 별도 테스트 생략 | 두 클래스의 `getLivenessCheckPortNumbers` 구현이 동일 (`Sets.newHashSet(MARIADB_PORT)``super.getLivenessCheckPortNumbers()`). deprecated 쪽은 새 패키지로 마이그레이션 예정이므로 별도 테스트는 추가하지 않음. PR #5734 선례에서도 deprecated 구현에 대한 별도 테스트는 없었음 |
9396

9497
## 수정 내용
9598

0 commit comments

Comments
 (0)