Spring/Java 오픈소스 프로젝트에 직접 기여하며 문제 정의, 구현, 검증, 리뷰 대응, 회고를 기록한 저장소입니다.
목표는 단순히 PR 개수를 늘리는 것이 아니라, 어떤 문제를 어떤 범위로 고쳐야 실제로 머지될 수 있는지 판단할 수 있는 백엔드 개발자임을 증명하는 것입니다.
- Spring 생태계와 Java 오픈소스 프로젝트에서 실제 이슈를 읽고, 수정 범위를 좁혀 PR까지 만든 경험
- 문서 수정, 버그 수정, 설정/진단 개선까지 서로 다른 유형의 변경을 다룬 경험
- 머지된 PR뿐 아니라 종료된 PR까지 분석하며 작업 기준을 개선한 과정
- AI를 탐색과 검증 가속에 활용하되, 최종 판단과 품질 책임은 직접 진 방식
기준일: 2026-04-06
| 항목 | 내용 |
|---|---|
| 총 PR | 21개 |
| ✅ 머지 | 3개 |
| ⏳ 리뷰 대기 | 6개 |
| ⚪ 종료·자진 정리 | 12개 |
| 주요 프로젝트 | Spring Guides, Spring REST Docs, Spring Batch, Spring Boot, Spring Security, Apache Iceberg, Querydsl |
- 문제: pre-initialized project 링크의
packageName이 실제 가이드 코드 경로와 맞지 않았습니다. - 해결: Spring Initializr 링크 파라미터를 수정해 생성 결과와 문서 예제가 일치하도록 맞췄습니다.
- 배운 점: 첫 기여일수록 작고 명확하며 저장소 경계가 분명한 문제를 고르는 것이 중요합니다.
- 상세 문서: Spring Guides 사례 자세히 보기
- PR 링크: spring-guides/gs-rest-service#175
- 문제:
schemas.md의uuid행에 마크다운 표 문법 오류가 있었고, 문서 정합성이 깨져 있었습니다. - 해결: 누락된 Notes 컬럼과 닫는 파이프를 복구하고, 렌더링과 before/after 자료로 변경 의도를 설명했습니다.
- 배운 점: 겉으로 보이는 변화가 작아도, 문법 정합성과 리뷰 증거를 같이 제시해야 설득력이 생깁니다.
- 상세 문서: Apache Iceberg 사례 자세히 보기
- PR 링크: apache/iceberg#15309
- 문제:
spring-boot-mail이 있어도 필수 속성이 빠지면MailSenderbean이 생성되지 않는데, 기존 failure analysis가 잘못된 해결 방향을 안내하고 있었습니다. - 해결: 공통 missing bean 로직을 건드리지 않고,
spring-boot-mail모듈 안에 mail 전용FailureAnalyzer를 추가했습니다. - 배운 점: 좋은 PR은 큰 리팩터링보다 정확한 문제 정의, 기존 패턴 재사용, 작은 수정 범위에서 나옵니다.
- 상세 문서: Spring Boot 사례 자세히 보기
- PR 링크: spring-projects/spring-boot#49582
대표적으로 배운 패턴은 아래 네 가지였습니다.
-
구조를 모르면 맞는 수정도 틀린 PR이 된다
gs-rest-service#172,getting-started-macros#19,gs-rest-service#173- 문서 문제처럼 보여도 실제 수정 지점은 공통 매크로나 팀이 이미 정해 둔 방향일 수 있었습니다.
-
버그처럼 보여도 의도된 동작일 수 있다
spring-restdocs#1022- HTTP semantics와 라이브러리 철학을 먼저 확인해야 했습니다.
-
기능 추가는 강한 use case 없이는 받아들여지지 않는다
spring-restdocs#1023- 구현 가능성과 머지 가능성은 다르다는 점을 배웠습니다.
-
코드가 맞아도 프로세스를 어기면 종료될 수 있다
spring-security#18850,spring-security#18889,spring-boot#49594- assignee, triage 상태, maintainer 코멘트를 확인하지 않고 먼저 움직이면 작업 방향이 어긋날 수 있었습니다.
상세 분석과 이후 작업 기준은 아래 문서에 정리했습니다.
리뷰 대기 PR도 단순히 쌓아 두지 않고, maintainer 반응 가능성, 프로젝트 활동성, triage 상태를 기준으로 계속 분류하고 있습니다.
| # | 프로젝트 | 유형 | 상태 | 링크 |
|---|---|---|---|---|
| 1 | gs-rest-service | 문서 | ⚪ 종료 | #172 |
| 2 | getting-started-macros | 문서 | ⚪ 종료 | #19 |
| 3 | gs-rest-service | 문서 | ⚪ 종료 | #173 |
| 4 | gs-rest-service | 문서 | ✅ 머지 | #175 |
| 5 | spring-restdocs | 버그 수정 | ⚪ 종료 | #1022 |
| 6 | spring-restdocs | 기능 추가 | ⚪ 종료 | #1023 |
| 7 | querydsl | 버그 수정 | ⏳ 대기 | #3933 |
| 8 | querydsl | 버그 수정 | ⏳ 대기 | #3934 |
| 9 | apache/iceberg | 문서 | ✅ 머지 | #15309 |
| 10 | spring-batch | 버그 수정 | ⚪ 종료 | #5309 |
| 11 | spring-batch | 문서 | ⚪ 종료 | #5313 |
| 12 | spring-batch | 버그 수정 | ⚪ 종료 | #5315 |
| 13 | spring-batch | 버그 수정 | ⏳ 대기 | #5316 |
| 14 | spring-batch | 버그 수정 | ⚪ 종료 | #5317 |
| 15 | spring-batch | 버그 수정 | ⏳ 대기 | #5318 |
| 16 | spring-batch | 기능 추가 | ⏳ 대기 | #5339 |
| 17 | spring-security | 버그 수정 | ⚪ 종료 | #18850 |
| 18 | spring-boot | 버그 수정 | ✅ 머지 | #49582 |
| 19 | spring-security | 버그 수정 | ⚪ 종료 | #18889 |
| 20 | spring-boot | 기능 추가 | ⚪ 종료 | #49594 |
| 21 | spring-batch | 버그 수정 | ⏳ 대기 | #5351 |
마지막 업데이트: 2026-04-06