오픈소스 첫 기여: 망설임에서 실행까지 [micrometer-metrics/micrometer] > 노동상담

본문 바로가기
사이트 내 전체검색


회원로그인

노동상담

오픈소스 첫 기여: 망설임에서 실행까지 [micrometer-metrics/micrometer]

페이지 정보

작성자 HELLO 작성일25-12-08 13:51 조회2회 댓글0건

본문


글을 강남도파민 쓰기 앞서 먼저, 이 모임에 참여할 수 있도록 도와준 소프트웨어 마에스트로 팀원과, 오픈소스 기여 모임에서 피드백, 코드리뷰, 그리고 소통을 담당해 주시는 운영진분들께 감사의 말을 전하고 시작하고 싶습니다..!

오픈소스 기여모임 링크 :



OpenSource Contributors
Stories about how we contribute to open source and make world better!
medium.com


(10~11월 다음 기수 모집입니다!!)

1. 오픈소스 기여 모임 9기 참여
소마 15기에서 팀원으로 함께했던 친구와 꾸준히 연락하며 지내던 중, 어느 날 친구로부터 한 달간 운영되는 오픈소스 기여 모임 정보를 공유받았다. "이번에 참여해 보려 하는데, 너도 해볼래?"라는 간단한 제안과 함께 참여 신청 링크를 보내주었다.

처음에는 선뜻 결정하기가 어려웠다. 취업 준비로 바쁘기도 하고, 솔직히 아직 오픈소스 기여하기에는 실력이 부족한 것 같다는 생각들이 머릿속을 맴돌았다. 그런데.. 내가 이 링크를 다른 친구한테도 공유했는데, 그 친구는 바로 신청했다는 얘기를 듣고서는 생각을 바꿔먹고 '아, 그냥 이번 기회에 용기 내서 도전해 보자!'라는 생각으로 신청하게 되었다.

그렇게, 2025년 7월 28일, 친구가 보내준 링크로 들어가서 모임 참여 신청서를 작성해서 제출했다.



2. 카톡방에서 한 번더 고민...
처음 카톡방에 초대 받고 200명이 넘는 인원을 강남도파민 보고 깜짝 놀랐다. 생각보다 훨씬 큰 규모의 모임이었던 것이다. 그리고 디스코드 초대를 받기 위해 보증금 3만 원 입금을 요청받았을 때, 이게 나에게는 마지막 고비였다.
그 이유는 사실, 모임에 참여한다고 해도 내가 정말 시간을 써서 기여할 오픈소스를 찾아 PR을 올릴 수 있을까 하는 의문이 가장 컸다. 오픈소스 기여 경험도 없고, 해본 거라고는 Spring Framework의 Method Validation 관련 디버깅 정도뿐이었으니 자신감이 없는 것도 당연했다.

그래도 같이 신청한 친구가 이미 입금했다고 하고, 내가 또 다른 친구 한 명을 끌어들였는데 그 친구도 입금했다길래 그냥 친구 따라 강남 가듯이 나도 입금했다. (ㅋㅋ)

사실 이때까지는 '시간이 없어서 참여하지 못하면 3만원 날린 거라고 생각하자!'는 마음이었다. 입금 후, 디스코드 초대를 받아 본격적으로 시작하게 되었다.

3. 매우.. 아니 엄청대단한 사람들
디스코드에 들어가자마자 현실을 마주했다. 나는 이제 막 입문한 사람인데, 하루도 안 돼서 이슈 선정을 하는 분들이 있고 이미 PR까지 올리신 분들도 있었다. 이때 들었던 생각은 "역시.. 오픈소스 기여 모임은 아무나 하는 게 아니었어 ㅠㅠ..."
나는 그렇게 8월 첫째 주는 관망했다. 8월 8일에 운영진분께서 지금까지의 결과를 강남도파민 알려주셨는데 무려 20개의 PR이 Open되었고 그중 10개가 merge 되었다는 소식이었다. 이런 상황을 보며 나는 세상에는 정말 대단한 사람이 많구나라는 생각을 했다.

나는 아직 어떤 오픈소스를 선택할지도 모르겠고.. 온전히 시간 투자도 못 하겠는데... '스읍, 일단 시간이 많은 날 한번 날 잡고 가이드라도 따라서 진행해 봐야겠다!`라는 생각으로 이때까지도 참여할 생각을 하진 않았다....


4. 한번.. 시작해볼까..?
8월15일,드디어시간이나서어떻게시작해야하는지부터차근차근접근해보기로생각했다.시작부터이미마음속에는두려움이가득했지만…

디스코드에서 아래와 같이 가이드라인을 제시해주고 있었는데 바로 정독..!



다 읽고 나면 자신감이 뿜뿜 차오른다. 나도 이렇게만 하면 가능한 건가? 진짜? 나도 이제 Spring Contributor 되는 거지?라는 생각과 함께 여러 오픈소스를 찾아보았는데.. 이런 생각보다 쉽지 않은걸?

