본문 바로가기
데브옵스 이야기

[오픈소스 기여하기] 첫번째 기여 - ArgoCD (Implement graceful shutdown in application-controller)

by lakescript 2024. 8. 12.

제 올해 목표 중 하나였고 지난 주에 첫 문을 성공적으로 열었던 따끈따끈한 오픈소스에 기여하기에 대해 작성 해보려고 합니다.

 

ArgoCD-OSS 참여

 

먼저, 저는 OSSCA에서 주관하는 ArgoCD 오픈소스에 기여하는 프로젝트에 합격해서 현재 참여하고 있습니다! (현재는 마스터 멘티로 선정되어서 조금 더 주도적으로 참여하고 있습니다!)

왜 오픈소스 기여일까?

대학생때부터 막연하게 오픈소스에 기여해보고 싶다라는 생각을 갖고 있었습니다. 하지만 막상 실행에 옮기지는 못했었고, 시간나면 해야지라는 생각만 갖고 있었습니다. 그러던 중 이렇게 팀으로서 활동할 수 있게 되어 오픈 소스에 기여하기 위해선 무엇을 해야 할 지 명확해져서 바로 실행에 옮길 수 있게 되었습니다.

 

저는 현재 SRE/Devops로 현업에 종사하고 있고, ArgoCD를 적극 사용하고 있기에 애플리케이션의 흐름이나 전체적인 프로세스는 이해도가 있어 남들보다 쉽게 할 수 있을거라는 교만한 생각을 했었습니다.. 하지만 오픈소스에 기여한다는 것은 해당 프로젝트에 대해 모두가 공감하는 이슈를 코드로서 기능을 수정하는 것이기 때문에 사용자였던 저는 많이 부족했습니다.  특히 ArgoCD의 Backend는 Go로 되어 있고, Frontend는 React+TypeScript로 되어있었고 JAVA의 Spring에 대한 경험 과 Vue, React의 경험 밖에 없었기 때문에 더더욱 쉽지 않았습니다.

 


하지만 처음 문을 열어보는 게 가장 중요하다 싶어서 업무를 진행하면서 틈틈히 Go에 대해 학습을 진행했고, 특히 ArgoCD-OSS에 계신 멘토님과 멘티님들에게 많이 물어볼 수 있어서 큰 도움이 되었습니다. (그래도 아직 제대로 알지 못해서 계속 전진중입니다..)

 

Issue 찾기

처음에 기여를 위해 UI Component나 error formating에 대한 이슈에 대해 많이 기여하는데, 저는 내부 로직적인 이슈에 대해 처리해보고 싶었습니다. 실제로 ArgoCD 레포에서 issue를 확인해보면 등록된 이슈들은 3k로 상당히 많은데, 실제로 구현 가능한 레벨의 이슈는 거의 다 처리되었거나 누군가 작업중이었습니다..

 

label 및 Author 설정

그래서 3k에 달하는 이슈들을 하나하나씩 확인하면서 수동으로 필터하기엔 너무 복잡하고 번거롭기 때문에 label에서 적당한 키워드를 찾아 설정했습니다. 

 

 

 

good first issue를 통해 처음 기여하는 사람들을 위한 레벨의 이슈들을 먼저 필터링해서 확인할 수 있었고, 상당히 흥미로운 이슈들을 확인할 수 있었습니다. (하지만 위에 보시는 것처럼 누군가 PR을 만들어 작업중인 이슈가 대부분이었습니다..) 

 

ArgoCD-OSS는 매주 오프라인 모임을 진행하는데 거기서 프로젝트의 maintainer인 crenshaw_dev의 이슈가 빨리 merge 될 수 있다는 멘토님의 꿀팁을 들을 수 있었습니다...!  그래서 바로 필터로 crenshaw_dev가 발행한 이슈를 확인해보았습니다.

 

실제로 상당히 많은 이슈들을 직접 발행하고 있었고, 많은 사람들이 분석 및 작업을 진행 하고 있었습니다.

 

선택한 Issue

이 중 제가 살펴본 이슈는 ArgoCD의 maintainer인 crenshaw_dev가 직접 올린 이슈였는데요. 

 

해당 이슈는 ArgoCD Component들이 Sigterm으로 인해 종료될 때 graceful하게 종료되고 있지 않고 있다는 bug성 이슈였습니다. 여기서 제안한 Component들은 applicationset-controller, controller, api-server, repo-server, notification 이었는데, 저는 이 중 controller 부분을 작업하기로 정했습니다.

 

바로 작업을 하고 곧 PR을 올리겠다는 comment를 작성했고, 작업을 진행했습니다.

 

 

작업 후 PR 올리기!

 

그렇게 코드 작업을 진행하고 드디어 PR을 올렸습니다...!

 

Feedback 및 Refactoring

 

 

 

제가 구현한 방식을 사용하지 않았던 방식이었고, 리팩토링 해보면 어떻겠냐는 대화를 주고 받았었습니다. 시차도 있었고, 제가 번역기를 돌려가며 소통을 하다보니 crenshaw_dev가 의도한 대로 진행되지 않자 직접 제 PR에 Commit을 추가해주면서 merge 될 수 있게 작업을 해주었습니다.. (그저 갓,,)

 

드디어 Merge..!

 

고맙다는 Comment를 끝으로 merge되었고, 제 코드가 프로젝트에 기여할 수 있었습니다!

 

많은 사람들의 도움 끝에 첫 기여를 성공적으로 할 수 있게 되었고, 앞으로 올해에 남은 날동안은 더욱 적극적으로 기여해볼 생각입니다. 

 

회고

Go를 공부하자.....

728x90

'데브옵스 이야기' 카테고리의 다른 글

명심  (3) 2024.10.06
AWS S3 Bucket ACL은 권장사항이 아닙니더!  (0) 2024.08.20
K8s의 Memory? (RAM, Storage)  (0) 2024.08.02
Kubernetes common errors  (0) 2024.07.29