처음으로 오픈소스에 기여하기까지의 과정

이재훈·2024년 11월 27일

metadata-extractor의 오픈소스에 대해 기여하기까지의 과정

개발 공부를 하면서 오픈소스에 대해서 호기심이 생겼다. 오픈소스에 기여하는 게 어떻게 하는 건지 궁금했고, 이리저리 찾아봤다. 컨트리뷰트 유형들이 존재했었는데, 요약하면 프로젝트가 발전할 수 있게 하는 모든 활동을 컨트리뷰션이라고 하는 것 같다.

솔직히 개발 공부하면서 문서 수정을 가볍게 보는 것은 아니지만, 코딩을 통해 기여하는 것이 더 와닿았다. 내가 기여하고 또 기여할 수 있는 프로젝트는 다음 조건으로 결정했다.

  1. 나의 스택과 관련 있는가(Java, Python, 백엔드 등)
  2. 프로젝트에 대한 지식이 부족해도 충분히 기여할 수 있는가

깃헙에서 good-first-issue라는 태그로 검색하면 기여할 만한 프로젝트들을 찾을 수 있었다. 그런데 대부분 자기들끼리만 통하는 얘기를 하는 것 같다. 프로젝트 도메인 지식이 부족하다면 기여하기 어려운 것들이 대부분이었다.

그러던 중 두 가지 이슈를 찾을 수 있었다.

첫 번째 이슈

JUnit4에서 JUnit5로 미그레이션하는 이슈이다.

이슈의 특징

  1. 메인테이너(프로젝트 주도자)가 제기한 이슈
  2. 나의 스택에 도움이 됨
  3. 심지어 테스트 커버리지가 넓음
  4. Assigner가 테스트 몇 개 깔짝거리고 더 작업한 게 없음
  5. 신뢰감 느껴지는 인도 출신 구글 개발자의 프로젝트임
  6. Star 수가 많다.

하지만 패스한 이유

  1. 코멘트 남기니 작업 중이라고 다른 이슈로 넘김
  2. 의료 데이터 웨어하우스 관련 주제인데 위키에서도 환경설정 가이드라인이 부족했음
  3. 리눅스 + Maven 환경이라 IntelliJ에서 동작시키기 어려웠음

두 번째 이슈

이미지 파일의 메타데이터를 추출하는 과정에서 에러 핸들링 이슈이다.

이슈의 특징

  1. 메인테이너가 이슈를 확인함
  2. 프로젝트가 친절하게 알려줌
  3. 생각보다 개선점이 많아 보임(내가 기여할 수 있는 파이가 있음)
  4. MS 개발자임
  5. Star 수가 훨씬 많다.

작업하기로 결정한 이유

이런 이유들로 작업하기로 결정했고, 코멘트를 남기기 위해 이슈를 조사했다.

작업 과정

  1. 문제 상황 재현

    • 프로젝트를 fork해서 문제 상황을 재현해서 같은 에러가 발생하는 것을 확인했다.
  2. 왜 문제인가

    • 실제로 HxD를 통해 바이너리 까서 확인함
    • 이미지 파일의 일부 정보가 깨져서 발생했음.
    • 예를 들면, 설명 태그를 파싱하는 부분이 0xFF로 도배되었음.
    • 그런데 해당 에러를 핸들링하지 않아서 원래 의도(넘기기)를 벗어남
    • 찾아보니 해당 부분에서 적절한 throw가 이루어지지 않았음
case ICC_TAG_TYPE_DESC:
    int stringLength = reader.getInt32(8);
    return new String(bytes, 12, stringLength - 1);
  • String 객체에서 parsing 하는 과정에서 발생한 에러는 별도로 의도되지 않았고, 별도의 처리가 없었던 거임
  1. 그럼 어쩌지?
    • 일단 물어보자.

요약하면 별도로 throw하지 않아서 발생한 것이다. 그래서 문제 상황을 공유했고, 답변은 BufferBoundsException를 발생시키라는 것이었다.

작업 후 피드백 반영 및 PR

  • 이렇게 하면 되냐고 예시를 작성해서 물어봤고, 답변으로는 BufferBoundsException를 활용하고, 길이가 0인 경우도 정상으로 처리하라는 피드백을 받았다.
  • 확인해보니까 대체할 수 있는 메서드가 있어서 다시 수정했다.
  • 마지막 답변으로는 작성한 거 PR해보라는 답변을 받았고, 바로 작성했다.

결과

다행히 merge되었다.

소감

이 프로젝트가 초보자가 하기에 정말 좋은 것 같은데, 영향력이 있어서 가성비 넘치는 기여라고 생각된다. 또한 도메인 지식도 개발자라면 충분히 해결할 수 있는 범위이고, 문제 해결을 위한 레퍼런스를 찾는 과정과 소통하는 과정을 경험할 수 있어서 매우 좋았다.

처음 하기 좋은 이슈라는 태그에 충분히 걸맞았다. 이번 이슈에서 끝나지 않고 새로 생긴 이슈에도 메인테이너 대신 피드백을 줄 수 있었다.

이걸 하고 나니 문제를 해결하기 위한 접근법이 발전되는 게 느껴졌다. 좋은 동기부여가 되었고, 지속적으로 이 프로젝트에 기여할 것이다.

0개의 댓글