사용해 오던 Spring, JPA 같은 오픈소스에서는 일단 찾기 쉽지 않았고 가장 최근에 사용했던 Rest Docs 혹은 JUnit에서도 '어떤 걸 해야 하지?'라는 생각만 들었고 도저히 감이 잡히지 않았다.
그래도 포기하지 않고 사용해 봤던 오픈소스들 중에서 고르고 골라 micrometer라는 모니터링에 쓰이는 오픈소스를 선택하게 되었다. 해당 오픈소스를 고르게 된 이유는 이슈 선정을 도와주는 생성형 AI 프롬프트에서 유일하게 "지금 바로 시작해도 좋아!"라는 멘트를 받았기 때문이었다.
그렇게 저는 mircrometer 이슈를 분석한 결과를 바탕으로 강남도파민 도움을 주시는 운영진분들께 이슈 선정을 어떻게 진행하면 좋을지 질문을 시작했습니다.




이렇게 올리고 나니 정말 내가 봐도 "떠먹여 주세요"라고 말하는 거 같았지만…. 정말 이슈 분석만 보고서는 어떤 이슈를 선택해서 해결해야 할지 저 때는 감도 오지 않았다. 이 모임을 참여하게 된 이유도 이런 걸 배우려고 참여한 거니까 그냥 냅다 이슈 골라주세요…!라고 요청했다 ㅋㅋ

5. 이슈 선정 및 fork
다행스럽게도 운영진분께서 이슈 선정을 도와주셨다…! 3개 정도 골라서 물어봤는데 그중 다행히 내가 해볼 만한 게 1개 있어서 바로 작업 시작~!
해당 이슈에 대해 지금 와서 다시 생각해 보면 버그가 자세하게 적혀있었고 어떤 상황에서 문제가 발생하는지도 나와 있어 접근하기 좋았던 것 같다. 나중에 이슈 선정을 할 때 이런 문제 상황에 대한 가이드라인 혹은 해결 방법에 대한 가이드라인이 자세한 경우 바로 시작하면 좋을 거 같다고 생각하게 되었습니다.

먼저 제가 고른 이슈는 다음과 같습니다.




[JOOQ] MetricsDSLContext - fetchExists doesn't report provided tags &middotIssue #6583 &middotmicrometer-metrics/micrometer
Describe the bug When using dsl.tag("tag", "value").fetchExists(SOME_TABLE, SOME_CONDITION);, the expected metric is not reported. The issue arises because 강남도파민 the tag value is not being passed correct...
github.com



먼저, 해당 이슈에 대해 내가 작업하겠다는 댓글을 남기는 게 오픈소스 문화라고 하더라고요, 그래서 다음과 같이 "내가 할게!"라고 공손하게 올리고 시작했다.



하지만, 이렇게 남겨도 뺏길 수도 있다고 하니까 댓글을 달았다면 빠르게 작업을 진행해서 pr을 open 하는 게 맞는 것 같다. 오픈소스 프로젝트를 돌아다니면서 실제로 pr을 뺏긴 경우를 직접 목격했는데 정말 뺏는 사람이 그냥 예의가 없는 사람인 거 같다. 아래는 다른 오픈소스 기여할 이슈를 찾아보다가 보게 됐는데 한번 들어가서 코멘트를 읽어보면 이런 일도 일어나는구나…. 하고 생각에 잠길 수 있다.




Row-level-deletes in spec is not rendered as bulleted list &middotIssue #13813 &middotapache/iceberg
Feature Request / Improvement Query engine None Willingness to contribute I can contribute this improvement/feature independently I would be willi...
github.com



자자 다시 돌아와서 이슈를 골랐으니까 이제 fork 해야겠지? fork 하고 AI를 이용해서 이제 본격적으로 이슈 분석하고 해결방법을 찾아볼까..?

6. 디버깅과의 싸움
AI를 믿었던 나는 그렇게 무한 디버깅 지옥에 갇히게 되었다. 내가 금요일에 본격적으로 시작한 이유는 생성형 AI에 대한 무한한 강남도파민 신뢰가 바탕이었는데.. 하지만, AI는 이슈선정과 이슈 분석까지만 도움이 됐고 그 이후부터는 작성해 준 코드가 절대 문제를 해결할 수 없다고 생각될 정도로 형편없었다. (무려 Claude Code로 10달러 충전해서 물어보고 있는데! 아이고 내 돈 아까워라)

그래서 이슈 분석 내용을 바탕으로 문제가 되는 메서드가 어떻게 동작하고 어떤 기능을 하는지 이해한 뒤, 직접 잘 동작하는 상황을 디버깅해 보고 문제가 되는 상황을 디버깅해 가며 문제의 원인을 찾아가기 시작했다.

