본문 바로가기

Diary

2021 오픈소스 컨트리뷰션 아카데미를 마치며

반응형

 

🍳이전글

https://codecollector.tistory.com/1098?category=1039078 

 

2021 오픈소스 컨트리뷰션 아카데미 프로젝트 지원 후기

 동기  여러 it기업을 지원하다 실패를 맛보고 하반기 준비를 하고 있을 때 좋은 기회가 왔다. 프로젝트 경험 및 개발경험의 부재로 인해 배움에 목마르다 오픈소스 소프트웨어 통합지원센터라

codecollector.tistory.com

🍳머리말

길면 긴 짧으면 짧았던 컨트리뷰션 아카데미 프로젝트는 끝났다. 하지만 이제 시작이다

 


📕 활동

📔 Challenges (21. 8. 7. - 21. 8. 31)

아예 아무것도 모르는 rust라는 언어와 이론상으로만 배웠던 dbms의 동작방식을 code로 보고 구현해보는 것이라 도대체 어떻게 할지를 몰랐다. 일단 엄격한 rust언어의 장벽에 갇혀 1달을 헤맸었던 것 같다. 긍정적으로 차근히 온라인 상에서 나와있는 책을 읽고 공부했다. 책도 이론에만 그치지 않는 예제와 함께 친절히 이해를 돕기 때문에 즐겁게 배운 것 같다.

https://rinthel.github.io/rust-lang-book-ko/foreword.html

 

들어가기 앞서 - The Rust Programming Language

항상 그렇게 명확지는 않았지만, 러스트 프로그래밍 언어는 근본적으로 권한 분산에 관한 것입니다: 여러분이 어떠한 종류의 코드를 작성하는 중이던 간에, 러스트는 여러분에게 더 멀리 뻗어

rinthel.github.io

 

하지만 항상 텍스트로만 이해했다고 여기고 직접 코드를 짜는 순간 내가 원하는 결과물이 쉽게 나오지 않는다는 좌절감을 알기 때문에 내가 완전히 이해했음을 확신할 수 있는 장치가 필요했다. 그렇게 퀴즈 형식으로 rust의 문법을 익히고 정답을 출력해볼 수 있는 repo를 멘토 분 중 한 분이 알려줘서 많은 도움을 받았다.

 

https://github.com/rust-lang/rustlings

 

GitHub - rust-lang/rustlings: Small exercises to get you used to reading and writing Rust code!

:crab: Small exercises to get you used to reading and writing Rust code! - GitHub - rust-lang/rustlings: Small exercises to get you used to reading and writing Rust code!

github.com

 한 2주가 지나자 조금씩 보이기 시작했다. project의 code들이 1줄 2둘 씩 보이기 시작했다. 하지만 여전히 어려움은 있었다. 무엇을 보완해야할지, 개발할 점은 무엇인지 생각해서 pr을 날려야 하는 줄 알고 멘붕이 살짝 올뻔 했다. 이는 멘토님이 해결해 주셨다. 남들이 짜놓은 code를 기반으로 간단히 형태만 흉내내면 추가할 수 있는 간단한 함수를 test code와 함께 추가하도록 함으로써 git이 어떻게 돌아가는지 복습하고(fork, clone, push, commit, push, pr, merge) 성공적으로 첫 pr을 날리고 merge할 수 있었다. 

 

Sql function REVERSE 기능 추가 (2021.08.07 ~ 2021.08.26) #265

Project의 경우 체계적으로 정리되어 있고 구현되어 있었던 folder, file을 통해 REVERSE 함수를 간단하게 추가. 하지만 전체적인 sql문들을 처리하는 방식이 현재로써는 table과 column이 만들어진 상태에 대해서만 동작하기 때문에 column명을 함수의 parameter로 넘겨 문자열을 뒤집어 반환하는 제한적인 기능만을 만듦. 기능 구현 후 검증을 위해 integration test를 작성해 추가.

 

Rust function PartialEq, PartialOrd test 작성 및 bug 수정 (2021.08.26 ~ 2021.08.30) #329 #353

rust를 공부하는 한편 rust에서 지원하는 내장함수인 PartialEq, PartialOrd 를 customizing해놓은 부분을 검증하기 위한 unit test를 추가. 추가하는 과정에서 bug를 발견하게 되었습니다. PartialEq함수가 sql문을 parsing한 후 나온 문자열을 여러 data들(Boolean, Number, Text, Interval, Null)로 분류한 후 두 data가 같은지를 비교하는 기능인데 정수 12와 12.0을 다르게 판단하는 오류를 발견해 수정한 후 unit test code를 추가. 또한 PartialOrd 함수는 마찬가지로 분류된 두 data값에 대해 같은지, 큰지, 작은지를 비교해 Option<ordering> 형태로 반환해주는 함수이며 이에 대해 unit test code를 추가.

 

