LINE Corporation이 2023년 10월 1일부로 LY Corporation이 되었습니다. LY Corporation의 새로운 기술 블로그를 소개합니다. LY Corporation Tech Blog

Blog


생애 첫 오픈 소스 기여 경험(feat. Armeria)

들어가며

이번 글은 LINE에서 진행됐던 Armeria Sprint 참가 후기입니다. '짧은' 스프린트를 거친 뒤 '긴' 리뷰 과정을 거치며 하나의 기능을 완성하고 결국 릴리스까지 이뤄낸, 길고 험난(?)했던 오픈 소스 기여 경험을 공유하려고 합니다. 

어느 날, LINE에서 개발하고 있는 오픈 소스인 Armeria에서 스프린트 참여자를 모집한다는 메일을 받았습니다. 호기심 반, 선착순이라고 하니 일단 지원하자는 마음 반으로 내용도 자세히 확인하지 않고 신청해 버렸습니다. 신청하고 난 후 내용을 확인해 보니 짧은 기간 동안 멘토와 멘티로 활동하면서 Armeria에 코드 기여를 할 수 있는 기회를 제공해 주는 좋은 활동이었습니다. 다만 제가 Armeria에 대한 지식이 전혀 없어서 고민했는데요. 다행히 사내에서 진행되는 OJT(On the Job Training)를 통해서 Armeria 소개를 직접 들을 수 있는 기회가 찾아왔습니다. OJT에 참석하여 Armeria에 대한 설명을 듣고 나니 걱정 반, 설렘 반이 되었습니다. 이렇게 큰 오픈 소스에 기여해 볼 기회가 생겨 좋긴 했지만, 정말 내가 마무리까지 잘 할 수 있을까 하는 걱정이 앞섰습니다.

이슈 선정에서 PR 등록까지

모임에 참석하기 전에, 스프린트를 통해서 스스로 달성하고 싶은 목표에 대해서 생각해 보았습니다. 첫 번째 목표는 '도전을 통해 성장하기'였고, 두 번째는 '목표를 쉽게 설정하는 한이 있더라도 끝까지 포기하지 않기'였습니다. 목표를 설정한 후에 메일로 안내된 간단한 사전 준비를 확인한 뒤, 설레는 마음으로 모임에 참석했습니다.

간단하게 시작한 첫 번째 모임

첫 번째 모임에선 앞으로 개발해야 할 이슈 중에서 'good-first-issue'로 설정된 상대적으로 쉬운(?) 이슈들에 대해서 설명을 듣고, 스프린트에 참여한 사람들이 자신이 개발해 보고 싶은 것을 고르는 자리가 마련되었습니다. 저는 스스로 설정한 두 번째 목표를 떠올리며 'good-first-issue' 중에서도 가장 간단해 보였던 ‘Show Armeria version in DocService’를 골라서 진행했습니다. 이슈에 대해서 간단하게 설명하자면, 제목 그대로 'Document Service'에 현재 Armeria의 버전을 표시하는 작업이었습니다(당시 설명만 듣고는 정말 쉽게 끝날 줄 알았습니다 :)  ). 개발은 다음 모임 때 진행하기로 하고 첫 번째 모임이 마무리되었습니다.

개발을 시작해 PR 등록까지 마친 두 번째 모임 

두 번째 모인 자리에서는 바로 개발이 진행되었습니다. 궁금한 점이 있으면 근처 멘토에게 찾아가 물어보거나 도움을 요청하면 된다는 설명과 함께 고독한 개발 시간이 시작되었습니다. 저는 가장 간단해 보이는 이슈를 선택했지만, 그럼에도 거대한 양의 코드 앞에서 무엇부터 시작해야 할지 감이 잘 오지 않았습니다. 게다가 제 이슈는 너무나 간단한 이슈였기 때문에 별다른 설명이 없어서 혼자서 끙끙대고 있었는데요. 그렇게 시간이 흘러가 버리는 게 아까워서 근처에 계신 멘토 님께 도움을 요청했습니다. 멘토 님은 해당 이슈에 대해 자세하게 설명해 주며 가장 처음에 해야 할, 프로젝트 세팅과 제가 개발해야 하는 부분을 파악하는 작업까지 도와주셨습니다. 

