문화
래블업의 이야기를 확인해보세요.
안녕하세요, 래블업에서 소프트웨어 엔지니어로 일하고 있는 이규봉입니다.
저는 Backend.AI 코어 유지보수 관련 작업 및 Raft 도입을 위해 필요한 작업들을 맡아 진행하고 있습니다.
이번 글에서는 2024 OSSCA 참가 후기와 느낀 점들을 공유드리려 합니다.
Raftify란?
Raftify는 분산 시스템에서 안정적이고 신뢰할 수 있는 환경을 빠르게 구축할 수 있도록, Raft 알고리즘을 간편하게 적용해주는 프레임워크입니다. 이를 통해 개발자들은 별도의 복잡한 구현 과정을 거치지 않고도 리더 선출, 로그 복제, 장애 복구 등 핵심적인 메커니즘을 손쉽게 처리할 수 있습니다.
Raft 알고리즘은 분산 시스템에서 데이터의 일관성을 유지하기 위해 설계된 합의 알고리즘입니다. 기존에 대표적으로 사용되던 Paxos는 구조가 복잡하고 구현이 까다롭다는 단점이 있었는데, Raft는 이를 보완하여 이해하기 쉽고 간단하게 구현할 수 있도록 만들어졌습니다. 이러한 특성 덕분에 분산 데이터베이스 등 다양한 분야에서 안정적인 동작을 보장하는 데 널리 활용되고 있습니다.
💡 Raftify에 대해 궁금하시다면, 해당 소개글을 읽어보세요!
OSSCA 참가 이유
저는 Backend.AI에 Raft 기반 고가용성(HA) 구조를 도입하는 작업의 일환으로 Raftify 개발을 진행하고 있습니다. 이 과정에서 직면한 다양한 이슈와 고민을 여러 사람들과 공유하고, 함께 해결책을 모색하며 Raftify를 더 발전된 프로젝트로 만들고자 했습니다.
OSSCA가 이러한 목표를 실현할 기회일 뿐만 아니라 멘티 분들에게도 성장의 발판을 제공할 수 있다고 생각해 리드 멘토로 참여하게 되었습니다.
프로그램 진행 방식
저는 리드 멘토로서, 멘티들이 13주 동안 분산 시스템 이론을 학습하고 실제 구현체를 디버깅하며 이론과 구현체를 비교·검토하는 과정을 통해 배운 내용을 되돌아보고, 최소 1개 이상의 컨트리뷰션을 완성할 수 있도록 돕는 것을 목표로 삼았습니다. 이를 통해 멘티들이 실질적인 기여를 경험하고, 개인적인 성장과 성과를 얻을 수 있도록 지원했습니다.
프로젝트의 진입 장벽을 낮추기 위해 OSSCA 챌린지 기간을 배경 지식 학습과 스터디에 집중하는 단계로 활용하고, 실제 컨트리뷰션은 OSSCA 마스터 기간에 진행하도록 두 단계를 나누어 운영했습니다.
OSSCA 챌린지 - 스터디
우선 가장 먼저 진행한 것은 배경 지식 공유를 위한 Raft 논문 스터디였습니다.
Raft를 처음 접하는 멘티 분들 입장에서 논문을 바로 읽고 이해하기도 쉽지 않을 것이기 때문에 '모각코 (모여서 각자 코딩)'를 통해 함께 모여 공부를 진행하고 잘 이해가 안 되는 부분들에 대한 질문을 받았습니다.
거주지와 스터디 장소가 멀어 온라인으로 모임에 참여하시는 분들도 많았기 때문에, 유튜브를 통해 강의 녹화 영상을 공유드리는 식으로 진행했습니다.
챌린지 기간 동안 멘티분들이 학습한 내용을 자신만의 언어로 정리하고, 배운 내용과 친숙해질 수 있도록 마크다운 형태로 키워드별 내용을 정리하는 과제를 드렸습니다.
오프라인 모임 뿐만 아니라 온라인으로 디스코드를 활용해서 질의응답을 진행했으며, 오프라인 모임에서 나온 질문과 답변을 디스코드에 공유하여 온라인으로만 참여하는 멘티들도 문제없이 내용을 확인하고 참여할 수 있도록 했습니다.
기본적인 학습 이후에는 코드에 대한 학습을 진행했습니다. raft-rs 구조와 관련 용어들을 전체적으로 한 번 설명하는 시간을 가졌고, 이후 Raftify, raft-rs 소스 코드를 들여다보며 세부 사항들에 대해 함께 알아보는 시간을 가졌습니다. 맨 처음 시작했을 때는 어려워하는 분들이 많았지만, 꾸준히 공부하며 점차 저희가 알려드리는 내용들을 빠르게 흡수하며 따라와주시는 멘티분들 덕분에 매 주 열심히 자료를 준비할 수 있었습니다.
본격적인 컨트리뷰션을 진행하기 전, 이론부터 실제 코드까지 훑어보고, 공부하는 시간을 가졌기 때문에 마스터즈 기간에는 컨트리뷰션에만 집중할 수 있어 효율적으로 운영할 수 있었다고 생각합니다.
모두가 적극적으로 스터디와 프로젝트에 참여해주셨고, 이 과정에서 여러 건의 PR을 작성하거나 코드를 리뷰하는 등 수준 높은 기여를 해주셨습니다.
OSSCA 마스터즈 - 코드 컨트리뷰션
마스터즈 기간부터는 본격적으로 컨트리뷰션에 원활히 참여하실 수 있도록 Good first issue 들을 할당해 드렸고, 멘티 분들께서 흥미를 느끼시는 분야 (Raft 스토리지 구현체 추가, 테스트 케이스 작성, 예외 처리 로직 추가 등)에 한 개 이상의 컨트리뷰션을 진행 해 보실 수 있도록 1:1 커피챗을 통해 이슈 선정을 도와드렸습니다.
CI나 CLI에 간단한 기능을 추가해보고 싶어 하는 분들, 스터디 기간 동안 학습했던 알고리즘 구현 코드를 더 깊이 탐구하고 싶어 하는 분들, 혹은 더 공부해서 비교적 어려운 이슈를 해결해보고 싶어 하는 분들까지 각자의 관심사에 맞는 다양한 이슈를 선정해 진행할 수 있도록 지원했습니다. 그 결과, 총 20개 이상의 PR이 성공적으로 머지될 수 있었습니다.
컨트리뷰션 소개
해당 섹션을 통해 몇 가지 대표적인 컨트리뷰션을 소개드리겠습니다.
(#118) 리더 선출 통합 테스트 코드 리팩토링
해당 컨트리뷰션은 Raft 알고리즘 구현 및 테스트에 관심이 많으셨던 멘티 분께서 진행해주셨습니다.
리더 선출 통합 테스트 코드를 리팩토링 해 임의의 크기의 클러스터에서의 리더 선출을 테스트 할 수 있도록 개선되었으며, 전반적인 코드 퀄리티가 많이 개선되었습니다.
(#124) RocksDB 로그 스토리지 지원 추가
원래 Raftify는 LMDB를 로그 스토리지로 사용하도록 개발되었습니다. 그러나 컨트리뷰션 아카데미 프로그램이 시작될 때부터 RocksDB 기반의 새로운 로그 스토리지를 구현해보고 싶어 하던 멘티가 계셨고, 긴 시간 동안의 학습과 노력 끝에 실제로 해당 기능을 추가할 수 있었습니다.
이를 통해 Raftify는 다양한 요구 사항에 따라 여러 스토리지 구현체 중에서 적합한 것을 선택해 사용할 수 있는 유연성을 갖추게 되었습니다.
(#130) 3-노드 클러스터 예제 docker-compose
파일 추가
별도의 개발 환경 구축 절차 없이 Raftify 클러스터를 바로 띄우고 테스트 해 볼 수 있도록 Dockerfile 및 docker-compose 관련 설정 파일이 추가되었습니다.
이를 통해 더욱 더 간단하게 일관된 개발 환경을 구축하고 테스트 해 볼 수 있게 되었습니다. 또 이후 팔로업 PR로 Multi-stage builds를 통해 이미지 사이즈를 줄이는 작업까지 진행해주셨습니다.
마치며
제가 오픈소스 컨트리뷰션 아카데미에 멘토로 참여해본 것은 이번이 처음입니다. 첫 멘토 활동이었기에 많은 걱정이 있었지만, 멘티 분들이 정말 열성적으로 참여해주시기도 했고, 함께 스터디를 진행해보니 여럿이 같은 목표를 가지고 공부를 한다는 것이 생각보다 효율적이었고, 또 재미도 느낄 수 있어서 생각 이상으로 즐겁고 보람 있는 시간을 보낼 수 있었습니다.
파편적으로 복잡한 주제를 학습하는 것은 잘 와닿지 않거나 이해하기 어려운 경우가 많지만, 구현체를 직접 사용하거나 만들어보는 과정에서 비로소 명확히 이해되는 경우가 많습니다. OSSCA에 참여한 멘티들은 구현체를 직접 분석하고 사용하며, 기여하는 과정을 통해 자연스럽게 이론을 실무에 연결해볼 수 있습니다. 이러한 점에서, 분산 시스템과 같은 복잡한 주제를 제대로 공부해보고자 하는 사람들에게 OSSCA가 소중한 기회가 될 수 있다고 생각합니다.
Raftify는 다른 Raft 라이브러리들에 비해 직관적이고 간단한 인터페이스를 제공하며, 배경 지식이 필요한 복잡한 로직을 블랙박스로 추상화해 입문자들에게 분산 시스템을 이해하고 구축해볼 수 있는 좋은 시작점을 제공합니다. 뿐만 아니라, 파이썬 바인딩을 통해 진입 장벽이 낮은 파이썬으로 실습할 수 있으며, 적절히 정리된 예제 및 테스트 코드들을 통해 학습자들이 직접 실습하며 개념을 명확히 이해할 수 있도록 돕습니다.
분산 시스템에 관심이 있으시다면 Raftify를 확인해보세요!