Spring/Java 오픈소스 프로젝트에 직접 기여하며 문제 정의, 구현, 검증, 리뷰 대응, 회고를 기록한 저장소입니다.
목표는 단순히 PR 개수를 늘리는 것이 아니라, 어떤 문제를 어떤 범위로 고쳐야 실제로 머지될 수 있는지 판단할 수 있는 백엔드 개발자임을 증명하는 것입니다.
| 구분 | 내용 |
|---|---|
| 현재 지표 | 총 22개 PR, 3개 머지, 7개 리뷰 대기, 12개 종료·정리 |
| 대표 backend 사례 | Spring Boot MailSender failure analysis 개선 PR 머지 |
| 주요 역량 | Spring auto-configuration 분석, targeted test, API 호환성 리팩터링, maintainer workflow 대응 |
| 바로 볼 문서 | 공개 포트폴리오, 면접 답변, Spring Boot 사례 |
- Spring 생태계와 Java 오픈소스 프로젝트에서 실제 이슈를 읽고, 수정 범위를 좁혀 PR까지 만든 경험
- 문서 수정, 버그 수정, 설정/진단 개선까지 서로 다른 유형의 변경을 다룬 경험
- 머지된 PR뿐 아니라 종료된 PR까지 분석하며 작업 기준을 개선한 과정
- AI를 탐색과 검증 가속에 활용하되, 최종 판단과 품질 책임은 직접 진 방식
-
Spring Boot
#49582머지MailSenderbean 부재를 단순 missing bean 문제가 아니라 auto-configuration 조건 불일치로 분석했습니다.- 공통 로직을 바꾸지 않고
spring-boot-mail모듈 안에서 전용FailureAnalyzer와 targeted test로 해결했습니다.
-
Spring Data Redis
#3361리뷰 대기- 중복 converter 구현을 deprecated API 유지 + 내부 위임 구조로 정리했습니다.
- public API를 바로 삭제하지 않고 호환성을 고려한 리팩터링으로 접근했습니다.
-
종료된 PR 12개 회고
- assignee, triage 상태, maintainer 코멘트, 기존 PR 확인을 readiness gate로 만들었습니다.
- 실패 기록을 숨기지 않고 다음 PR의 작업 기준으로 바꿨습니다.
- 빠른 요약
- 이 저장소가 보여주는 것
- 면접관에게 먼저 보여줄 증거
- 기여 현황
- ✅ 머지된 대표 사례 3건
- ❌ 거절·종료된 PR에서 배운 점
- 🤖 AI 활용 방식
- ⏳ 현재 진행 중인 PR
- 공개 문서 안내
- 📋 전체 기여 로그
기준일: 2026-05-18
| 항목 | 내용 |
|---|---|
| 총 PR | 22개 |
| ✅ 머지 | 3개 |
| ⏳ 리뷰 대기 | 7개 |
| ⚪ 종료·자진 정리 | 12개 |
| 주요 프로젝트 | Spring Guides, Spring REST Docs, Spring Batch, Spring Boot, Spring Security, Spring Data Redis, 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 코멘트를 확인하지 않고 먼저 움직이면 작업 방향이 어긋날 수 있었습니다.
상세 분석과 이후 작업 기준은 아래 문서에 정리했습니다.
- 이슈 후보 탐색, 관련 코드 위치 파악, 테스트 명령 정리에 AI를 보조 도구로 사용합니다.
- 실제 구현 방향은 maintainer 코멘트, 기존 코드 패턴, 로컬 테스트 결과를 기준으로 판단합니다.
- PR 본문과 포트폴리오 기록에는 어떤 문제를 왜 고쳤는지, 어떤 검증을 했는지 직접 추적 가능하게 남깁니다.
- querydsl#3933
- querydsl#3934
- spring-batch#5316
- spring-batch#5318
- spring-batch#5339
- spring-batch#5351
- spring-data-redis#3361
리뷰 대기 PR도 단순히 쌓아 두지 않고, maintainer 반응 가능성, 프로젝트 활동성, triage 상태를 기준으로 계속 분류하고 있습니다.
- 대표 머지 사례 3건
- 백엔드 오픈소스 포트폴리오 요약
- 면접용 대표 답변 정리
- 거절·종료된 PR에서 배운 점과 readiness checklist
- 오픈소스 기여 가이드
- Spring 프로젝트 추천 정리
- 로컬 환경 정리
| # | 프로젝트 | 유형 | 상태 | 링크 |
|---|---|---|---|---|
| 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 |
| 22 | spring-data-redis | 리팩터링 | ⏳ 대기 | #3361 |
마지막 업데이트: 2026-05-18