기여 내용 :
#TODO
주석을 자동으로 수집하여 사용자에게 알려주는 기능 추가
최종 기여 PR : https://github.com/qodo-ai/pr-agent/pull/1869
6주간 진행된 오픈소스 컨트리뷰션 프로젝트를 수료했다.
우리 조는 당초 프로젝트 목표대로 6주 안에 PR을 보내지는 못했지만
수료 이후에도 계속해서 개발과 보완, 피드백 반영을 거쳐 최종적으로 PR 및 Merge 완료했다!
지원서 작성 & 합격 후기 : [OSSCA] 2025 체험형-1차 : 합격 후기
사전 학습 조건
오픈소스 생태계 이해 및 기여 경험
1주 1회 조별 모임, 1회 정기 모임을 진행했다.
우리 조는 매주 수요일에 조별 모임을 갖고 중간점검과 회의, 보강 및 개인별로 조사 및 작업한 내역을 취합하여
돌아오는 일요일 정기 모임에서 취합한 내용을 발표하고 멘토님께 피드백을 받았다.
PR‑Agent?
Pull Request(PR)를 효과적으로 리뷰하고 보다 쉽게 관리하는 데 도움을 주는 AI 기반 코드 리뷰 어시스턴트
주요 특징 :
아키텍쳐 :
사용 예시(review
) :
python3 -m pr_agent.cli --pr_url <리뷰할 PR URL> review
테스트 URL : https://github.com/Judy-Choi/pr-agent-study/pull/3
우리 조의 경우 tool 중 improve
툴을 조사, 분석, 사용방법을 조사하여 정리했다.
improve
툴은 아래 캡쳐와 같이 PR에서 변경된 코드를 스캔한 후, AI(LLM) 을 이용해 코드를 개선할 수 있는 제안 (Code Suggestion) 을 생성해 준다.
나의 경우 improve
의 옵션 중 AI가 생성한 코드 개선 제안을 PR에 자동으로 코멘트로 남기는 기능인 Code validation
에 대해 조사하였으며
조사 과정에서 공식문서를 참고하며 디버깅을 통해 코드의 흐름을 파악했다.
테스트 PR : https://github.com/Judy-Choi/pr-agent-study/pull/2
우선 조별 모임까지 1인당 3개의 아이디어를 냈고, 이 중 Top3 아이디어를 선정했다.
선정되지 않은 아이디어도 각자 이슈로 등록하여 Maintainer 에게 피드백을 받았고,
결과적으로 조별 과제 이외에 Maintainer 의 피드백을 받아들여 PR 및 Merge 성공한 멘티들이 많았다!
(너무 부러웠다 🥲)
우리 팀의 기여 계획서는 다음과 같고,
https://github.com/ossca-2025/pr-agent-mentoring/blob/main/weekly/week-5/group-5/assignment.md
요약하자면 다음과 같다.
📌 과제 개요
문제 인식
PR 과정에서 코드 내 TODO/FIXME 주석이 PR 설명에 누락되어 리뷰 시 인지 못하고 머지되는 문제가 발생.
목표
PR-Agent 기능 확장 → PR에 포함된 코드의 TODO/FIXME 주석을 자동 감지하여 PR Description에 요약 표시.
📌 구현 기능
1. PR diff 내 TODO/FIXME 주석 자동 탐색.
2. 파일 경로, 라인 번호, 주석 내용을 추출하여 PR Description 하단에 표준 포맷으로 추가.
예시:
## 📌 TODO Summary (Auto-generated)
- [ ] main.py:42 — 리팩토링 필요
📌 기대 효과
PR Agent 의 Maintainer 는 다음과 같이 기능을 구현해 주길 요청했다.
https://github.com/qodo-ai/pr-agent/issues/1763
review
tool 섹션에 #TODO
주석을 수집하여 보여 주기초기 PR : https://github.com/PullPullers/pr-agent-qodo/pull/1
우리는 먼저 review
툴의 다른 옵션이 어떻게 동작하는지 디버깅을 포함한 코드리뷰를 거쳤고,
다음과 같은 과정을 통해 #TODO
주석이 수집되고 review
섹션이 생성되도록 했다.
설정 파일에서 require_todo_scan
flag 값 로드 (default = false)
프롬프트를 이용해 다음 작업 수행
2.1. require_todo_scan
== true 이면
2.2. PR Diff (변경된 코드) 에서 TODO 주석 정보 추출 (Pydantic 스타일 적용)
class TodoSection(BaseModel):
- relevant_file : TODO 주석이 포함된 파일명
- line_range : TODO 주석이 포함된 코드 줄 번호
- content : TODO 주석 내용
2.3. 추출한 TodoSection 을 리스트로 만들고, 모든 TODO 주석들의 내용을 요약
review
에 TODO 정보 섹션 추가
#TODO
주석의 위치로 바로 이동하도록)구현한 내용에 대해 멘토님의 피드백을 받고 반영했다.
테스트 URL : https://github.com/Judy-Choi/pr-agent-study/pull/10
피드백 반영 및 테스트 후, 최종 PR을 보내기 위해 영문으로 코멘트를 작성하고 취합했다.
이후 제출한 최종 PR 에 대해 Maintainer 가 아주 상세하게 피드백을 해 주었고, 모두 PR 코드에 반영했다.
긴 협업과 피드백을 거쳐 최종 Merge 완료되었다!!
https://github.com/qodo-ai/pr-agent/pull/1869
(이 메시지 한 줄을 보기 위해 9주를 달려왔다... 완전 뿌듯 🥹)
TODO scan 기능 추가 전
https://github.com/Judy-Choi/pr-agent-study/pull/3
공식문서에 옵션 박제📌
PR 코드에 TODO 주석이 있는 경우
https://github.com/Judy-Choi/pr-agent-study/pull/8
✅ TODO sections 생성
✅ TODO 주석 요약 정보(최대 6단어)를 제공하여 사용자가 빠른 확인 가능
TODO sections 를 펼치면?
✅ 싱글라인 TODO 주석은 텍스트 그대로 보여주지만
✅ 멀티라인 TODO 주석은 텍스트를 <block>
처리하여 깔끔하게 보인다.
이외에 사용자 편의성을 고려하여
✅ 파일 링크를 클릭하면 즉시 TODO 주석의 위치로 이동한다.
TODO 주석이 없는 경우
https://github.com/Judy-Choi/pr-agent-study/pull/7
✅ No TODO sections 표시
TODO sections 가 아예 생성되지 않는 경우, TODO scan 기능이 비활성화되어 있는 경우와 구분할 수 없는 단점을 고려했다.
첫 오픈소스 기여 도전, 대성공!
처음으로 오픈소스에 기여해 보았는데 결과가 매우 만족스럽다.
아이디어 단계부터 Maintainer 가 매우 마음에 들어하며 적극적으로 PR을 열길 원했고,
아이디어를 구현하는 동안 새로운 아이디어와 피드백이 더해져 완성도 높은 기능을 만들 수 있었다.
개인적으로 나는 새로운 시도와 발상을 선호하는 편이라 (tmi : MBTI = ENFP 🤩)
TODO 주석을 수집해서 사용자에게 보여준다는, 우리 조의 간단하지만 개발자들에게 매우 유용한 기능을 추가하는 기여가 정말 마음에 들었고, 기능이 완성된 후 공식문서에 등재된 것을 보니 매우 뿌듯했다.
오픈소스 사용자에서 기여자로
오픈소스를 가져다 쓰기만 했는데, 처음으로 기여하겠다는 목적으로 오픈소스를 리뷰하니 의외로(?) 기여할 수 있는 점이 많았다.
우리 조는 기능을 추가했지만, 다른 조는 문서화, 리팩토링, 테스트 코드 추가 등등을 통해 기여하는 모습을 보고 무궁무진한 기여 방향을 간접적으로 체험할 수 있었다.
앞으로는 오픈소스를 사용할 때 좀 더 능동적인 사용자가 될 것 같다.
아쉬운 기능에 대해 개선 방안을 제안한다던가, 더 나은 코드를 제안한다던가.
코드의 통일성, 사용자의 편의성, 가독성 모두 고려한 개발 경험
신규 기능 추가 및 유지보수 업무를 할 때, 기존 코드와의 통일성을 고려해 개발한 경험은 있지만
지금까지 실제 사용자의 편의성과 가독성까지 고려해 개발한 경험은 드물었다.
(특히 나는 AI와 백엔드 개발을 주로 하다 보니 이 점까지 고려할 일이 없었다.)
이번에는 우리가 만든 기능이 바로 사용자에게 제공되므로, 사용자 입장에서 생각해 보고 편의성, 가독성까지 모두 고려하여 개발했다.
나의 아이디어 중 하나를 예로 들면, 멀티라인 TODO 주석을 보여 줄 때 단순히 주석을 보여주는 것을 넘어 어떻게 보여주면 가독성이 좋을지 한번 더 고민하고, 팀원들의 의견을 모아 반영했다.
이외에도 멘토님과 Maintainer 의 피드백대로 TODO 섹션을 접어서 깔끔한 UI를 구현했고,
제공하는 정보의 양이 줄어드는 대신 한번에 많은 양의 TODO 주석 정보를 파악할 수 있게 주석 내용을 요약해 제공했다.
Maintainer 또한 그래픽과 프롬프트 등을 꼼꼼하게 검토 후 피드백을 건넸고,
그 결과 초안과 비교하여 코드의 완성도도 높아졌고, UI 측면에서는 깔끔해 보이는데다 정보가 한 눈에 들어와서 사용하기에 편리하다! 🤩
팀 프로젝트를 통해 협업하는 자세와 소통 스킬 향상
집단 지성이 모여 더 완성도 높은 코드와 편리하게 사용할 수 있는 개발물이 탄생했다!
아이디어를 모아 반영하는 과정 속에서 협업과 소통 스킬을 다듬을 수 있었고
특히 프로젝트 후반에 멘토님과 Maintainer 에게 많은 양의 피드백을 받았을 때, 작업 내용을 빠르게 리스트업하고, 작업 현황을 실시간으로 공유하여 팀원들 간 작업이 겹치지 않도록 했다.
덕분에 우리 팀은 끝까지 효율적인 협업과 원활한 소통이 가능했다.
Git 커밋 메시지 컨벤션 복습
커밋을 자주 날리는 동안 직관적이고 압축적인 커밋 메시지를 작성할 수 있게 되었고, 이 과정에서 커밋 메시지 컨벤션을 복습했다.
나는 add, remove, update 등등을 사용해 왔는데, 이번 기회에 알고 보니 이것들은 커밋 태그로 적합하지 않았다.
(fix, feat 등이 적절한 태그였다. 😂)
그리고 이번에 처음으로 프롬프트 수정, UI개선 커밋도 작성 같은 커밋도 작성하면서 refactor, style 과 같은 태그도 처음 써 보았다.
문제를 정의하고 해결하는 프로세스 습득
멘토님의 가이드를 따라 처음부터 step by step 으로 오픈소스에 기여하기 위한 과정을 거쳤다.
나는 AI로 커리어를 전환한 이래, 부트캠프 제외하고 이렇게 한 단계씩 멘토님이 이끌어 주는 경험이 처음이었다. 🥲
앞으로는 문제 정의부터 해결 및 개발까지 혼자서도 차근차근 해낼 수 있을 것 같다.
끝까지 해냈다. 완성도 있게!
공식 프로젝트 기간인 6주가 지난 후에도 우리는 끝까지 하던 작업을 지속했고,
결과적으로 우리가 제안한 기능을 완성도 높게 개발하여 성공적으로 오픈소스에 기여할 수 있었다.
특히 나는 어떤 일을 빠르게 시작하는 추진력이 좋지만, 지속적으로 끌고 나가고 마무리하는 힘이 부족하다고 생각해 왔는데
이번에는 반대로 초반에 적극적으로 나서지 못한 만큼 프로젝트 중-후반에 팀에 기여하려고 노력했다.
주어진 피드백들을 반영하고, 최종 PR 내용을 취합하고 내용을 덧붙이고, 일정을 계산해 제안하는 등등.
나는 이번 기회에 나의 한계를 극복했다. 이제 나는 추진력도 강하고 마무리도 잘 하는 사람이다!!!! 😎
물론 다른 팀원분들도 대단했다 🌟
조장님은 매주 조원들을 리딩하는 동시에 밋업 때마다 바쁘게 회의록을 작성하여 문서화로 활동을 뒷받침했고
MVP 팀원분은 어려운 코드도 척척 구현해내며 대부분의 주요 기능들을 개발하셨다!
늦은 합류로 인한 도미노 효과
OT및 1주차에는 여행중이라 충분히 안내를 숙지하지 못한 상태에서 뒤늦게 합류했고,
2주차까지 재취업 면접 준비와 극심한 번아웃 때문에 스터디 진도를 따라가지 못했다.
3주차부터 따라잡기 시작했지만 초반에 PR Agent 자료조사를 놓쳤더니 이후에 좋은 기여 아이디어가 생각나지 않았다.
또한 초반에 공식 문서를 읽고 컨트리뷰션 가이드를 숙지해야 했는데, 진도 따라가기에 벅차서 일단 넘어갔더니(...)
이후에 내가 제안한 기능이 사실은 유료버전에 이미 있는 기능이라 퇴짜를 맞기도 했다 😇
시야는 좁은데 의욕이 앞섰다
의욕이 앞서서 개선점은 많이 제시했는데, 그 중 정말 기여할 가치가 있는 개선점은 드물었고 개선 시 기대 효과도 크지 않았다.
또, 내가 아이디어를 낸 개선점들은 나중에 다른 팀원들의 아이디어들과 비교해 보니 너무 지엽적이었던 것 같다.
나는 전 직업이 악성코드 분석가이다 보니 숲보다는 나무를 보는 경향이 있다.
일단 코드를 돌려보고, 파고들어서 버그나 에러를 포착하곤 하지만
돌이켜 생각해 보니 이게 실제로 서비스를 만들거나 품질을 개선하는 데에 중요하지는 않았던 것 같다.
한 가지 경우의 에러 메시지를 가독성 좋게 수정하는 것과, 우리 조의 기여와 같이 사용자에게 유용한 기능을 새로 추가하는 것, 둘 중 어느 쪽이 더 기여할 가치가 있겠는가.
청춘을 돌려다오 😂
이번 오픈소스 컨트리뷰션 프로그램은 '체험형' 인 만큼 대학생 참가자들이 많았다.
아직 학생일 때에 멘토링을 받으며 차근차근 성장해 나가는 모습이 부러웠고
실제로 일부 기능은 유료로 제공중인, 완성형 서비스를 분석하고 코드리뷰하며 실무를 미리 경험하는 모습도 부러웠다.
내가 대학생이었을 때 이런 프로그램이 있었다면 정말 좋았을텐데!
아니면 몇 년 전에라도 이런 프로그램에 참여했다면 내 커리어가 조금은 더 나아졌을텐데. 🥲