🚀 들어가며
여러분 잘 지내셨나요?
오랜만에 돌아옵니다.
이번 글은 별건 아니고 제가 개발을 시작한 후 처음으로 오픈소스 contributor 가 되어 글을 남겨보려고 적었습니다.
contributor 라는게 되게 커보이고 모두가 쓰는 라이브러리인데.. 내가 감히? 라는 생각이 참 많이 들었는데요.
태끼님의 블로그를 보고 자신감을 얻어 저도 contributor 가 되었습니다.
사실 많은 걸 해결한건 아니구요. 숟가락 하나 얹었습니다.
🙋🏻 tsoa
제가 contributor 가 된 라이브러리는 tsoa 입니다.
tsoa를 간단히 설명해보자면, Typescript와 Node.js 로 서버 애플리케이션을 빌드하는 openAPI compiler 라고 소개되어 있습니다.
express, koa, hapi 모두 지원합니다.
사용 할 때 장점이 참 많았는데요.
라우팅을 자동으로 해준다던지, swagger 와의 간편한 자동 연결 등 매력적인 라이브러리입니다.
✅ issue 둘러보기
라이브러리 쓰다 보면 issue를 많이 확인하는 것 같아요.
혹시라도 나와 비슷한 issue 가 있는지 등등을 확인하기 위해!
저는 사람들이 어떤 issue를 가지고 있는지 확인해보았습니다.
그러던 중 HTTP 상태 중 451이 지원되지 않는다는 issue 를 보았습니다.
💻 코드 뜯어보기
우선 정확히 어떤 이슈인지 확인하기 위해 제가 직접 사용하던 tsoa sample 코드를 꺼내 451을 response 로 입력해봤습니다.
451 이 type에 없다는 군요
tsoa 의 Response 를 타고 들어가봤습니다.
HttpStatusCodeLiteral 이란 미리 정의된 interface 내부에 451이 없는 것으로 보였습니다.
실제로 interface 를 타고 가니 451이 없었습니다.
먼저 sample로 쓰던 tsoa 코드에 HttpStatusCodeLiteral interface 내부에 451을 추가해줬습니다.
이후 451을 넣어보니 정상 작동하는 걸 확인했습니다.
문제와 해결방법을 알고 난 후 tsoa 깃헙을 fork 하여 작업을 시작했습니다.
👩🏻💻 테스트가 중요하다!
제가 실제로 issue를 해결하기 위해 작성한 코드는 interface 내부에 451을 넣은게 끝이지만, 테스트 코드를 먼저 작성했습니다.
아무래도 많은 사람이 쓰는 라이브러리이고, 테스트코드도 굉장히 방대했습니다.
express, koa, hapi 에서 모두 작동해야 하니 각각 따로 작성했습니다.
미리 만들어져 있던 testController 내부에 451 을 Response 로 반환하는 코드를 작성했습니다.
이후 express, koa, hapi 각 프레임워크를 테스트 할 수 있는 테스트 코드 파일 내부에 제가 작성한 451 반환을 테스트 할 수 있게끔 테스트 코드를 작성했습니다.
status 가 451 로 제대로 반환되면 이제 tsoa 에서도 451 status 를 지원하는 것이니까요!
전체적으로 테스트에 문제가 없었으니 PR 을 날려보았습니다.
🛠 PR
요렇게 PR 후 자체적으로 github-actions 를 통해 build, test 를 진행합니다.
여기서 문제가 없으면 기다리다 보면 코드 리뷰가 날라옵니다.
koa 에서는 원래 451을 support 하지 않는다고 하군요
하지만 리뷰어님께서 테스트 코드가 제대로 작동한다고 하시며 merge를 허락해주셨습니다~!
🚀 마무리
이렇게 제 첫 contribute 경험담이었는데요.
뭔가 실제 Issue 해결을 위해 짠 코드보다 테스트 코드가 더 많았던 경험이었습니다.
역시 TDD 가 얼마나 중요한 지 또 느끼고 갑니다. (아직 공부할 게 많다)
무튼 2.3K 라이브러리에 한줄 얹은 사람이 되어 뿌듯하네요
제가 한 것도 굉장히 작은 부분이잖아요. 그래서 여러분도 충분히 오픈소스에 기여하실 수 있다고 생각합니다.
누구든지 생태계를 위해 거리낌없이 기여할 수 있는 문화가 되었으면 좋겠습니다.
모든 개발자님들 힘내세요 :-)
'DEV > 잡다한 개발 일지' 카테고리의 다른 글
M1 MacOS Ventura ruby build failed error (Feat. XCode 14) (0) | 2023.01.18 |
---|---|
[SOPT] 29대 서버 파트장 돌아보기 - 1 (8) | 2022.09.03 |
[React Native] M1 Mac에서 Android 에뮬레이터 돌리기 (0) | 2021.09.18 |
[github] push 변경 사항 (The requested URL returned error: 403) + access_token 만들기 (5) | 2021.08.15 |
28th SOPT APPJAM 앱잼 - 두리번(DOORIBON) 회고 (3) (8) | 2021.08.02 |