티스토리 뷰

일상

오픈소스 멘토링 후기

애쿠 2024. 5. 13. 10:21

한 분은 spring-security와 spring-batch 두 개의 PR 을 만드셨다.

 

금토일 3일간 인제님이 운영하시는 오픈소스 멘토링에 참여했다.

 

이전부터 오픈소스 멘토링이 있었다는 건 알고 있었는데, 매번 일정이 맞지 않았었다.

 

5월은 주차별 모집을 하셔서 맞는 시간을 골라서 참여할 수 있었다.

 

신청한 이유는 옛날부터 오픈 소스에 관심도 있었고, 죽어있는 GitHub를 살렸으면 좋겠다는 생각도 있었다.

 

GitHub 관리가 참 어려웠는데 개인 프로젝트는 딱히 떠오르는게 없기도 하고, 코딩 테스트로 채우는것도 재미가 없어서

 

오픈 소스에 꾸준히 기여하면서 유지/관리하는게 제일 좋을 것 같았다.

 

내 Github : https://github.com/imsosleepy

 

지원하기

주기적으로 인제님이 모집을 하신다(이번이 4기인데 주차별로 모집을 하셨음)

 

인제님 링크드인 : https://www.linkedin.com/in/injae-kim-dev/

인제님 미디엄 : https://medium.com/@injae-kim

오픈소스 멘토링 오픈카톡방: https://open.kakao.com/o/ghrD0mUf

 

나는 링크드 인을 통해서 확인했었고, 확인하자마자 신청을 했다.

 

각종 스터디나 모임을 신청하면 다 떨어졌어서 이번에도 솔직히 안될 줄 알았는데

 

이번에는 운이 좋게도 선정이 됐다.

 

선정이 되면 카톡방에 초대를 주시고, 참여자들이 직접 오픈 소스와 이슈 선정을 한다.

 

오픈소스 & 이슈 선정

나는 지원서에 관심 있는 오픈소스로 OpenFeign과 Spring Data JPA를 썼었다.

 

지원서를 쓸 당시 급하게 생각하다보니 내가 가장 많이 쓰는 오픈 소스들을 골랐었다.  

 

무엇보다 OpenFeign은 사용하면서 불편함을 느꼈던적이 있던 오픈 소스기도 했다.

2024.03.22 - [개발/SPRING] - OpenFeign 간단 사용법과 FeignException 핸들링하기

 

그런데 가장 관심이 있었던 OpenFeign은 메인터넌스 모드로 들어간다고 해서 리뷰가 빠르지 않을 것 같았고,

 

Spring Data JPA는 참여자가 너무 많아서 경쟁이 심한 것 같았다.

OpenFeign 메인테이너가 이슈에서 남긴 메시지

 

그래서 현재 공부 중인 AWS 쪽을 했으면 좋겠다는 생각을 했고, 최근에 써봤던 Spring Cloud AWS를 선택했다.

 

Spring Cloud AWS 이슈 중 비교적 최근에 올라온 두 가지 이슈를 선정했다. 

 

https://github.com/awspring/spring-cloud-aws/issues/1144 

https://github.com/awspring/spring-cloud-aws/issues/1145

 

이슈 분석 & PR 만들기

문제는 메인테이너가 직접 올린 이슈여서 그런지, 이슈에 예시가 없고 문구로만 남겨져 있어서 처음부터 분석을 해야했다.

(인제님이 공유해주신 이슈 선정 가이드를 참고하긴 했다)

 

1. Enable sending String payloads with JSON content type in SqsTemplate

 

이 이슈를 분석해보면, 다음과 같다.

 

SQS에서 String 형태의 JSON을 보낼 때 Content-Type을 명시하지 않으면, text/plain으로 설정되어
StringMessageConverter이 사용된다. 

.header(MessageHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)을 설정해주면  MappingJackson2MessageConverter까지 매핑되면서 이중 직렬화가 되어 payload를 읽을 수 없는 상태가 되는 현상이 발생한다는 것이었다.

 

그런데 샘플코드를 돌려보니 이 현상이 재현되지 않아서 댓글을 남기고 넘어갔다.

 

2. Add MessagingMessageConverter to SQS Auto-configuration

 

이 이슈는 커스텀한 MessagingMessageConverter를 사용하기 위해서는 SqsMessageListenerContainerFactory을 선언하고 수동으로 작성해야하는데, 이럴경우 factory에서 자동 설정(auto configuration)되는 옵션들을 더이상 사용하지 못하게 된다는 이슈였다.

 

MessagingMessageConverter는 SQS에서 보내준 데이터를 pojo로 바꿔주는 역할을 하는데, 커스터마이즈해서 사용하는 수요가 있는 것 같았다.

 

MessagingMessageConverter를 빈으로 만들어주고, SqsMessageListenerContainerFactory에서 커스터마이즈한 MessagingMessageConverter 빈이 있을 경우 그 빈을 자동설정 옵션으로 추가하고 없을 경우 디폴트 옵션으로 생성되는 방식으로 구현했다.

 

구현을 했으니 PR을 생성하고, 이슈 링크를 달았다.

 

최종 PR : https://github.com/awspring/spring-cloud-aws/pull/1150

 

기존에 만들어진 자동 설정 관련 테스트들이 있는데, 메인테이너가 이 테스트가 통과된 걸로 ok를 하면 테스트도 만들 필요 없을 것 같다. (제발 그랬으면)

 

오픈 소스 기부

마지막으로, 이 멘토링을 참여하면 각자가 기부하고 싶은 오픈소스에 $70를 기부해야 한다.

 

기부를 하면 아래와 같이 메일로 온다.

 

그리고 기부를 하면 GitHub에서 뱃지를 준다.

 

awspring의 첫번째 스폰서라는 건가?

 

뱃지까지 받으니 나름 뿌듯했다. 

 

마치며

조금 아쉬웠던 점은 프로젝트를 실행하는데 시간이 오래걸렸다는 점이다.

 

노트북에서는 잘 동작했는데, 집 PC에서는 IntelliJ가 pom.xml을 인식을 못하는 문제가 있었다..

(아직도 원인을 모름)

 

그래도 인제님의 도움 + 이해할 수 있는 수준의 이슈여서 코드 분석과 수정을 할 수 있었고 PR까지 완성할 수 있었다.

 

아마 테스트 코드랑 문서화까지 요청이 올 수도 있겠고, 메인테이너의 리뷰도 받아야해서 머지까지 가는데는 제법 시간이 필요할 것 같다.(이 프로젝트의 PR 머지 간격도 긴 편인 것 같다)

 

그래도 가장 중요한 첫발을 뗐다는데, 의미가 있다고 생각한다.

 

추천해주신 이슈 몇 개와 내가 찾아놓은 몇 개 더 있으니, 당장 이번 주부터 하나 더 만들어 볼 계획이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함