📔 Masters (21. 9. 6. - 21. 11. 19)

 천천히 단계를 높여가며 unit test -> refactoring으로 확장해 나아가며 project의 core한 기능을 개발하도록 해주셔서 좋게 따라갈 수 있었다. refactoring은 결국 구조는 짜서 draft pr까지는 날렸으나 디테일한 rust의 문법을 구현하는데 있어 가로막혀 오프라인으로 멘토님이 짜주셨다는건 안비밀. 영광의 pair programming이었습니다.

 

Logical XOR를 parser에 추가 (2021.08.30 ~ 2021.09.17) #357 

bitwise operator인 ^는 구현되어 있으나 논리적으로 XOR하는 부분은 parser로 구현되어 있지 않아 추가한 뒤 제대로 parsing이 되는지 test code를 작성.

 

Boolean type에 대한 Logical XOR의 동작을 구현 (2021.08.30 ~ 2021.09.17) #354 

mariadb문서를 참조해 Boolean type끼리의 논리적 XOR가 동작하도록 기능을 추가. sqlparser 에서 자료형 INT에 대해 parsing하는 방식이 바뀌어 기존 project인 GlueSql도 update. GlueSql은 sqlparser를 사용하고 있기 때문.

 

Aggregation function부분 private enum이용, refactoring (2021.10.03 ~ 2021.11.14) #368

expr에서 aggregation임을 알았을 때 count, sum, min, max를 수행한 결과 값을 공통적으로 1개만 export하는 함수로 동작하고 있는 구조였으며 때문에 avg는 중간값을 두 개(sum/count)저장해야 하는 상황이라 구현되어 있지 않았음. 또한 tuple구조로 중간값을 저장했을 때 값의 의미가 불분명해져 enum으로 만들어줘야 되었다. 결과적으로 enum으로 구분된 함수를 호출해 어떤 값이 사용되고 있고 어떻게 값을 반환하는지 명확한 구조의 코드가 만들어졌다.

 

Unary operator plus, minus함수에 대한 unit test code 추가 (2021.11.14 ~ 2021.11.15) #406

앞선 pr에 대한 code coverage를 확인해보니 단항연산자의 함수에 대한 unit test가 추가되어있지 않음을 확인. 간단히 추가해 올렸다.

 

그 외 리드 멘티님이 project를 하는데 있어서 가장 큰 장벽을 설문조사해 rust언어 자체에 문제점을 알게 되었다. 이 후 5분 rust라는 rust에서 어렵거나 생소한 개념을 직접 발표자료를 준비하고 발표하도록 매주 1회 진행했다. 발표이후에는 토론시간을 가짐으로써 rust라는 언어에 더욱 친숙해 질 수 있었다.


📕 성과 및 계획

📔 성과

 rust라는 새로운 언어를 접하게 된 부분, 기존에 관심이 있었던 sql의 동작방식을 단계적인 contribution을 통해 전체적인 flow나 문법적인 부분을 어느정도 이해하게 되었다. 또한 학습에서 가장 좋아하는 직접 체험을 하게 된 점이 뜻깊었다.

느꼈던 어려움 : rust라는 언어는 정말 엄격했다. null을 허용하지 않으며 각 parameter에 명확한 type을 선언해줘야 했으며 소유권, Option, trait 등등 생각보다 문법이 다른 언어에 비해 생소했고 자연스럽게 다루기에는 아직 부족한 점이 많았다.

성장 : code자체를 짜는 것 뿐만아니라 개발 외적인 부분에서 많은 성장을 하게 되었다. 협업방식, 의사소통 부분에서 많이 배웠다. 서로의 의견을 조율하고 내가 이해한 내용과 모르는 부분을 명확히 설명해 상호간 이해하는 부분에 오차가 없도록 했다. 온라인 회의는 끊김현상으로 약간 불편했지만 의견을 적극적으로 공유하고 서로 말하는 방식에 신경쓰면서 웃으며 잘 진행한 것 같아 뿌듯함을 느꼈다. 그리고 그냥 겉핥기로 사용했던 github가 왜 협업툴이고 어떤 부분에 있어 유용한지 직접 fetch, push, merge를 하면서 체득하게 되었다.

계속하다보니..

버스? 를 탔지만 함께 해주신 분들. 발표를 직접 해주신 분들 리드멘티 분들, 멘토님에게 너무도 많은 도움을 받았다. 항상 감사하다.

최우수상 수상

📔 계획

gluesql은 이제 시작이다 매주 1회 정기 오프라인 모임을 하기로 했으며 project에 애정이 생겼고 끝까지 해보려고 한다. 기여자체에서 오는 성취감과 뿌듯함이 좋은 원동력으로 작용해 많은 성장을 했다. 더욱 성장하기 위해 공부하고 노력할 것이다. 또한 이 project가 끝나게 되면 다른 open source에도 참여해 적극적으로 기여하고 싶다.