디버깅을 하는데, 처음에 AI의 분석을 보고 판단했을 때는 select 쿼리문을 만들 때 time() 메서드로 태그를 지워버려서 발생하는 문제라고 생각했는데, 직접 디버깅을 해봤을 때는 이것도 문제긴 하지만, 정확하게 DefaultDSLContext.class의 fetchValue() 메서드에도 문제가 있어 보였다.
이 문제에 대해서는 당시 그 시점에서는 아직 오픈소스에 대한 분석이 부족해 Micrometer가 jooq 3.14.16 버전으로 컴파일된다는 사실을 모르고 있었고, 그에 따라 이슈번호 #6583에 대한 버그 수정을 선제적으로 진행하고 이후에 이슈를 오픈해 보자라는 운영진님의 조언에 따라 현재 목표인 fetchExists() 호출시 태그 유실을 막는데 집중하였다.

문제의 원인은 `MetricsDSLContext`에서 따로 `fetchExists()`를 구현하지 않고 있어 jooq의 `DefaultDSLContext`의 `fetchExists(table, condition)`가 호출되고 있었고 강남도파민 해당 코드에서 select 쿼리를 생성하는 시점에 `time()` 메서드가 호출되어서 실제 필요한 시점에 tag가 사라지고 없게 되는 것이었습니다.

따라서, 저는 fetchExists()를 오버라이딩 해서 select 쿼리를 생성할 때 time() 호출되는 것을 막고 select 호출 시점에만 time()메서드가 호출되도록 수정하여 버그를 해결할 수 있었습니다.

실제 기존 코드에서는 동작하지 않던 테스트 코드도 오버라이딩 코드를 추가한 뒤 통과하여서 이를 바탕으로 PR을 Open 하였습니다.



7. PR Open 3일 뒤...
PR을 오픈한 후에는 매일같이 내가 만든 pr을 확인하며 거부당하면 어떡하지…조마조마했던 것 같다. 실제로 꿈도 한 번 꿨는데 정확히는 기억 안 나는데 부정적인 코드리뷰를 받고 PR이 Closed 되는 꿈이었다. (흑흑,,)

그런데.. 수요일 점심을 먹고 휴대폰으로 이메일을 보는데 …!!! 메인테이너의 댓글이 달렸다!
바로 확인해 보았는데 헉…이것은 PR merge!!!


이때 도파민은 진짜 말도 안 됐다. 한때, 스케이트보드로 킥플립에 성공했을 때 도파민이 정말 엄청 컸는데…그 정도 도파민을 다시 한번 경험해 볼 수 있어서 진짜 좋았다. 지금, 이 글을 쓰고 있는데 그때를 생각하면 미소가 절로 나온다. 최종적으로다음과같이prmerge가됐고저는micrometercontributor라고당당하게말할수있게되었습니다…!ㅋㅋ
merge 된 PR 링크는 다음과 같다.




ensure tags are preserved for fetchExists(Table, Condition) by 강남도파민 HeeChanN &middotPull Request #6643 &middotmicrometer-metrics/micrometer
Override MetricsDSLContext#fetchExists(Table, Condition) to delegate to super.fetchExists(DSL.selectOne().from(table).where(condition)), forcing the standard SELECT path so that JooqExecuteListener...
github.com



8. 오픈 소스 기여 모임 후기
제 이야기를 보며 “생각보다 할 만한데?”하고 느끼셨나요? 저도 처음엔 똑같았습니다. 이게 될까? 괜히 시간만 쓰는 건 아닐까? 이런 생각이 머릿속을 꽉 채우곤 했어요.
하지만 제가 확실히 배운 게 하나 있습니다. 시작한 사람과 시작하지 않은 사람의 차이는 ‘가능성’의 유무라는 것을요. 시작조차 하지 않으면 오픈소스에 기여할 확률은 제로입니다. 반대로 PR이 머지되지 않더라도, 그 과정에서 이슈를 읽고, 토론 흐름을 따라가고, 내가 쓰는 라이브러리와 프레임워크가 어떤 원리와 절차로 발전하는지를 배우게 됩니다. 이 여정에서 얻는 건 라이브러리 문서를 보며 사용해 보는 것보다 훨씬 더 많았습니다.
“PR 머지해 보니까 저런 소리 하는 거 아니냐고요?" 그럴 수도, 아닐 수도 있습니다. 다만 저는 실행하는 사람에게 행운이 붙는다고 믿습니다. 망설이지 말고 다음 기수에는 꼭 지원해 보셨으면 합니다. 다음 기수에 도전하셔서 저처럼 첫 기여에 성공해 보고 제가 느꼈던 도파민을 느껴보셨으면 좋겠습니다!!

끝으로 오픈소스 모임 운영진님의 피드백, 그리고 제 후기 강남도파민 사진을 공유하며 마무리하겠습니다.






댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 NO COPYRIGHT! JUST COPYLEFT!
상단으로

(우03735) 서울시 서대문구 통일로 197 충정로우체국 4층 전국민주우체국본부
대표전화: 02-2135-2411 FAX: 02-6008-1917
전국민주우체국본부

모바일 버전으로 보기