어느 정도 가이드를 받고 나니 혼자서도 충분히 개발을 진행할 수 있게 되었습니다. 버전과 관련된 소스 코드를 살펴보면서 화면의 어느 곳에 버전을 표시하면 가장 좋을지 고민했습니다. 제일 잘 보이면서 어색하지 않은 곳에 위치시키면 좋을 것 같아서 최상단 타이틀 옆에 버전 표시를 추가해도 되는지 멘토와 상의한 뒤 빠르게 추가해 보았습니다. 정말 간단하게 추가할 수 있었는데요. 추가하고 나니 한 가지 거슬리는 부분이 있었습니다. 버전은 '0.84.0-SNAPSHOT'와 같은 형식으로 표시되었는데요. 뒤에 불필요하게 붙어 있는 'SNAPSHOT' 텍스트를 제거하면 더 깔끔해질 것 같았습니다. 그래서 'SNAPSHOT' 텍스트를 지우고 버전과 관련된 숫자만 표시되도록 다시 수정한 뒤, 드디어 첫 오픈 소스 PR(pull request)인 Show armeria version in doc service #685를 등록했습니다.

직접 진행하면서 오픈 소스에도 이렇게 간단하게 끝나는 이슈가 있다는 점에 놀랐고, 한편으론 오픈 소스에 기여하는 건 아무나 할 수 없는 어려운 거라고 생각했던 제 짧은 생각이 부끄럽게 느껴졌습니다.

오픈 소스 기여의 진정한 시작, 리뷰

'오픈 소스 기여는 리뷰를 받으면서 시작된다'라는 말과 함께, 앞으로는 리뷰를 통해서 온라인에서 만나자고 전달받고 스프린트가 종료되었습니다. 사실 그 말을 들으면서도 속으로는 '이렇게 간단한 이슈니 쉽게 끝날 수 있겠지'라고 생각했습니다.

하나의 PR이 머지(merge)되기 위해서는 CI(Continuous Integration)를 통과한 후 메인테이너의 승인(approve)을 받아야 합니다. PR을 등록하자마자 처음 달렸던 코멘트는 개발용 코드를 제외해 달라는 내용이었습니다. 개발하기 위해 설정을 변경해 두었던 것을 깜빡 잊고 개발용 코드가 포함된 상태로 PR을 올리는 바람에 CI 과정에서 기본적으로 진행되는 검사에서 에러를 의미하는 빨간불이 표시되었고, 관련 내용을 확인한 리뷰어가 남겨준 코멘트였습니다. 다행히 문제가 되었던 부분을 금방 발견해 빠르게 수정할 수 있었습니다. 그 코멘트를 시작으로 간단하게 끝날 거라고 생각했던 제 작업에 여러 코멘트가 달리기 시작했습니다. 리뷰어들이 여러 가지 개선 사항을 제시해 주었고, 그걸 보며 드디어 오픈 소스 기여가 시작되었다는 것을 느낄 수 있었습니다.

자유로운 의견 제시를 통한 개선

오픈 소스 기여를 경험하면서 느끼게 된 점 중 하나는, 수평적인 관계를 통해 자유롭게 의견을 제시하는 LINE의 문화가 오픈 소스에서도 그대로 나타나고 있었다는 점입니다. 좋은 아이디어가 떠오르면 누구나 코멘트를 통해서 자유롭게 의견을 제시하고, 이를 통해 오픈 소스가 더 좋은 방향으로 나아갈 수 있다는 점이 흥미로웠습니다.

제가 맡은 작업은 간단하게 버전만 표시하는 것이었는데요. 메인테이너 분이 추가로 모듈별 커밋 날짜, 커밋 해시(hash), 해당 모듈의 상태 등 다른 유용한 정보를 함께 보여주면 어떻겠냐고 의견을 제시해 주었습니다. 저는 코멘트를 확인하고 어디에 보여 주면 좋을지 고민했습니다. 처음 DocService에 접근하면 아래와 같은 메인 페이지가 나타나는데요. 간단한 환영 메시지와 짧은 설명이 표시된 상단 외의 나머지 공간이 비어 있어서 허전해 보였습니다. 저는 메인 페이지의 빈 공간에 코멘트에서 언급된 정보들을 표시하면 어떻겠냐고 의견을 제시했고, 'Sounds like a good idea!'라는 긍정적인 피드백을 받았습니다. 

아래와 같이 허전해 보였던 메인 페이지에 Version information이라는 타이틀과 함께 표 형식의 버전 정보를 추가하니 화면이 유용한 정보로 가득 찬 느낌입니다. 추가 작업을 진행하면서 가장 기억에 남았던 건 마지막 커밋 시각을 보여주는 Commit Time 컬럼 값 표시 형식의 변화 과정입니다. 처음에 해당 컬럼은 쉽게 시간을 알아보기 힘든 숫자로 표시되었는데요. 이를 사용자가 쉽게 인지할 수 있는 UTC String 형식으로 변경했습니다. 그 후 메인테이너 분이 현재 커밋 시점에서 얼마나 시간이 흘렀는지 사용자들이 더 쉽게 알아볼 수 있는 방법을 제안해 주어서 이를 적용했는데요. 적용하면서 추가로 기존 UTC String 형식으로 보여줬던 값을 말풍선(tooltip)으로 옮겨 사용자가 컬럼 값에 마우스를 올리면 정확한 시간을 함께 확인할 수 있도록 변경했습니다.

이렇게 추가 개발을 진행하면서 Armeria에서 사용자 편의성을 많이 고려하며 개발하고 있다는 것을 느낄 수 있었습니다.

찬란한 결과

처음 시작은 현재 버전을 표시하는 것뿐이었지만, 자유롭게 의견을 주고받으며 개발하는 과정을 거쳐서 최종적으로는 각 모듈별 버전 관련 정보 표시까지 추가하게 되었습니다. 제가 추가한 기능은 CI를 통과한 뒤 모든 메인테이너의 승인을 받아 머지되었고, 0.91.0 버전으로 마침내 릴리스되었습니다. 기여자(contributor) 명단에서 제 ID를 확인했을 때는 정말 말로 표현할 수 없을 만큼 기뻤습니다.

해당 이슈를 처리하는 동안 리뷰어와 총 66개의 코멘트를 주고받았습니다. 중간에 잠시 잊고 있다가 리마인더를 받고 다시 시작하기도 했는데요. 그러다 보니 약 5개월이라는 긴 시간이 소요되었습니다. 오랜 시간이 걸렸지만, 꾸준히 저를 찾아주신 메인테이너 분들의 도움을 받아 포기하지 않고 지속적으로 개발한 덕분에 결국 오픈 소스에 기여할 수 있었습니다. 

마치며

호기심으로 시작했지만, 개발을 진행하며 오픈 소스 생태계에 대해 좀 더 깊이 알게 된 좋은 경험이었습니다. 꼼꼼하게 코드를 리뷰하며 개선해야 할 부분을 짚어주고 더 좋은 방법과 더 좋은 코드를 조언해 준 많은 분들 덕분에 성장할 수 있는 기회를 잘 잡을 수 있었고, 스스로 설정한 목표를 달성하게 되어 아주 만족스러웠습니다.

Armeria 스프린트를 통해 오픈 소스에 기여해 보면서 오픈 소스에 대한 두려움을 이겨낼 수 있었습니다. 앞으로 주기적으로, 더 많이 오픈 소스에 기여하려고 합니다. 빠른 피드백과 함께 마지막까지 포기하지 않고 도와주신 모든 분들께 이 자리를 빌려 감사의 인사를 드립니다.